EMR EKS 无法启动驱动程序 pod

Posted

技术标签:

【中文标题】EMR EKS 无法启动驱动程序 pod【英文标题】:EMR EKS unable to launch driver pod 【发布时间】:2022-01-22 09:49:54 【问题描述】:

如何在 EKS 上的 EMR 中设置资源限制?我的驱动程序 pod 无法启动,因为它请求的 CPU 超出了允许的范围。这对我来说没有意义。我正在运行下面文档中的入门代码。

我添加了--conf spark.driver.limit.cores=2 以尝试使限制高于以下错误消息中列出的限制。我从这里得到了这个想法https://spark.apache.org/docs/latest/running-on-kubernetes.html#spark-properties

这个集群确实有 istio 在里面运行。我不确定这是否会导致问题。

这是我正在运行以触发作业的代码

aws emr-containers start-job-run \
  --virtual-cluster-id blahblah \
  --name pi-4 \
  --execution-role-arn arn:aws:iam::0000000000:role/blahblah_emr_eks_executor_role \
  --release-label emr-6.4.0-latest \
  --job-driver '
    "sparkSubmitJobDriver": 
      "entryPoint": "s3://us-east-1.elasticmapreduce/emr-containers/samples/wordcount/scripts/wordcount.py",
      "entryPointArguments": ["s3://blahblah/wordcount_output"],
      "sparkSubmitParameters": "--conf spark.executor.instances=2 --conf spark.executor.memory=2G --conf spark.executor.cores=2 --conf spark.driver.cores=1 --conf spark.driver.limit.cores=2"
    
  '

这会导致job-runner 容器失败并出现以下情况:


状态:已终止 原因:错误 消息:线程“主”io.fabric8.kubernetes.client.KubernetesClientException 中的异常:执行失败:POST 在:https://kubernetes.default.svc/api/v1/namespaces/spark/pods。消息:Pod“spark-00000002vepbpmi2hkv-driver”无效:spec.containers[2].resources.requests:无效值:“1”:必须小于或等于 cpu 限制。收到状态:Status(apiVersion=v1, code=422, details=StatusDetails(causes=[StatusCause(field=spec.containers[2].resources.requests, message=Invalid value: "1": 必须小于或等于到 cpu 限制,reason=FieldValueInvalid,additionalProperties=)],group=null,kind=Pod,name=spark-00000002vepbpmi2hkv-driver,retryAfterSeconds=null,uid=null,additionalProperties=),kind=Status,message =Pod“spark-00000002vepbpmi2hkv-driver”无效:spec.containers[2].resources.requests:无效值:“1”:必须小于等于cpu限制,metadata=ListMeta(_continue=null, remainingItemCount= null、resourceVersion=null、selfLink=null、additionalProperties=)、reason=Invalid、status=Failure、additionalProperties=)。在 io.fabric8.kubernetes.client.dsl.base.OperationSupport.requestFailure(OperationSupport.java:589)


关于如何进行的任何想法?

【问题讨论】:

我找到了this similar issue。 cmets 部分的建议有用吗? 不幸的是,不同的方式来编排火花。这是 EKS 上的 AWS EMR,它利用 AWS API,这是一个 kubernetes 运算符。 【参考方案1】:

我想通了。

aws emr-containers start-job-run \
  --virtual-cluster-id=blahblah \
  --name=pi-4 \
  --execution-role-arn=arn:aws:iam::blahblahaccount:role/balblah_role_name \
  --release-label=emr-6.4.0-latest \
  --job-driver='
    "sparkSubmitJobDriver": 
      "entryPoint": "local:///usr/lib/spark/examples/src/main/python/pi.py",
      "sparkSubmitParameters": "--conf spark.executor.instances=1 --conf spark.executor.memory=2G --conf spark.executor.request.cores=1 --conf spark.kubernetes.executor.limit.cores=2 --conf spark.driver.request.cores=1 --conf spark.kubernetes.driver.limit.cores=2
    
  '

好像aws的文档有误,配置值其实如下。

--conf spark.driver|executor.request.cores --conf spark.driver|executor.limit.cores

但是,AWS 文档让您传入 --conf spark.driver.cores=1。这个值似乎没有得到承认,我认为这导致了我的错误。下面的 spark 配置文档提到 spark.driver.request.cores 优先于 spark.driver.cores,我认为这是有道理的,因为当我通过它时该值被识别。

https://spark.apache.org/docs/latest/running-on-kubernetes.html#configuration

【讨论】:

以上是关于EMR EKS 无法启动驱动程序 pod的主要内容,如果未能解决你的问题,请参考以下文章

创建并运行 EMR on EKS 集群

EKS:在特定 AWS 自动缩放组上运行特定服务(pod)

Amazon EKS (NFS) 到 Kubernetes pod。无法挂载卷

在 AWS EKS 上扩展 pod 时出现 502 ALB 错误

在 AWS EMR 中使用 spark-submit 启动 Python 应用程序

EKS中的UDP负载平衡替代方案