web-dev-qa-db-ja.com

クラスcom.hadoop.compression.lzo.LzoCodecがCDH5のSparkに見つかりませんか?

私はこの問題に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またはこのトピックに関する他の投稿で構成を見つけることができません。

あなたがそれに対処する方法を知っているならば、私にいくつかの助けをください。

11
caesar0301

解決しました!!解決策が同じ問題に遭遇した他の人を助けることができますように。


このチュートリアルでは、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ライブラリのインストール
  • 環境変数を正しく設定する(正しい部分が私のほとんどの時間を消費する)

ステップ1: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であるため、Apacheソフトウェアライセンスを取得する公式のHadoopディストリビューションには付属していません。 Twitterバージョン は、大幅に改善された hadoop-gpl-compression のforkバージョンです。公式のHadoopを実行している場合、いくつかのインストール構造が ドキュメント で提供されます。

Clouderaディストリビューションの場合

ClouderaのCDHでは、hadoop-lzoが小包として顧客に出荷され、ClouderaManagerを使用して便利にダウンロードして配布できます。デフォルトでは、hadoop-lzo/opt/cloudera/parcels/HADOOP_LZOにインストールされます。

ここに、クラスターの構成を示します。

  • Cloudera CDH 5
  • HADOOP_LZOバージョン0.4.15

ステップ3:環境変数を設定する

Apache Hadoop/Pigの場合

基本的な構成は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_CLASSPATHhadoop-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**
    
  • 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の場合

以前の投稿の情報が少ないため、これには多くの時間がかかります。しかし、このソリューションは以前の経験と比べると素直です。

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パーセルを使用する方法 にも興味があるかもしれません

23
caesar0301

Hortonworks2.3.0とAmbarifor Spark LZOを使用するには、カスタム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 ページに基づいています(タイプミスがあります)。

1
dajobe

Cloudera5のインストールでも同じエラーが発生しました。私の場合、インストール、配布されたがアクティブ化されなかったのはGPLEXTRAS小包でした。

Cloudera Manager-> Hosts-> Parcelsで、フィルターを押すとどこでもクリアされ、以前に配布されたGPLEXTRASパーセスでActivateを押すことができました。

それは私の問題を解決するのに十分でした。