【问题标题】:How to resolve the conflict between 11.0.2 and 16.0 of guava when using yarn, spark and spark-cassandra-connector?使用yarn、spark、spark-cassandra-connector时如何解决guava 11.0.2和16.0的冲突?
【发布时间】:2016-09-09 07:31:47
【问题描述】:

当我执行以下命令时,我的纱线版本是hadop-2.4.0.x,spark 是spark-1.5.1-bin-hadoop2.4,spark-cassandra-connector 是spark-cassandra-connector_2.10-1.5.0-M2

bin/spark-shell --driver-class-path $(echo lib/*.jar | sed 's/ /:/g')  --master yarn-client 
--deploy-mode client --conf spark.cassandra.connection.host=192.21.0.209 
--conf spark.cassandra.auth.username=username --conf spark.cassandra.auth.password=password --conf spark.sql.dialect=sql 
--jars lib/guava-16.0.jar,spark-cassandra-connector_2.10-1.5.0-M2.jar,lib/cassandra-driver-core-2.2.0-rc3.jar

启动后在提示下输入如下scala:

import org.apache.spark.sql.cassandra.CassandraSQLContext
import org.apache.spark.sql.{DataFrame, SaveMode}
import org.apache.spark.{Logging, SparkConf, SparkContext}
import org.joda.time.{DateTime, Days, LocalDate}
val cc = new CassandraSQLContext(sc)

val rdd: DataFrame = cc.sql("select user_id,tag_models,dmp_province," +
"zp_gender,zp_age,zp_edu,stg_stage,zp_income,type " +
"from user_center.users_test") 

我遇到了经典错误:

Caused by: java.lang.NoSuchMethodError:  
com.google.common.util.concurrent.Futures.withFallback
(Lcom/google/common/util/concurrent/ListenableFuture;
Lcom/google/common/util/concurrent/FutureFallback;
Ljava/util/concurrent/Executor;)
Lcom/google/common/util/concurrent/ListenableFuture;

googlestackoverflower搜索到这个错误后,我知道是guava的不同版本之间的冲突导致了这个错误,发现hadoop 2.4使用guava-11.0.2spark-cassandra-connector_2.10-1.5.0-M2使用guava-16.0.1 .

如何解决这种错误,任何建议将不胜感激!

更新

很抱歉测试了很长时间!

现在,对于 spark-submit,我在我的测试 yarn 集群下成功测试了这个分辨率 Making Hadoop 2.6 + Spark-Cassandra Driver Play Nice Together

【问题讨论】:

  • 老兄,你在赛道上。如果您碰巧找到了答案,请与我们分享。我认为道路是在 sbt 组装阶段遮阴。
  • @msemelman 对不起,我昨天没来,你有同样的问题吗?
  • @msemelman,我按照#user1314742 所说的那样测试了该方法,没有任何改变!
  • @abelard2008 我在回答中添加了新评论,请尝试评论中提到的导出。
  • @abelard2008 还有一件事,在您的回答中是$(echo lib/*.jar | sed 's/ /:/g') 还是您的意思是$(ls lib/*.jar | sed 's/ /:/g')

标签: apache-spark hadoop-yarn spark-cassandra-connector


【解决方案1】:

在 Hadoop 配置中,将以下属性添加到您的 hadoop-env.sh

HADOOP_USER_CLASSPATH_FIRST=true

在 Spark 配置中,还有一个属性可以设置为 true spark.driver.userClassPathFirst ,但它仍然是实验性的,仅在集群模式下使用(查看 spark documentation)。就我个人而言,我没有尝试过这个属性,但由于它在文档中有所介绍,我认为值得一提

【讨论】:

  • 它对我不起作用。 env 变量和 spark 属性都不是。
  • 这很奇怪......我会再试一次并告诉你具体方法
  • @msemelman 你试过在spark-shell 命令之前做export HADOOP_CLASSPATH=/PATH/TO/SPARK/CASSSANDRA/CONNECTER/JAR 吗?
猜你喜欢
  • 2016-12-31
  • 2019-06-21
  • 2019-04-10
  • 2016-09-02
  • 2017-08-06
  • 2016-06-07
  • 2017-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多