我正在{cluster“模式下使用spark-submit
,并针对在Mesos上运行的Spark集群使用Python脚本,并在spark.mesos.executor.docker.image
中为执行程序设置了自定义Docker映像。
我的脚本文件已经被烘焙到Docker映像中(假设在路径/app/script.py
处),所以我不想在执行之前使用spark-submit的功能通过HTTP下载脚本。
每个https://spark.apache.org/docs/latest/submitting-applications.html#advanced-dependency-management都可以通过将应用程序脚本指定为local:
URL(例如,URL)来实现。 spark-submit [...options...] local:/app/script.py
。但这不起作用,我在Mesos上看到类似以下的错误(spark驱动程序任务的stderr,由spark-dispatcher框架安排):
I0727 20:31:50.164263 9207 fetcher.cpp:533] Fetcher Info: {"cache_directory":"\/tmp\/mesos\/fetch\/root","items":[{"action":"BYPASS_CACHE","uri":{"cache":false,"extract":true,"value":"\/app\/script.py"}}],"sandbox_directory":"\/data\/mesos\/slaves\/GUID\/frameworks\/GUID\/executors\/driver-TIMESTAMP\/runs\/GUID","user":"root"}
I0727 20:31:50.170289 9207 fetcher.cpp:444] Fetching URI '/app/script.py'
I0727 20:31:50.170361 9207 fetcher.cpp:285] Fetching directly into the sandbox directory
I0727 20:31:50.170413 9207 fetcher.cpp:222] Fetching URI '/app/script.py'
cp: cannot stat ‘/app/script.py’: No such file or directory
E0727 20:31:50.174051 9207 fetcher.cpp:579] EXIT with status 1: Failed to fetch '/app/script.py': Failed to copy '/app/script.py': exited with status 1
s 1
浏览https://spark.apache.org/docs/latest/running-on-mesos.html之后,我猜测local:
路径是由“ MesosClusterDispatcher”解释的,该守护程序是一个为Spark驱动程序进程旋转容器的守护进程(使用我的自定义spark执行程序Docker映像)。由于此调度程序本身并未在自定义Docker映像/容器中运行,因此无法找到该文件。
还有其他方法可以告诉spark-submit 不下载应用程序脚本,而仅使用Docker映像中已经存在的脚本吗?