我发现,每次在带有独立外部软件包(例如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?
答案 0 :(得分:0)
我们可以将jar复制到所有节点,并在spark.executor.extraClassPath
配置参数中添加jar的路径,以使jar在执行者的类路径中可用。