2016-04-24 12 views
0

我有CDH 5.7.0和spark 1.6.0和kafka 0.9.0,我需要运行一个Spark流作业,该作业使用消息来自另一个集群中的kafka代理的消息,其中0.8.2.2版。我创建了一个流,如:如何覆盖在CDH中运行spark的库

val stream = KafkaUtils.createStream(ssc, Utils.settings.zookeeperQuorum, Utils.settings.kafkaGroup, Utils.settings.topicMapWifi) 

在build.sbt我添加:

libraryDependencies += "org.apache.spark" %% "spark-streaming-kafka" % "1.2.0" 

与该库我将使用适合的经纪人与版本0.8.2.x客户端。但问题是,Spark是加载一吨的东西从CDH claspath在:

/opt/cloudera/parcels/CDH-5.7.0-1.cdh5.7.0.p0.45/lib/spark/bin/spark-class

并且正在添加比我需要的更新版本的kafka客户端。有没有办法从代码覆盖特定的库?

回答

0

您可以编辑位于星火config目录下spark-env.sh(在/ etc /火花/ Cloudera的上CONF)和改变

export SPARK_HOME=/opt/cloudera/parcels/CDH-5.5.1-1.cdh5.5.1.p0.11/lib/spark 

指向你的星火实例。 或者,您可以部署您的Spark版本并使用Cloudera的Hadoop配置(将spark-env.sh中的HADOOP_CONF_DIR设置为/ etc/hadoop/conf)。在这种情况下,你将能够看到的应用历史,如果你的应用程序配置

spark.eventLog.dir=hdfs:/user/spark/applicationHistory 
0

设定--jar选项分发您的卡夫卡0.8.2.2罐,并指定spark.driver.userClassPathFirst=true和spark.conf spark.executor.userClassPathFirst=true,这将载入您可以使用子级第一类加载器在CDH classpath之前创建jar。