我正在使用Spark 1.5.1與獨立集羣管理器。 Spark的默認spark-assembly-1.5.1-hadoop2.6.0.jar
包括Avro 1.7.7。我想爲我所有的Spark作業使用我自定義的Avro庫,我們稱之爲Avro 1.7.8。這可以在開發模式下完美工作(master = local [*])。但是,當我以客戶端模式將我的應用程序提交到羣集時,執行程序仍使用Avro 1.7.7庫。在Spark客戶端模式下向執行者添加額外的類路徑
URL url = getClass().getClassLoader().getResource(GenericData.class.getName().replace('.','/')+".class");
當我打印此,我執行程序的日誌顯示:
/opt/spark/lib/spark-assembly-1.5.1-hadoop2.6.0.jar/org/apache/avro/通用/ GenericData.class
這裏是我的spark-env.sh的工作節點上的一部分:
export SPARK_WORKER_OPTS="-Dspark.executor.extraClassPath=/home/ansible/avro-1.7.8.jar -Dspark.executor.userClassPathFirst=true
這裏是我的W酒店
火花955 1.8 1.9 4161448 243600:工作節點(
ps aux | grep worker
)上orker過程? Sl 13:29 0:09 /usr/java/jdk1.7.0_79/jre/bin/java -cp /home/ansible/avro-1.7.8.jar:/etc/spark-worker/:/opt/spark- 1.5.1彬hadoop2.6/LIB /火花組裝1.5.1-hadoop2.6.0.jar:/opt/spark-1.5.1-bin-hadoop2.6/lib/datanucleus-api-jdo-3.2 .6.jar:/opt/spark-1.5.1-bin-hadoop2.6/lib/datanucleus-rdbms-3.2.9.jar:/opt/spark-1.5.1-bin-hadoop2.6/lib/datanucleus -core-3.2.10.jar -Dspark.executor.extraClassPath =/home/ansible/avro-1.7.8.jar -Dspark.executor.userClassPathFirst = true -Xms512m -Xmx512m -XX:MaxPermSize = 256m org.apache.spark .deploy.worker.Worker --webui端口8081火花://火花-A-01:7077
很顯然,我把這個罐子:在我所有的工作節點/home/ansible/avro-1.7.8.jar
。
有誰知道如何強制執行程序使用我的jar而不是spark組件的嗎?
實際上,我使用'sparkConf.setMaster(「spark:// ....」)''''''''''''在SBT的部署模式「client」中運行我的應用程序。相當於你在我的例子中說的是:'sparkConf.setJars(Seq(「file://home/tmouron/avro-1.7.8.jar」))'。但是我有這個額外的線路相同的問題:正在使用avro-1.7.7。 – tmouron