相关文章推荐
没人理的玉米  ·  为什么提交Spark ...·  11 月前    · 
没人理的玉米  ·  spark ...·  11 月前    · 
没人理的玉米  ·  Spark Streaming + ...·  11 月前    · 
没人理的玉米  ·  Spark Streaming ...·  11 月前    · 

修改kerberos的票据和HDFS token过期时间为5分钟,设置 “dfs.namenode.delegation.token.renew-interval” 小于60秒,提交Spark Streaming应用,超过token有效期,提示以下错误,应用失败。

token (HDFS_DELEGATION_TOKEN token 17410 for spark2x) is expired
  • 问题原因:

    ApplicationMaster进程中有1个Credential Refresh Thread会根据 token renew周期 * 0.75 的时间比例上传更新后的Credential文件到HDFS上。

    Executor进程中有1个Credential Refresh Thread会根据 token renew周期 *0.8 的时间比例去HDFS上获取更新后的Credential文件,用来刷新UserGroupInformation中的token,避免token失效。

    当Executor进程的Credential Refresh Thread发现当前时间已经超过Credential文件更新时间(即 token renew周期 *0.8 )时,会等待1分钟再去HDFS上面获取最新的Credential文件,以确保AM端已经将更新后的Credential文件放到HDFS上。

    “dfs.namenode.delegation.token.renew-interval” 配置值小于60秒,Executor进程起来时发现当前时间已经超过Credential文件更新时间,等待1分钟再去HDFS上面获取最新的Credential文件,而此时token已经失效,task运行失败,然后在其他Executor上重试,由于重试时间都是在1分钟内完成,所以task在其他Executor上也运行失败,导致运行失败的Executor加入到黑名单,没有可用的Executor,应用退出。

  • 修改方案:

    在Spark使用场景下,需设置 “dfs.namenode.delegation.token.renew-interval” 大于80秒。 “dfs.namenode.delegation.token.renew-interval” 参数描述请参 表1 考。

  •