解決しました!! 解決策が、同じ問題に遭遇した他の人に役立ちますように。
このチュートリアルでは、Hadoop、Pig、Spark で LZO 圧縮を有効にする方法を紹介します。基本的な Hadoop インストールが正常にセットアップされていると思います (そうでない場合は、Hadoop インストール
に関する他のチュートリアルを参照してください)。
このページにたどり着いたのは、おそらく私が遭遇したのと同じ問題に遭遇したためであり、通常は Java 例外から始まります。
Caused by: java.lang.ClassNotFoundException: Class com.hadoop.compression.lzo.LzoCodec not found.
Apache と Cloudera ディストリビューションは最も人気のある 2 つのディストリビューションであるため、両方のコンテキストの構成が示されています。簡単に言えば、最終的な成功に向けて 3 つの主な手順を実行します。
native-lzo
ライブラリのインストール
hadoop-lzo
ライブラリのインストール
- 環境変数を正しく設定する (最も時間がかかるのは正しい部分です)
Step1: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
Step2:hadoop-lzo
ライブラリのインストール
Apache Hadoop の場合
LZO は GPL であるため、Apache ソフトウェア ライセンスを取得する公式の Hadoop ディストリビューションには同梱されていません。Hadoop-gpl-compressionのフォーク バージョンであり
、大幅に改善されたTwitter バージョンをお勧めします。公式の Hadoop を実行している場合は、一部のインストール構造がドキュメントに記載されています。
Cloudera ディストリビューションの場合
Cloudera の CDH では、hadoop-lzo
小包として顧客に出荷され、Cloudera Manager を使用して便利にダウンロードおよび配布できます。デフォルトでは、hadoop-lzo
は にインストールされ
/opt/cloudera/parcels/HADOOP_LZO
ます。
ここでは、クラスターの構成を示します。
- クラウデラ CDH 5
- HADOOP_LZO バージョン 0.4.15
Step3: 環境変数の設定
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 ディストリビューションの場合
Cloudera Manager を使用して、GUI インターフェイス経由で以前と同じ設定を有効にすることができます。
MapReduce コンポーネントの場合、対応するキーの構成を上記のように変更します。
> **io.compression.codecs**
> **mapred.compress.map.output**
> **mapred.map.output.compression.codec**
> **MapReduce Client safety valve for mapred-site.xml**
hadoop-env.sh の MapReduce クライアント環境スニペットを編集して、変数を追加し
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 を介してインストールされている場合でも、次の 2 つのパス値を追加するだけで済みます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にも寄せられていますが、このチュートリアルの最後までこれに関する解決策はありません。Cloudera の LZO パーセルの使用方法にも興味があるかもしれません。