13

私はこの問題に 2 日間取り組んできましたが、まだ方法が見つかりません。

問題: 最新の CDH 5 を介してインストールされた Spark は、Cloudera Manager の Parcels を介して HADOOP_LZO をインストールした後でも、常に LzoCodec クラスが失われていると文句を言います。CDH 5.0.0-1.cdh5.0.0.p0.47 で MR1 を実行しています。

修正を試みてください: 「LZO パーセルの使用」に関する公式の CDH ドキュメントの構成も追加されていますが、問題はまだ残っています。

Google で検索された投稿のほとんどは、上記と同様のアドバイスを提供しています。また、スパークは、そこでアクティブ化されていない YARN に対して実行しようとしていると思われます。しかし、CMF またはこのトピックに関する他の投稿で構成を見つけることができません。

対処法をご存知でしたら教えてください。

4

3 に答える 3

28

解決しました!! 解決策が、同じ問題に遭遇した他の人に役立ちますように。


このチュートリアルでは、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 パーセルの使用方法にも興味があるかもしれません。

于 2014-05-03T19:24:00.283 に答える