4

我在EMR上部署了Spark 1.6 4.4.0 我正在连接到部署在EC2上的datastax cassandra 2.2.5。EMR上的Spark + Cassandra LinkageError

连接使用spark-connector 1.4.2_s2.10将数据保存到cassandra(因为它有番石榴14)但是,使用1.4.2版本的连接器从cassandra读取数据失败。

正确的组合暗示使用1.5.x,因此我开始使用1.5.0。 首先我遇到了番石榴问题,并使用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 

现在,我得到过去番石榴16错误,但是因为我使用的是userClassPathFirst我面临的另一个冲突,我没有得到任何的方式来解决这个问题。

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代码而不是spark-shell的步骤时,我遇到了同样的麻烦。 任何解决方案,以通过它,或任何其他更清洁的方式?

谢谢!

+0

实际上,我有完全一样的问题。 – LiMuBei

+0

我们得到了根本原因,这是一些相互矛盾的依赖。当我从软件包中删除所有依赖关系并且只有绝对必要的时候,问题就消失了。我无法确定造成依赖性冲突的确切程序包,但确定它存在根本原因。我们重新构建了代码,将其分解为两个包,一个包含所有业务逻辑,另一个包含非常精简的部分,只是为了激发工作。 – lazywiz

+1

嗯,除了Spark之外,我唯一的依赖是Cassandra连接器,我仍然遇到了错误。对我来说,它看起来像这里描述的问题:http://techblog.applift.com/upgrading-spark因此基本上两个类加载器碰撞出于某种原因。 – LiMuBei

回答