Класс com.hadoop.compression.lzo.LzoCodec не найден для Spark на CDH 5?

Я работаю над этой проблемой в течение двух дней и до сих пор не нашел пути.

Проблема: наш Spark, установленный через новейшую CDH 5, всегда жалуется на потерю класса LzoCodec, даже после того, как я установил HADOOP_LZO через Parcels в менеджере cloudera. Мы используем MR1 на CDH 5.0.0-1.cdh5.0.0.p0.47.

Попробуйте исправить: конфигурации в официальная документация CDH об использовании пакета LZO также добавлена, но проблема все еще существует.

Большинство сообщений в Google дают советы, аналогичные приведенным выше. Я также подозреваю, что искра пытается запустить YARN, который там не активирован; но я не могу найти конфигурацию в CMF или других сообщениях по этой теме.

Пожалуйста, дайте мне некоторую помощь, если вы знаете, как справиться с этим.


person caesar0301    schedule 03.05.2014    source источник


Ответы (3)


Решено!! Пусть решение поможет другим, кто сталкивается с той же проблемой.


В этом руководстве я покажу вам, как включить сжатие LZO в Hadoop, Pig и Spark. Я предполагаю, что вы успешно настроили базовую установку Hadoop (если нет, обратитесь к другим руководствам по установке Hadoop ).

Вы попадаете на эту страницу, возможно, потому, что столкнулись с той же проблемой, с которой столкнулся я, обычно начиная с исключения Java:

Caused by: java.lang.ClassNotFoundException: Class com.hadoop.compression.lzo.LzoCodec not found.

Поскольку дистрибутивы Apache и Cloudera являются двумя наиболее популярными дистрибутивами, показаны конфигурации для обоих контекстов. Вкратце, к окончательному успеху нужно пройти три основных шага:

  • Установка native-lzo библиотек
  • Установка hadoop-lzo библиотеки
  • Правильная настройка переменных среды (правильная часть занимает у меня больше всего времени)

Шаг 1. Установка native-lzo библиотек

Для установки hadoop-lzo требуется библиотека Native-lzo. Вы можете установить их вручную или с помощью диспетчера пакетов (ПРИМЕЧАНИЕ. Убедитесь, что на всех узлах в кластере установлено native-lzo.):

  • В Mac OS:

    sudo port install lzop lzo2
    
  • В RH или CentOS:

    sudo yum install lzo liblzo-devel
    
  • В Debian или Ubuntu:

    sudo apt-get install liblzo2-dev
    

Шаг 2: Установка библиотеки hadoop-lzo

Для Apache Hadoop

Поскольку LZO находится под лицензией GPL, он не поставляется с официальным дистрибутивом Hadoop, для которого требуется лицензия на программное обеспечение Apache. Я рекомендую Twitter-версию, которая является разветвленной версией hadoop-gpl-compression со значительными улучшениями. Если вы используете официальную версию Hadoop, некоторые структуры установки предоставляются в документации. .

Для дистрибутива Cloudera

В CDH Cloudera hadoop-lzo отправляется клиентам в виде посылок, и вы можете удобно загружать и распространять его с помощью Cloudera Manager. По умолчанию hadoop-lzo будет установлен в /opt/cloudera/parcels/HADOOP_LZO.

Здесь мы показываем конфигурацию нашего кластера:

  • Клаудера CDH 5
  • HADOOP_LZO версии 0.4.15

Шаг 3: Настройка переменных окружения

Для Apache Hadoop/свиньи

