Ответ 1
Решено !! Пусть решение поможет другим, кто сталкивается с той же проблемой.
В этом уроке я покажу вам, как включить сжатие 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
библиотек native-lzo
Библиотека native-lzo необходима для установки hadoop-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 Software License. Я рекомендую версию Twitter, которая является раздвоенной версией rel="nofollow noreferrer">hadoop-gpl-compress с замечательными улучшениями. Если вы работаете с официальным Hadoop, некоторые структуры установки предоставляются вместе с документацией.
Для Cloudera Distribution
В Cloudera CDH hadoop-lzo
поставляется покупателям в виде посылок, и вы можете hadoop-lzo
скачать и распространить их с помощью Cloudera Manager. По умолчанию hadoop-lzo
будет установлен в /opt/cloudera/parcels/HADOOP_LZO
.
Здесь мы показываем конфигурацию нашего кластера:
- Cloudera CDH 5
- HADOOP_LZO версия 0.4.15
Шаг 3: Настройка переменных env
Для Apache Hadoop/Pig
Базовая конфигурация для 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 Distribution
Вы можете использовать Cloudera Manager, чтобы включить те же самые предыдущие настройки через интерфейс GUI:
-
Для компонента 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 Parcel от Cloudera.