2016-04-24 13 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。