FAQ-离线开发-shell节点提交spark-submit任务,运行超48小时后报错

问题描述/异常栈
shell节点内通过spark-submit提交jar包运行,任务运行超过48小时后报错:
DIGEST-MD5: IO error acquiring password
FAQ-离线开发-shell节点提交spark-submit任务,运行超48小时后报错 - 图1
FAQ-离线开发-shell节点提交spark-submit任务,运行超48小时后报错 - 图2
发现版本
所有版本
解决方案
通过shell节点提交spark-submit任务时,手动指定keytab路径及pricipal。eg:
${HADOOP_CONF_V3}/spark-submit \
   --principal=${PRINCIPAL} \     --通过变量,手动指定principal
   --keytab=${KEYTAB_FILE} \      --通过变量,手动指定keytab
   --master yarn \
   --deploy-mode cluster \
   --executor-memory 12G \
   ......
问题原因
1、直接通过shell节点提交spark-submit任务,spark任务使用的Kerberos票据为平台shell节点自动kinit的票据,48小时后会过期,导致上述报错;
2、而spark-submit支持直接指定keytab,这样keytab随Spark Driver分发,long running 作业在 token 过期后可以拿keytab刷token续命;
3、但同时为防止spark-submit指定的keytab会与shell节点自动kinit的票据产生冲突,因此spark-submit任务在指定keytab时可通过变量获取平台shell节点kinit的同一pricipal和keytab,可避免票据冲突情况;

作者:曹俊