首页 > 解决方案 > 如何让 Spark 集群从本地路径而不是从主路径获取包 jar?

问题描述

我发现每次在我的 spark 独立集群中使用外部包启动应用程序时pyspark --master=spark://master:7077 --packages Azure:mmlspark:0.17,执行程序总是试图从驱动程序中获取包 jar。这是日志:

2019-05-23 21:14:56 INFO  Executor:54 - Fetching spark://Master:2653/files/com.microsoft.cntk_cntk-2.4.jar with timestamp 1558616430055
2019-05-23 21:14:56 INFO  TransportClientFactory:267 - Successfully created connection to Master/192.168.100.2:2653 after 23 ms (0 ms spent in bootstraps)
2019-05-23 21:14:56 INFO  Utils:54 - Fetching spark://Master:2653/files/com.microsoft.cntk_cntk-2.4.jar to /tmp/spark-0a60d982-0082-4d37-aea1-e1c0b21ee2be/executor-c9632fd2-29fc-429c-bdfb-31d870ed19e8/spark-15805ad8-ab00-41b3-b466-b0e8e95a3f56/fetchFileTemp5196357990337888981.tmp

这样的事情在执行者的日志中重复出现。包的大小相当大,所以这个过程需要很多时间。

我尝试使用--jarspyspark 的参数将所需的 jar 上传到每个执行程序。执行程序确实从本地路径获取它们,但我无法在 shell 中导入包。

那么如何解决问题呢?我应该怎么做才能让执行者从本地路径获取包?或者也许来自 HDFS?

标签: apache-sparkpyspark

解决方案


我们可以将 jar 复制到所有节点,并在spark.executor.extraClassPathconfig 参数中添加 jar 的路径,以便 jar 在 executor 的类路径中可用。


推荐阅读