私は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コードを使用して手順をリピートすると、同じ問題が発生します。 それを回避するための解決策、または他のよりクリーンな方法?
ありがとうございます!
私は実際には正確に同じ問題を抱えています。 – LiMuBei
根本的な原因がありますが、それはいくつかの相反する依存関係です。パッケージからすべての依存関係を削除して、まったく必要なものだけを持っていたとき、問題は消えました。私は依存関係の矛盾を引き起こしている正確なパッケージを指摘することはできませんが、根本的な原因は確かです。私たちは、コードを2つのパッケージに分割して再構築しました.1つはすべてのビジネスロジックで、もう1つはまさにスパークジョブを行うためのものです。 – lazywiz
Spark以外の私の唯一の依存関係はCassandraコネクタですが、まだエラーがあります。私にとっては、ここに記載されている問題のようです:http://techblog.applift.com/upgrading-sparkしたがって、基本的に2つのクラスローダーは何らかの理由で衝突します。 – LiMuBei