Hive集成Tez执行报错排查:主类缺失及AWS凭证问题解决
Hive+Tez+S3环境下的错误排查与解决
环境信息
- Hadoop 3.3.5
- Hive 3.1.3
- Tez 0.10.2(适配Hadoop 3.3.5版本构建)
- 数据存储于S3桶
问题1:Tez引擎启动失败,找不到主类
将Hive执行引擎从MR切换为Tez后,执行select count(*) from m1.t1立即报错,核心错误信息如下:
Error: Could not find or load main class org.apache.tez.dag.app.DAGAppMaster
注:MR引擎下该查询可正常运行。
临时调整
修改tez-site.xml,设置tez.use.cluster.hadoop-libs=true,Tez可正常启动YARN应用,但触发新的S3凭证加载错误。
问题2:S3凭证加载失败
调整tez.use.cluster.hadoop-libs为true后,查询启动后因S3权限认证失败终止,核心错误:
org.apache.hadoop.fs.s3a.auth.NoAuthWithAWSException: No AWS Credentials provided by TemporaryAWSCredentialsProvider SimpleAWSCredentialsProvider EnvironmentVariableCredentialsProvider IAMInstanceCredentialsProvider : com.amazonaws.SdkClientException: Unable to load AWS credentials from environment variables (AWS_ACCESS_KEY_ID (or AWS_ACCESS_KEY) and AWS_SECRET_KEY (or AWS_SECRET_ACCESS_KEY))
已在以下位置配置S3凭证但无效:
- Hadoop的
core-site.xml(配置fs.s3a.access.key、fs.s3a.secret.key) - Hive的
hive-site.xml - 系统环境变量
AWS_ACCESS_KEY_ID、AWS_SECRET_KEY
尝试将core-site.xml中所有fs.s3a相关属性复制到tez-site.xml,或在Hive会话内手动设置凭证,均无法解决问题。
最终解决方案
修改hive-site.xml,添加hive.conf.hidden.list属性,移除其中所有与S3凭证相关的配置项:
<property> <name>hive.conf.hidden.list</name> <value>javax.jdo.option.ConnectionPassword,hive.server2.keystore.password,fs.s3a.proxy.password,dfs.adls.oauth2.credential,fs.adl.oauth2.credential</value> </property>
默认情况下,Hive会隐藏所有fs.s3a凭证相关配置,导致Tez无法获取这些参数。显式配置该属性并剔除S3凭证相关项后,Tez可正常加载凭证,查询执行恢复正常。
内容的提问来源于stack exchange,提问作者user21214141
相关产品推荐
相关产品推荐

