问题: spark on k8s 需要配置Hosts ,指定 --conf spark.kubernetes.driver.podTemplateFile driver pod不生效,但是指定spark.kubernetes.executor.podTemplateFile pod生效
spark版本3.2.0 k8s版本1.16
提交命令:
bin/spark-submit
--master k8s://https://10.x.x.x:6443
--deploy-mode cluster
--name spark-pi
--class org.apache.spark.examples.streaming.HdfsWordCount
--conf spark.executor.instances=1
--conf spark.kubernetes.authenticate.driver.serviceAccountName=spark1
--conf spark.kubernetes.container.image=spark-example:v5
--conf spark.kubernetes.driver.podTemplateFile=/opt/spark/host_add.yaml
--conf spark.kubernetes.executor.podTemplateFile=/opt/spark/host_add.yaml
local:///opt/spark/examples/jars/spark-examples_2.12-3.2.0.jar hdfs:/x.x.x.xx:8020/jars/wordcount.txt
yaml文件:
apiVersion: v1 kind: Pod metadata: name: hostaliases-pod spec: restartPolicy: Never hostAliases: -ip: "10.x.xx.xx" hostnames: -"cdh104" containers: -name: cat-hosts image: spark-example:v5
分别查看driver/executor的yaml: kubectl get po spark-pi-1640312803968-driver -o yaml (未生效,没有hostAliases配置)
kubectl get po hdfswordcount-ad53e97dea43281c-exec-1 -o yaml (生效存在hostAliases配置)
查看相似问题,我试用了spark3.0/3.2两个版本driver pod都未生效
https://stackoverflow.com/questions/58169780/pod-template-for-specifying-tolerations-when-running-spark-on-kubernetes
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Spark on Kubernetes环境中,配置spark.kubernetes.driver.podTemplateFile
和spark.kubernetes.executor.podTemplateFile
是为了让Spark Driver和Executor Pods根据指定的YAML模板文件来创建。然而,你遇到的问题是Driver Pod没有应用该模板中的hostAliases配置,而Executor Pods却成功应用了。
这个问题可能与Spark版本、Kubernetes版本的兼容性或者Spark提交作业时的执行模式有关。尽管你已经尝试了不同版本的Spark,但问题依旧存在。以下是一些可能的解决方向:
检查YAML模板格式:确保你的host_add.yaml
文件格式正确无误,特别是indentation(缩进),因为YAML对格式非常敏感。此外,确认hostAliases
部分是否放置在正确的层级下,直接位于spec
之下。
Spark版本与Kubernetes版本兼容性:虽然你已尝试了不同Spark版本,但也要注意Kubernetes 1.16已经是较旧的版本,可能存在某些特性支持不完全或有已知的兼容性问题。查阅Spark官方文档或社区讨论,看是否有针对特定K8s版本的已知问题或建议。
Spark配置参数:确认是否还有其他Spark配置参数可能影响到Pod模板的应用。例如,检查是否有可能覆盖默认配置的其他参数设置。
日志分析:查看Spark Driver的日志,可能会有错误信息或警告提示为何driver pod的podTemplateFile未生效。这可以通过Spark UI或者直接从Kubernetes集群中获取日志来完成。
使用Spark Operator:考虑使用Spark Operator来管理Spark应用,它提供了更高级的配置选项和更好的Kubernetes集成,可能能绕过当前遇到的问题。
手动验证YAML模板:独立于Spark之外,直接使用kubectl命令根据你的host_add.yaml
模板创建一个Pod,验证YAML模板本身是否有效且能够正确应用hostAliases配置。
社区和官方资源:鉴于你在Stack Overflow上找到了类似问题但未找到解决方案,可以尝试在Spark用户邮件列表或Spark的GitHub仓库中开issue,寻求更专业的帮助。
如果以上步骤都无法解决问题,可能需要深入研究Spark源码或等待相关组件的更新来修复潜在的bug。
阿里云EMR是云原生开源大数据平台,为客户提供简单易集成的Hadoop、Hive、Spark、Flink、Presto、ClickHouse、StarRocks、Delta、Hudi等开源大数据计算和存储引擎,计算资源可以根据业务的需要调整。EMR可以部署在阿里云公有云的ECS和ACK平台。