【发布时间】:2017-08-15 07:17:56
【问题描述】:
spark job中需要jar文件时,需要通过2种方式添加到spark job中:
1. 命令中的--jar path 选项。
2.SparkContext.addJar("path").
谁能告诉我这两种方式的区别?
来自this question,答案是它们是相同的,只是优先级不同,但我认为这不是真的。如果我在纱线集群模式下提交 spark 作业,如果根据official site 命令的选项--jars 中不包含 jar 文件,则 addJar() 将不起作用。
--jars 选项允许 SparkContext.addJar 函数在以下情况下工作 您正在将它与本地文件一起使用并在 yarn-cluster 模式下运行。它 如果与 HDFS、HTTP、HTTPS、 或 FTP 文件。
原因是驱动程序运行在与客户端不同的机器上。因此,命令中的选项--jars 似乎来自客户端,而功能addJar() 只能在驱动程序中的jar 上工作。
然后我在本地模式下做了一个测试。
1.spark-shell --master local --jars path/to/jar
如果我以这种方式启动spark-shell,jar中的对象可以在spark-shell中使用
2.spark-shell --master local
如果我以这种方式启动 spark-shell 并使用 sc.addJar("path/to/jar"),则无法将 jar 文件中的对象导入 spark-shell 并出现 class cannot be found 错误。
我的问题是:
为什么SparkContext.addJar() 方法在本地模式下不起作用?
SparkContext.addJar() 和 --jars 有什么区别?
我的环境:hortonworks 2.5集群,spark的版本是1.6.2。如果有人能对此有所了解,我将不胜感激。
【问题讨论】:
标签: apache-spark