如何让Spark Cluster从本地路径而不是从主路径获取程序包jar?

时间:2019-05-23 14:45:31

标签: apache-spark pyspark

我发现,每次在带有独立外部软件包(例如pyspark --master=spark://master:7077 --packages Azure:mmlspark:0.17)的spark独立集群中启动应用程序时,执行者总是试图从驱动程序中获取软件包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

类似的事情在执行者的日志中重复出现。软件包的尺寸很大,因此该过程需要很多时间。

我尝试使用pyspark的--jars参数将所需的jar上载到每个执行器。执行程序确实从本地路径获取它们,但是我无法将包导入外壳程序中。

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

1 个答案:

答案 0 :(得分:0)

我们可以将jar复制到所有节点,并在spark.executor.extraClassPath配置参数中添加jar的路径,以使jar在执行者的类路径中可用。