【发布时间】:2018-12-05 02:15:50
【问题描述】:
我长期运行从 kafka 读取的 spark 流式传输作业。此作业只启动一次,预计将永远运行。
集群是kerberized。
我观察到的是,工作几天(超过 7 天)运行良好。在作业开始时,我们可以看到它获得了有效期为 7 天的 HDFS 委托令牌。
18/06/17 12:32:11 INFO hdfs.DFSClient:为用户创建令牌:HDFS_DELEGATION_TOKEN owner=user@domain,renewer=yarn,realUser=,issueDate=1529213531903,maxDate=1529818331903,sequenceNumber=915336,masterKeyId =385 on ha-hdfs:cluster
作业持续运行超过 7 天,但在那段时间之后(maxDate 后几天),它随机突然将状态更改为 ACCEPTED。此后,它尝试获取新的 kerberos 票证,但未能为 kerberos 提供错误 -
18/06/26 01:17:40 INFO yarn.Client:application_xxxx_80353 的应用报告(状态:RUNNING)
18/06/26 01:17:41 INFO yarn.Client:application_xxxx_80353 的应用报告(状态:RUNNING)
18/06/26 01:17:42 INFO yarn.Client:application_xxxx_80353 的应用报告(状态:ACCEPTED)
18/06/26 01:17:42 INFO yarn.Client:
客户端令牌:令牌{种类:YARN_CLIENT_TOKEN,服务:}
最终例外 -
18/06/26 01:17:45 WARN security.UserGroupInformation: PriviledgedActionException as:user@domain (auth:KERBEROS) 原因:javax.security.sasl.SaslException:GSS 启动 失败 [由 GSSException 引起:未提供有效凭据 (机制级别:找不到任何 Kerberos tgt)]
注意 - 我已经尝试过传递 keytab 文件,以便可以永远完成委托。但我无法将 keytab 文件传递给 spark,因为它与 kafka jaas.conf 冲突。
所以有3个相关问题-
- 为什么作业可以将状态从 RUNNING 更改为 ACCEPTED?
- 是因为我无法通过 keytab 而出现问题吗?如果是,如何在使用 kafka 和 spark-streaming over kerberos 时传递 keytab? -keytab 不起作用,因为我们使用 --files 传递 keytab。 keytab 已在 jaas.conf 中配置,并与 spark-submit 中的 --files 参数一起分发。有什么其他方式可以让工作获得新票吗?
- 当作业再次尝试进入 RUNNING 状态时,YARN 拒绝它,因为它没有有效的 KRB 票证。如果我们确保驱动节点始终拥有有效的 KRB 票证会有所帮助吗?所以当这种情况发生时,就像提交新的火花作业一样;因为该节点具有有效的 KRB 票证,并且不会给出 kerberos 错误。
【问题讨论】:
-
您运行的是什么版本的 Spark、Hadoop 和 Kafka?你看stackoverflow.com/questions/47977075/…了吗?
-
我们正在使用 spark 2.1 并且能够连接到 kafka,问题仅在于长时间运行的作业。版本信息 - Spark 2.1.0.cloudera1、Hadoop 2.6.0-cdh5.8.4、KAFKA-2.1.1
标签: apache-spark apache-kafka spark-streaming hadoop-yarn kerberos