4

私はSpark 1.6をEMR 4.4.0に配備しました 私はdatastax cassandra 2.2.5に接続しています。Spark + Cassandra on EMR LinkageError

spark-connector 1.4.2_s2.10を使用してデータをcassandraに保存するように動作します(guava 14なので)。しかし、canandraからのデータの読み込みは1.4.2バージョンのコネクタでは失敗します。

右の組み合わせは1.5.xを使用することを示しているため、1.5.0を使用し始めました。 まず、私はguavaの問題に直面し、userClasspathFirstソリューションを使用して修正しました。

spark-shell --conf spark.yarn.executor.memoryOverhead=2048 
--packages datastax:spark-cassandra-connector:1.5.0-s_2.10 
--conf spark.cassandra.connection.host=10.236.250.96 
--conf spark.executor.extraClassPath=/home/hadoop/lib/guava-16.0.1.jar:/etc/hadoop/conf:/etc/hive/conf:/usr/lib/hadoop-lzo/lib/*:/usr/share/aws/aws-java-sdk/*:/usr/share/aws/emr/emrfs/conf:/usr/share/aws/emr/emrfs/lib/*:/usr/share/aws/emr/emrfs/auxlib/* 
--conf spark.driver.extraClassPath=/home/hadoop/lib/guava-16.0.1.jar:/etc/hadoop/conf:/etc/hive/conf:/usr/lib/hadoop-lzo/lib/*:/usr/share/aws/aws-java-sdk/*:/usr/share/aws/emr/emrfs/conf:/usr/share/aws/emr/emrfs/lib/*:/usr/share/aws/emr/emrfs/auxlib/* 
--conf spark.driver.userClassPathFirst=true 
--conf spark.executor.userClassPathFirst=true 

は今、私は私が他の競合に直面していますuserClassPathFirstを使用しています、と私はそれを解決する方法を取得していない午前しかし以来、グアバ16エラーを乗り越えます。

Lost task 2.1 in stage 2.0 (TID 6, ip-10-187-78-197.ec2.internal): java.lang.LinkageError: 
loader constraint violation: loader (instance of org/apache/spark/util/ChildFirstURLClassLoader) previously initiated loading for a different type with name "org/slf4j/Logger" 

スパークシェルの代わりにJavaコードを使用して手順をリピートすると、同じ問題が発生します。 それを回避するための解決策、または他のよりクリーンな方法?

ありがとうございます!

+0

私は実際には正確に同じ問題を抱えています。 – LiMuBei

+0

根本的な原因がありますが、それはいくつかの相反する依存関係です。パッケージからすべての依存関係を削除して、まったく必要なものだけを持っていたとき、問題は消えました。私は依存関係の矛盾を引き起こしている正確なパッケージを指摘することはできませんが、根本的な原因は確かです。私たちは、コードを2つのパッケージに分割して再構築しました.1つはすべてのビジネスロジックで、もう1つはまさにスパークジョブを行うためのものです。 – lazywiz

+1

Spark以外の私の唯一の依存関係はCassandraコネクタですが、まだエラーがあります。私にとっては、ここに記載されている問題のようです:http://techblog.applift.com/upgrading-sparkしたがって、基本的に2つのクラスローダーは何らかの理由で衝突します。 – LiMuBei

答えて

0

'userClassPathFirst'フラグを使用したときに同じエラーが発生しました。

これらの2つのフラグを設定から削除し、「extraClassPath」パラメータを使用します。

ここに詳細な回答: https://stackoverflow.com/a/40235289/3487888

関連する問題