當在火花作業中需要jar文件時,需要通過2種方式將其添加到火花作業中:
1. --jar path
option in命令。
2. SparkContext.addJar("path")
。
任何人都可以告訴我這兩種方式之間的區別嗎?
從this question,答案是他們是相同的,只有優先權是不同的,但我不認爲這是真的。如果我以紗線集羣模式提交點火作業,如果根據official site的命令在選項--jars
中未包含jar文件,則addJar()將不起作用。SparkContext.addJar在本地模式下不起作用
的--jars選項允許SparkContext.addJar功能,如果你 使用它與本地文件和紗線集羣模式下運行工作。如果您使用HDFS,HTTP,HTTPS, 或FTP文件,則不需要使用它 。
原因是驅動程序運行在與客戶機不同的機器上。所以看起來命令中的選項--jars
來自客戶端,功能addJar()
只能在驅動程序中的jar中工作。
然後我在本地模式下做了測試。
1. spark-shell --master local --jars path/to/jar
如果我在這種方式啓動火花殼,在罐子對象可在所使用的火花殼
2. spark-shell --master local
如果我開始火花殼通過這種方式並使用sc.addJar("path/to/jar")
,jar文件中的對象不能被導入到spark-shell中,我得到了class cannot be found
錯誤。
我的問題是:
爲什麼SparkContext.addJar()
不以本地模式運行的方法是什麼?
SparkContext.addJar()
和--jars
有什麼區別?
我的環境:hortonworks 2.5集羣和spark的版本是1.6.2。我很感激,如果有人能說出這些。