容器进程启动失败:“exec: \\\"driver\\\": 在 $PATH 中找不到可执行文件”

3

我有一个基于Spring的Spark 2.3.0应用程序。我正在尝试在Kubernetes(Minikube)上进行Spark提交。

我有安装了Docker和Minikube的Virtual Box。

opt/spark/bin/spark-submit --master k8s://https://192.168.99.101:8443 --name cfe2 --deploy-mode cluster --class com.yyy.Application --conf spark.executor.instances=1 --conf spark.kubernetes.container.image=docker.io/anantpukale/spark_app:1.3 local://CashFlow-spark2.3.0-shaded.jar

以下是堆栈跟踪:

 start time: N/A
 container images: N/A
 phase: Pending
 status: []
2018-04-11 09:57:52 INFO  LoggingPodStatusWatcherImpl:54 - State changed, new state: 
     pod name: cfe2-c4f95aaeaefb3564b8106ad86e245457-driver
     namespace: default
     labels: spark-app-selector -> spark-dab914d1d34b4ecd9b747708f667ec2b, spark-role -> driver
     pod uid: cc3b39e1-3d6e-11e8-ab1d-080027fcb315
     creation time: 2018-04-11T09:57:51Z
     service account name: default
     volumes: default-token-v48xb
     node name: minikube
     start time: 2018-04-11T09:57:51Z
     container images: docker.io/anantpukale/spark_app:1.3
     phase: Pending
     status: [ContainerStatus(containerID=null, image=docker.io/anantpukale/spark_app:1.3, imageID=, lastState=ContainerState(running=null, terminated=null, waiting=null, additionalProperties={}), name=spark-kubernetes-driver, ready=false, restartCount=0, state=ContainerState(running=null, terminated=null, waiting=ContainerStateWaiting(message=null, reason=ContainerCreating, additionalProperties={}), additionalProperties={}), additionalProperties={})]
2018-04-11 09:57:52 INFO  Client:54 - Waiting for application cfe2 to finish...
2018-04-11 09:57:52 INFO  LoggingPodStatusWatcherImpl:54 - State changed, new state: 
     pod name: cfe2-c4f95aaeaefb3564b8106ad86e245457-driver
     namespace: default
     labels: spark-app-selector -> spark-dab914d1d34b4ecd9b747708f667ec2b, spark-role -> driver
     pod uid: cc3b39e1-3d6e-11e8-ab1d-080027fcb315
     creation time: 2018-04-11T09:57:51Z
     service account name: default
     volumes: default-token-v48xb
     node name: minikube
     start time: 2018-04-11T09:57:51Z
     container images: anantpukale/spark_app:1.3
     phase: Failed
     status: [ContainerStatus(containerID=docker://40eae507eb9b615d3dd44349e936471157428259f583ec6a8ba3bd99d80b013e, image=anantpukale/spark_app:1.3, imageID=docker-pullable://anantpukale/spark_app@sha256:f61b3ef65c727a3ebd8a28362837c0bc90649778b668f78b6a33b7c0ce715227, lastState=ContainerState(running=null, terminated=null, waiting=null, additionalProperties={}), name=spark-kubernetes-driver, ready=false, restartCount=0, state=ContainerState(running=null, terminated=ContainerStateTerminated(containerID=docker://40eae507eb9b615d3dd44349e936471157428259f583ec6a8ba3bd99d80b013e, exitCode=127, finishedAt=Time(time=2018-04-11T09:57:52Z, additionalProperties={}), message=invalid header field value **"oci runtime error:  container_linux.go:247: starting container process caused \"exec: \\\"driver\\\": executable file not found in $PATH\"\n"**, reason=ContainerCannotRun, signal=null, startedAt=Time(time=2018-04-11T09:57:52Z, additionalProperties={}), additionalProperties={}), waiting=null, additionalProperties={}), additionalProperties={})] 
2018-04-11 09:57:52 INFO  LoggingPodStatusWatcherImpl:54 - Container final statuses:
     Container name: spark-kubernetes-driver
     Container image: anantpukale/spark_app:1.3
     Container state: Terminated
     Exit code: 127
2018-04-11 09:57:52 INFO  Client:54 - Application cfe2 finished.
2018-04-11 09:57:52 INFO  ShutdownHookManager:54 - Shutdown hook called
2018-04-11 09:57:52 INFO  ShutdownHookManager:54 - Deleting directory /tmp/spark-d5813d6e-a4af-4bf6-b1fc-dc43c75cd643 

以下是我的Docker文件的图像。

错误跟踪表明,我在使用“docker”命令时触发了一些问题。 Docker文件

4个回答

3
我遇到了这个问题。它与docker镜像的ENTRYPOINT相关。在使用Kubernetes时,Spark 2.3.0现在有一个Dockerfile示例,其中使用了在kubernetes/dockerfiles/中找到的特定脚本作为ENTRYPOINT。如果docker镜像没有使用该特定脚本作为ENTRYPOINT,则容器无法正确启动。Spark Kubernetes Docker文档

0

你能否使用登录进入容器?

#>docker run -it --rm docker.io/anantpukale/spark_app:1.3 sh

然后尝试运行您想要提交的主程序或命令。
根据这个输出,我们可以进一步进行调查。


是的,我能够使用您上面的sh命令在docker中运行它。但是这里我需要稍微修改一下我的命令。我之前将我的Spark作业提交给Kubernetes API服务器,现在改为本地客户端模式。/opt/spark/bin/spark-submit --master local --name cfe2 --deploy-mode client --class com.oracle.Application --conf spark.executor.instances=1 --conf spark.kubernetes.container.image=docker.io/anantpukale/spark_app:1.3 CashFlow-2.2.1-SNAPSHOT-shaded.jar - Anant Pukale
我正在使用minikube来运行kubernetes版本1.9.4。 - Anant Pukale

0

根据@hichamx的建议,下面的代码对我来说解决了"exec: \"driver\"问题。

spark-submit \
    --master k8s://http://127.0.0.1:8001 \
    --name cfe2 \
    --deploy-mode cluster \
    --class com.oracle.Test \
    --conf spark.executor.instances=2 \
    --conf spark.kubernetes.container.image=docker/anantpukale/spark_app:1.1 \
    --conf spark.kubernetes.driver.container.image=docker.io/kubespark/spark-driver:v2.2.0-kubernetes-0.5.0 \
    --conf spark.kubernetes.executor.container.image=docker.io/kubespark/spark-executor:v2.2.0-kubernetes-0.5.0 \
    local://spark-0.0.1-SNAPSHOT.jar

尽管这导致了错误:退出代码:127和spark-kubernetes-driver终止。

0
在你的Dockerfile中,使用ENV PATH="/opt/spark/bin:${PATH}"代替你的那行代码。

我按照你的建议修改了上述命令,但仍然出现相同的错误。 - Anant Pukale

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接