FAQ-离线开发-shell节点提交spark-submit任务,运行超48小时后报错
更新时间: 2025-12-01 14:07:51
阅读 36
FAQ-离线开发-shell节点提交spark-submit任务,运行超48小时后报错
问题描述/异常栈
shell节点内通过spark-submit提交jar包运行,任务运行超过48小时后报错:DIGEST-MD5: IO error acquiring password


发现版本
所有版本解决方案
通过shell节点提交spark-submit任务时,手动指定keytab路径及pricipal。eg:${HADOOP_CONF_V3}/spark-submit \
--principal=${PRINCIPAL} \ --通过变量,手动指定principal
--keytab=${KEYTAB_FILE} \ --通过变量,手动指定keytab
--master yarn \
--deploy-mode cluster \
--num-executors ${num_executors} \
--executor-memory 12G \
--executor-cores ${executor_cores} \
--driver-memory 4G \
--queue ${QUEUE_NAME} \
--archives ${LIB_PATH}/python310-env.tar.gz#environment \
--conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=./environment/bin/python \
--conf spark.executorEnv.PYSPARK_PYTHON=./environment/bin/python \
--conf spark.yarn.appMasterEnv.ENV_TYPE=$ENV_TYPE \
--conf spark.yarn.appMasterEnv.HIVE_TABLE_LOCATION_DIR=$HIVE_TABLE_LOCATION_DIR \
--files ${ROOT_PATH}/log4j2.properties \
--conf "spark.driver.extraJavaOptions=-Dlog4j.configurationFile=log4j2.properties" \
--conf "spark.executor.extraJavaOptions=-Dlog4j.configurationFile=log4j2.properties" \
--conf spark.dynamicAllocation.enabled=false \
--conf spark.default.parallelism=100 \
--conf spark.network.timeout=800s \
--conf spark.sql.autoBroadcastJoinThreshold=-1 \
--conf spark.executor.memoryOverhead=10g \
--conf spark.driver.memoryOverhead=4g \
--conf spark.hadoop.hive.metastore.client.socket.timeout=864000s \
--py-files ${ROOT_PATH}/src.zip \
${ROOT_PATH}/src/offline/business/patent/claims_instruction_translation.py \
--db_name ${HIVE_DB_NAME} --from_tbl_name ${FROM_TBL_NAME} --primary_col out_num_ipph \
--other_cols claims,instruction --dt ${dt} --nums_per_group 50000 --num_partitions ${num_partitions} \
--num_thread ${num_thread} --max_retry 1问题原因
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,可避免票据冲突情况;
作者:曹俊
文档反馈
以上内容对您是否有帮助?