Базовая конфигурация предназначена для Apache Hadoop, в то время как Pig использует его функциональность.

  • Установить библиотеки кодеков сжатия в core-site.xml:

    <property>
      <name>io.compression.codecs</name>
      <value>org.apache.hadoop.io.compress.GzipCodec,
          org.apache.hadoop.io.compress.DefaultCodec,
          org.apache.hadoop.io.compress.BZip2Codec,
          com.hadoop.compression.lzo.LzoCodec,
          com.hadoop.compression.lzo.LzopCodec
      </value>
    </property>
    <property>
      <name>io.compression.codec.lzo.class</name>
      <value>com.hadoop.compression.lzo.LzoCodec</value>
    </property>
    
  • Установите конфигурацию сжатия MapReduce в mapred-site.xml:

    <property>
      <name>mapred.compress.map.output</name>
      <value>true</value>
    </property>
    <property>
      <name>mapred.map.output.compression.codec</name>
      <value>com.hadoop.compression.lzo.LzoCodec</value>
    </property>
    <property>
      <name>mapred.child.env</name>
      <value>JAVA_LIBRARY_PATH=$JAVA_LIBRARY_PATH:/path/to/your/hadoop-lzo/libs/native</value>
    </property>
    
  • Добавьте HADOOP_CLASSPATH к hadoop-env.sh:

    HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/opt/cloudera/parcels/CDH/lib/hadoop/lib/*
    

Для дистрибутива Cloudera

Вы можете использовать Cloudera Manager, чтобы включить те же предыдущие настройки через графический интерфейс:

  • Для компонента MapReduce измените конфигурацию соответствующих ключей, как указано выше:

    > **io.compression.codecs**
    > **mapred.compress.map.output**
    > **mapred.map.output.compression.codec**
    > **MapReduce Client safety valve for mapred-site.xml**
    
  • Отредактируйте фрагмент клиентской среды MapReduce для файла hadoop-env.sh, добавив переменную HADOOP_CLASSPATH.

Наконец, перезапустите зависимые службы в правильном порядке и разверните конфигурации на всех узлах. Вот и все!!. Затем вы можете проверить функциональность с помощью команды и получить успешные сообщения, подобные приведенным ниже:

   $ hadoop jar /path/to/hadoop-lzo.jar com.hadoop.compression.lzo.LzoIndexer lzo_logs
   $ 14/05/04 01:13:13 INFO lzo.GPLNativeCodeLoader: Loaded native gpl library
   $ 14/05/04 01:13:13 INFO lzo.LzoCodec: Successfully loaded & initialized native-lzo library [hadoop-lzo rev 49753b4b5a029410c3bd91278c360c2241328387]
   $ 14/05/04 01:13:14 INFO lzo.LzoIndexer: [INDEX] LZO Indexing file datasets/lzo_logs size 0.00 GB...
   $ 14/05/04 01:13:14 INFO Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available
   $ 14/05/04 01:13:14 INFO lzo.LzoIndexer: Completed LZO Indexing in 0.39 seconds (0.02 MB/s).  Index size is 0.01 KB.

Для искры

Это отнимает у меня много времени, потому что в предыдущих сообщениях меньше информации. Но решение прямолинейно с предыдущим опытом.

Независимо от того, установлен Spark через tar или Cloudera Manager, вам нужно просто добавить два значения пути к spark-env.sh:

   SPARK_LIBRARY_PATH=$SPARK_LIBRARY_PATH:/path/to/your/hadoop-lzo/libs/native
   SPARK_CLASSPATH=$SPARK_CLASSPATH:/path/to/your/hadoop-lzo/java/libs

Равные посты и вопросы

Сравнение производительности LZO приведено в другое место. Связанный с этим вопрос также задается в StackOverflow, но до конца этого руководства нет решений по этому поводу. Возможно, вас также интересует, как использовать посылку LZO от Cloudera.

person caesar0301    schedule 03.05.2014
comment
Было бы полезно включить информацию здесь, на SO, чтобы она сохранялась, если ваш блог выйдет из строя или изменит адрес. - person mattwise; 22.07.2014
comment
@ChrisF извините, ссылка обновлена ​​после переноса моего блога на github. - person caesar0301; 07.11.2014
comment
@ caesar0301 - было бы также полезно, если бы вы резюмировали ответ здесь. Тогда он переживет будущие миграции. - person ChrisF; 07.11.2014
comment
ссылка снова битая - person Fedorenko Kristina; 20.03.2015
comment
Ссылка Версия Twitter 404 - person harschware; 24.02.2017

Чтобы Hortonworks 2.3.0 с Ambari для Spark работал с LZO, необходимо добавить свойства Custom spark-defaults. Я добавил:

  • spark.driver.extraClassPath /usr/hdp/current/hadoop-client/lib/hadoop-lzo-0.6.0.{{hdp_full_version}}.jar
  • spark.driver.extraLibraryPath /usr/hdp/current/hadoop-client/lib/native:/usr/hdp/current/hadoop-client/lib/native/Linux-amd64-64

Это основано на HDP 2.3. .0 обновление страницы SPARK 2.2 (есть опечатки).

person dajobe    schedule 09.09.2015
comment
При запуске spark через командную строку те же свойства (как указано dajobe) также могут быть переданы в качестве параметра в spark cli в следующем формате: spark-submit --conf spark.driver.extraClassPath=‹путь к hadoop lzo jar› :‹путь к jar-файлу hadoop-4mc› --conf spark.driver.extraLibraryPath=/usr/hdp/current/hadoop-client/lib/native:/usr/hdp/current/hadoop-client/lib/native/Linux- amd64-64 - person rohit kochar; 16.10.2017

У меня была такая же ошибка при установке Cloudera 5. В моем случае это была посылка GPLEXTRAS, которая была установлена, раздана, но не активирована.

В Cloudera Manager -> Hosts -> Parcels я нажал на очистку фильтров везде, затем я смог нажать Activate на пакете GPLEXTRAS, который уже был ранее распространен.

Этого было достаточно, чтобы решить мою проблему.

person remigiusz boguszewicz    schedule 03.03.2019