我在sparkversion2.3.0中有一个简单的sparkstreaming应用程序,它将每个处理批的结果放在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 configuration spark.hadoop.fs.hdfs.impl.disable.cache=true时,这个问题可以得到解决,但是禁用cache对处理性能有很大的影响。
如果有人能帮我,我将非常感激!
1条答案
按热度按时间s8vozzvw1#
您的kerberos票证很可能需要刷新(这就是重新启动它时它将工作的原因)。
kerberos票证的生存期对这两个设置有一个相当不错的介绍,您必须特别了解这两个设置。
选项1:将生存期设置为更长的时间
选项2:有第二个进程,只要你需要它,它就会在后台扭结
我喜欢选项1,用30天左右。这是一个很好的方法来记录“我上次重新启动那个服务是什么时候”。