在缓存中找不到Hdfs委托令牌 - Spark应用程序中的错误

问题描述 投票:3回答:1

我在Spark版本2.3.0中有简单的Spark Streaming应用程序,它将每个已处理批处理的结果放在HDFS上。我的应用程序在部署模式客户端的YARN上运行,我正在使用kerberized hadoop集群(hadoop2.6.0-cdh5.9.3)。我在spark-submit命令中设置了--principal和--keytab。

几天后,由于缓存中缺少委托令牌,我的应用程序无法在HDFS上写入。重新启动应用程序后,流式传输工作正常,但由于同样的原因,几天后再次失败。

这是来自驱动程序的日志:

ERROR JobScheduler: Error running job streaming job 1528366650000 ms.0
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.token.SecretManager$InvalidToken): token (token for spark_online: HDFS_DELEGATION_TOKEN owner=spark@DCWP, renewer=yarn, realUser=, issueDate=1528232733578, maxDate=1528837533578, sequenceNumber=14567778, masterKeyId=1397) can't be found in cache

当我添加到app配置spark.hadoop.fs.hdfs.impl.disable.cache = true时,问题可以解决,但禁用缓存会对处理性能产生很大影响。

如果有人能帮助我,我真的很感激!

hadoop hdfs spark-streaming yarn kerberos
1个回答
0
投票

您的kerberos票证可能需要刷新(这就是为什么它在重新启动时会起作用的原因)。

Lifetime of Kerberos tickets对这两个设置进行了相当不错的演练,特别是你必须要看一下。

  • 选项1:将生命周期设置为更长的时间
  • 选项2:有第二个过程,只要你需要它就可以在后台进行开发

我更喜欢Option1并使用30天左右。这是跟踪'我最后一次重启该服务的时间'的好方法。

© www.soinside.com 2019 - 2024. All rights reserved.