当前位置: 首页 > 知识库问答 >
问题:

sparkcontext.addjar在本地模式下不工作

寇桐
2023-03-14

当spark作业中有需要的jar文件时,需要通过2种方式将其添加到spark作业中:
1。命令中的--jar path选项。
2。sparkcontext.addjar(“path”)
有人能告诉我这两种方式之间的区别吗?
从这个问题来看,答案是它们是相同的,只是优先级不同,但我认为这不是真的。如果我在yarn集群模式下提交spark作业,那么根据官方站点,如果命令中的选项--jars中没有包含jar文件,那么addJar()将不起作用。

如果您将sparkcontext.addjar函数与本地文件一起使用,并且运行在纱线集群模式下,则可以使用--jars选项。如果与HDFS、HTTP、HTTPS或FTP文件一起使用,则不需要使用它。

原因是驱动程序运行在与客户端不同的机器上。因此,命令中的选项--jars似乎来自客户端,而函数addjar()只能在驱动程序中的jar上工作。

然后我在本地模式下做了一个测试。

1.spark-shell--master local-jars path/to/jar

如果我以这种方式启动spark-shell,那么jar中的对象可以在spark-shell中使用

2.spark-shell--主本地

如果我以这种方式启动spark-shell,并使用sc.addjar(“path/to/jar”),jar文件中的对象无法导入spark-shell,并且我得到了类无法找到错误。

我的问题是:

我的环境:hortonworks 2.5集群和spark版本是1.6.2。如果有人能提供一些线索我很感激。

共有1个答案

养研
2023-03-14

嗯,经过一番研究,我找到了原因。如果有其他人参与到这个问题中来,就在这里贴吧。

方法addJar()不将JAR添加到驱动程序的类路径中。该方法所做的是在驱动节点中查找JAR,分配到工作节点中,然后添加到执行器的类路径中。
因为我是以本地模式提交spark作业的,所以在spark作业中使用了驱动类路径(我猜),所以无法找到方法addJar()添加的JAR。

为了解决此问题,请在提交spark作业时使用--jars选项包含所有JAR,或使用--driver-class-path添加JAR.
更多详细信息可在此处找到。

 类似资料:
  • 我有一个夸克斯Kafka消费者。在 VM 模式下,它工作正常。 在我用:。/mvnw包-可选 当我在纯模式下运行它时,我有这个例外:

  • 但是当我启动服务器时,这个url不起作用: 出现错误警报: 有什么想法吗? 谢谢你,泰金。

  • 致命错误:未捕获异常“GuzzleHttp\exception\RequestException”,消息为“cURL错误60:SSL证书问题:无法获取本地颁发者证书(请参阅http://curl.haxx.se/libcurl/c/libcurl-errors.html)在C:\xampp\htdocs\analytics\vendor\guzzlehttp\guzzle\src\Handler\

  • 我有一个应用程序,现在我要发布它。我已经创建了一个apk文件,并且安装了它,但是当我向服务器发送登录请求时,它返回NULL。 奇怪的是,当我用调试构建启动应用程序时,它工作得很好。该问题仅发生在释放模式。所以看了这篇文章后我认为问题出在proguard 这是我目前所做的。 null 这是我的proguard-rules.pro文件。

  • 我有一个storm拓扑,分为两个节点。一个是光环,另一个是主管。 不属于storm的代理接受来自客户端的HTTP请求,并将其传递给storm拓扑。 拓扑是这样的:1.代理将数据传递给一个Storm喷口2.喷口将数据传递给多个螺栓3.结果由最后一个螺栓传回代理。 我正在运行代理并将数据传递给storm。我能够在拓扑端将套接字连接到侦听器。喷口发出的数据在UI中显示为0。同样的拓扑在本地模式下也可以正

  • 有人有使用PHPWord的经验吗?我使用Composer安装了它,就像我对许多其他模块所做的一样,但是当我运行“基本用法”示例时,什么都没有发生。(autoloader.php工作正常)。 如果我更改