Apache spark Spark&x2B;关于EMR链接错误的Cassandra

Apache spark Spark&x2B;关于EMR链接错误的Cassandra,apache-spark,cassandra,datastax,spark-cassandra-connector,datastax-startup,Apache Spark,Cassandra,Datastax,Spark Cassandra Connector,Datastax Startup,我在EMR 4.4.0上部署了Spark 1.6 我正在连接部署在EC2上的datastax cassandra 2.2.5 该连接使用spark连接器1.4.2S2.10将数据保存到cassandra中(因为它有guava 14),但是使用连接器的1.4.2版本从cassandra读取数据失败 正确的组合建议使用1.5.x,因此我开始使用1.5.0。 首先,我面对番石榴问题,并使用userClasspathFirst解决方案修复了它 spark-shell --conf spark.yarn.

我在EMR 4.4.0上部署了Spark 1.6 我正在连接部署在EC2上的datastax cassandra 2.2.5

该连接使用spark连接器1.4.2S2.10将数据保存到cassandra中(因为它有guava 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
现在我已经克服了Guava16错误,但是因为我使用的是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重复这些步骤时,我也遇到了同样的问题。 有没有解决办法,或者其他更干净的方法


谢谢

使用“userClassPathFirst”标志时,我遇到了相同的错误

从配置中删除这2个标志,只需使用“extraClassPath”参数

详细答案如下:

事实上,我遇到了完全相同的问题。我们找到了根本原因,这是一些相互冲突的依赖关系。当我从包中删除了所有依赖项,并且只有绝对必要的依赖项时,问题就消失了。我无法确定导致依赖冲突的确切包,但可以肯定的是,它存在根本原因。我们对代码进行了重新架构,将其分为两个包,一个包包含所有业务逻辑,另一个包非常精简,只用于执行spark任务。好吧,除了spark之外,我唯一的依赖项是Cassandra连接器,我仍然得到了错误。对我来说,这看起来像这里描述的问题:所以基本上两个类装载机因为某种原因发生碰撞。结果我实际上遇到了这个问题:嗨@lazywiz-你能描述一下你是如何在与titan/cassandra合作的emr上获得spark的吗?我完全被困在这里,甚至不知道如何开始——大多数博士似乎暗示卡桑德拉和斯帕克必须存在于同一个集群中。如果您有任何可以共享的配置文件/脚本,那将非常棒。谢谢