私はこの問題に2日間取り組んできましたが、まだ方法が見つかりません。
問題:最新のCDH 5を介してインストールされたSparkは、インストールした後でも、LzoCodecクラスの損失について常に不平を言いますcloudera managerのParcelsを介したHADOOP_LZO。CDH 5.0.0-1.cdh5.0.0.p0.47でMR1を実行しています。
修正してみてください: 「LZO Parcelの使用」に関する公式CDHドキュメント 'の設定も追加されましたが、問題はまだ残っていますそこ。
グーグルの投稿のほとんどは、上記と同様のアドバイスを提供します。また、sparkがそこでアクティブ化されていないYARNに対して実行しようとしているのではないかと思いますが、CMFまたはこのトピックに関する他の投稿で構成を見つけることができません。
あなたがそれに対処する方法を知っているならば、私にいくつかの助けをください。
解決しました!!解決策が同じ問題に遭遇した他の人を助けることができますように。
このチュートリアルでは、Hadoop、Pig、SparkでLZO圧縮を有効にする方法を紹介します。基本的なHadoopインストールが正常にセットアップされたと思います(そうでない場合は、 Hadoopインストール の他のチュートリアルを参照してください)。
このページにアクセスするのは、おそらくJava exception:
Caused by: Java.lang.ClassNotFoundException: Class com.hadoop.compression.lzo.LzoCodec not found.
ApacheおよびClouderaディストリビューションは最も人気のあるディストリビューションの2つであるため、両方のコンテキストの構成が表示されます。簡単に言うと、最終的な成功に向けて3つの主要なステップが実行されます。
native-lzo
ライブラリのインストールhadoop-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
hadoop-lzo
ライブラリをインストールするLZOはGPLであるため、Apacheソフトウェアライセンスを取得する公式のHadoopディストリビューションには付属していません。 Twitterバージョン は、大幅に改善された hadoop-gpl-compression のforkバージョンです。公式のHadoopを実行している場合、いくつかのインストール構造が ドキュメント で提供されます。
ClouderaのCDHでは、hadoop-lzo
が小包として顧客に出荷され、ClouderaManagerを使用して便利にダウンロードして配布できます。デフォルトでは、hadoop-lzo
は/opt/cloudera/parcels/HADOOP_LZO
にインストールされます。
ここに、クラスターの構成を示します。
基本的な構成はApacheHadoop用ですが、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>
mapred-site.xml
でMapReduce圧縮構成を設定します。
<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 Managerを使用して、GUIインターフェースを介して以前と同じ設定を有効にすることができます。
MapReduceコンポーネントの場合、対応するキーの構成を上記のように変更します。
> **io.compression.codecs**
> **mapred.compress.map.output**
> **mapred.map.output.compression.codec**
> **MapReduce Client safety Valve for mapred-site.xml**
MapReduceクライアント環境スニペットfor 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またはClouderaManagerを介してインストールされている場合でも、spark-env.sh
に2つのパス値を追加するだけで済みます。
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パーセルを使用する方法 にも興味があるかもしれません 。
Hortonworks2.3.0とAmbarifor Spark LZOを使用するには、カスタムspark-defaultsプロパティを追加する必要があります。追加した:
/usr/hdp/current/hadoop-client/lib/hadoop-lzo-0.6.0.{{hdp_full_version}}.jar
/usr/hdp/current/hadoop-client/lib/native:/usr/hdp/current/hadoop-client/lib/native/Linux-AMD64-64
これは HDP 2.3.0アップグレードSPARK 2.2 ページに基づいています(タイプミスがあります)。
Cloudera5のインストールでも同じエラーが発生しました。私の場合、インストール、配布されたがアクティブ化されなかったのはGPLEXTRAS小包でした。
Cloudera Manager-> Hosts-> Parcelsで、フィルターを押すとどこでもクリアされ、以前に配布されたGPLEXTRASパーセスでActivateを押すことができました。
それは私の問題を解決するのに十分でした。