使用Spark Operator提交任务时YuniKorn放置规则未按预期生效
问题排查与解决步骤
1. 调整SparkApplication的注解位置
你当前把yunikorn.apache.org/queue注解加在了driver和executor的Pod配置层级,但YuniKorn需要识别的是整个Spark应用的队列指定,而非单个Pod的注解。需将注解移至SparkApplication的metadata层级:
kind: SparkApplication metadata: name: "my-spark-app" namespace: spark-op annotations: yunikorn.apache.org/queue: test # 移至此处 spec: sparkVersion: 3.3.1 driver: # 移除此处的队列注解 ... executor: # 移除此处的队列注解 ...
2. 开启Root队列的子队列自动创建权限
虽然你配置了placementrules的create: true,但需确保Root队列允许动态创建子队列。修改YuniKorn配置,给Root队列添加autocreatechildren: true属性:
partitions: - name: default placementrules: - name: provided create: true nodesortpolicy: type: binpacking queues: - name: root submitacl: "*" autocreatechildren: true # 新增该配置
3. 明确指定Spark应用使用YuniKorn调度器
确保SparkApplication的spec中指定YuniKorn为调度器,否则应用会使用K8s默认调度器,队列配置无法生效:
spec: sparkVersion: 3.3.1 scheduler: name: yunikorn # 新增该配置,对应YuniKorn调度器的名称 driver: ...
4. 验证队列创建与调度结果
修改配置后重启YuniKorn服务,重新提交Spark应用,通过YuniKorn Web UI(默认端口9889)查看是否生成root.test队列。若队列已创建但应用仍未调度至该队列,检查YuniKorn日志,排查是否存在权限或注解识别错误。
内容的提问来源于stack exchange,提问作者boogie
相关产品推荐
相关产品推荐

