在缓存中找不到HDFS授权令牌-Spark应用程序中的错误

时间:2018-07-03 11:37:47

标签: hadoop hdfs spark-streaming yarn kerberos

我在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

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

如果有人可以帮助我,我将不胜感激!

1 个答案:

答案 0 :(得分:0)

很有可能需要刷新您的kerberos票证(这就是为什么当您重新启动它时可以使用)。

Lifetime of Kerberos tickets在这两个设置上有相当不错的演练,尤其是您必须要注意的。

  • 选项1:将生存期设置为更长的时间
  • 选项2:有第二个过程,它会在需要时在后台初始化

我更喜欢Option1,并使用30天左右。这是跟踪“我上次重新启动该服务的时间”的好方法。