Ошибка: не удалось инициализировать класс org.xerial.snappy.Snappy.

Я импортирую данные из RDBMS в hdfs, используя sqoop 1.4.6, используя snappyCodec в качестве сжатия и avro в качестве формата файла. У меня установлены следующие компоненты:

Hadoop 2.8.0
Spark 2.1.0
Hive 1.2.2
Scala 2.11.8
Cassandra 3.10
>
Когда я пытаюсь импортировать таблицу mysql в hdfs, используя следующую команду:

sqoop import --connect jdbc:mysql://******:****/retail_db --username **** --password **** --table order_items --compress --compression-codec org.apache.hadoop.io.compress.SnappyCodec --target-dir /user/test/order_items --as-avrodatafile

Я получаю следующую ошибку:

Could not initialize class org.xerial.snappy.Snappy

и время ожидания истекает после попытки найти этот класс.
Я пробовал решения, упомянутые в отношении этой проблемы, такие как монтирование tmp и добавление файла snappy jar (который уже присутствует), но ни одно из них не работает. Что-нибудь, что я упускаю?


person Abdul Mannan    schedule 12.07.2017    source источник


Ответы (1)


Попробовав несколько решений, я наконец понял проблему. Использование флага --verbose с командой sqoop показало, что было импортировано несколько файлов snappy-xxx.jar из разных компонентов, таких как

  1. $HADOOP_HOME/доля/hadoop/общий/библиотека/
  2. $HADOOP_HOME/доля/hadoop/mapreduce/lib/
  3. $SQOOP_HOME/lib/
    поэтому было включено 3 snappy jar.

Решение: я удостоверился, что в этом случае включается только 1 файл, и ошибка была устранена.

person Abdul Mannan    schedule 12.07.2017