Spark應用依賴jar包的添加解決方案

在Spark應用中,我們發現,在${SPARK_HOME}\lib文件夾中添加jar包時並不起作用。那麼,要如何使得我們編寫的Sparky應用依賴的jar有效呢?有如下四種方案:

1.使用參數–jars

添加本地的第三方jar文件(運行spark-submit腳本的機器上),可以給定多個jar文件,中間用逗號隔開

 bin/spark-sql --jars /opt/modules/cdh-5.3.6/hive-0.13.1-cdh5.3.6/lib/hive-jdbc-0.13.1-cdh5.3.6.jar

2.使用參數–packages

通過Maven添加的第三方jar文件,可以使用逗號指定多個jar文件,(Spark底層自動實現,首先去默認的repository裏面取,如果沒有這個jar文件那麼就去maven依賴網站自動下載),在linux環境中默認的repository在/home/ibeifeng/.ivy2/jars

bin/spark-shell --packages mysql:mysql-connector-java:5.1.27
bin/spark-shell --packages mysql:mysql-connector-java:5.1.27 --repositories http://maven.aliyun.com/nexus/content/groups/public

3.使用SPARK_CLASSPATH環境變量給定jar文件的路徑

可以通過參數spark.driver.extraClasspath和spark.executor.extraClasspath,分別給定driver和executor的額外的classpath的環境路徑。

注意:在集羣中,要求所有節點均存在對應的jar文件的路徑

步驟:
(1) cd /opt/modules/cdh-5.3.6/spark-1.6.1-bin-2.5.0-cdh5.3.6
(2) mkdir extjars
(3) 把你需要的第三方的jar文件放在extjars中
(4) 修改spark-env.sh
添加SPARK_CLASSPATH=/opt/modules/cdh-5.3.6/spark-1.6.1-bin-2.5.0-cdh5.3.6/extjars/*

4.將第三方的jar文件打包到最終的jar包裏面(常用)

在將Spark應用程序打包時,將依賴的第三方jar文件一起打包。

注意

(1) 當運行是yarn的cluster模式,上面的方法除了第四種,其他的都不可以用,這種情況可以考慮直接將第三方的jar文件放在hadoop的默認的classpath中,默認放在${HADOOP_HOME}\share\hadoop\common\lib或者${HADOOP_HOME}\share\hadoop\yarn\lib

(2) spark應用在運行的時候,對於${SPARK_HOME}\lib文件夾中的jar文件,只會加載一部分datanucleus-.jar 和 spark-assembly-.jar;但是如果運行的環境是spark on yarn and cluster模式的話,只會默認的加載spark-assembly-*.jar

(3) sparksql應用程序集成hive的情況下,如果spark on yarn and cluster模式,請將spark目錄下的lib目錄裏面的datanucleus-*.jar放在hadoop默認的classpath下

轉載自:https://blog.csdn.net/luofazha2012/article/details/80954958

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章