Hadoop相关问题解决
Hive
1.查询hivemeta信息,查到的numRows为-1
cdh | 不限 | 不限 | 不限 |
在hivemeta库中可以通过以下sql查询表的元数据信息
SELECT * FROM TABLE_PARAMS WHERE tbl_id = 45857
其中numRows会被用来统计为表的行数,但是发现有些表查出来行数为-1
可能原因
可能是因为这个表新建后没有通过这种方式插入过数据,所以表没有进行过统计,默认信息即为numRows=-1
解决方案
使用命令 ANALYZE TABLE tableName COMPUTE STATISTICS; 统计元数据信息
再查询时,numRows变为0
2. bucketId out of range: -1 (state=,code=0)
hdp | 3.1.1 | 是 | 是 |
执行一个普普通通的 SELECT * FROM student WHERE 1 = 1 LIMIT 5;报错
Error: java.io.IOException: java.lang.IllegalArgumentException: bucketId out of range: -1 (state=,code=0)
可能原因
解决方案
3.集群客户端使用hive命令连接,报错认证失败
hdp | 3.1.1 | 是 | 是 |
报错信息忘了拷贝了
可能原因
客户端java 的安全认证文件没有下发,kerberos加密解密有问题
需要jar包:
- local_policy.jar
- US_export_policy.jar
解决方案
拷贝安全认证文件到客户端
scp root@ip:/opt/third/jdk/jre/lib/security/*.jar /opt/third/jdk/jre/lib/security/
4.运行hive任务卡在Tez session hasn't been created yet. Opening session
hdp | 3.1.1 | 是 | 是 |
可能原因
没有指定tez队列,无法获取到足够的资源启动任务
解决方案
设置tez队列 set tez.queue.name =
问题拓展
hive 设置队列需要根据所使用的引擎进行对应的设置才会有效果,否则无效
# 设置引擎
set hive.execution.engine=mr;
set hive.execution.engine=spark;
set hive.execution.engine=tez;
# 如果使用的是mr(原生mapreduce)
SET mapreduce.job.queuename=etl;
# 如果使用的引擎是tez
set tez.queue.name=etl
# 设置队列(etl为队列名称,默认为default)
5.Unable to read HiveServer2 configs from ZooKeeper
fi | 5.15.2 | 是 | 是 |
没有进行zk认证
HDFS
1.No common protection layer between client and server
cdh | 5.15.2 | 是 | 是 |
javax.security.sasl.SaslException: No common protection layer between client and server
at com.sun.security.sasl.gsskerb.GssKrb5Client.doFinalHandshake(GssKrb5Client.java:251)
at com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:186)
at org.apache.hadoop.security.SaslRpcClient.saslEvaluateToken(SaslRpcClient.java:483)
at org.apache.hadoop.security.SaslRpcClient.saslConnect(SaslRpcClient.java:427)
at org.apache.hadoop.ipc.Client$Connection.setupSaslConnection(Client.java:594)
at org.apache.hadoop.ipc.Client$Connection.access$2000(Client.java:396)
at org.apache.hadoop.ipc.Client$Connection$2.run(Client.java:761)
at org.apache.hadoop.ipc.Client$Connection$2.run(Client.java:757)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1920)
at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:756)
at org.apache.hadoop.ipc.Client$Connection.access$3000(Client.java:396)
at org.apache.hadoop.ipc.Client.getConnection(Client.java:1557)
at org.apache.hadoop.ipc.Client.call(Client.java:1480)
at org.apache.hadoop.ipc.Client.call(Client.java:1441)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:230)
可能原因
该异常由服务端与客户端配置项hadoop.rpc.protection不一致导致。
解决方案
修正服务端hadoop.rpc.protection配置,确保两端一致,重启服务。
问题拓展
可选值(需要和集群配置保持同步):authentication,integrity,privacy
在hadoop服务和客户端之间传输的数据可以在线上加密。在core-site.xml中将hadoop.rpc.protection
设置为privacy会激活数据加密。以上三项分别为
- authentication【认证:仅认证(默认)】
- integrity 【完整性:除了认证之外的完整性检查】
- Privacy 【隐私:除了完整性检查之外的数据加密】
2.Can't get Master Kerberos principal for use as renewer
cdh | 5.15.2 | 是 | 是 |
可能原因
获取fileReader的时候没有传入yarn.resourcemanager.principal参数。
解决方案
传入yarn.resourcemanager.principal参数。
3.Does not contain a valid host:port authority: hdp-2.6-node1.dtwave.com
可能原因
解决方案
HBase
1.KeeperErrorCode = NoNode for /hbase/meta-region-server
hdp | 3.1.1 | 是 | 是 |
可能原因
hbase.znode.parent 没有配置正确,客户端需要与集群使用的一致。
解决方案
修正配置
Ranger
1.User doesn't have necessary permission to grant access
调用rangerApi授权出现以上返回,但是我的用户是admin用户,照理说是有所有权限的。
问题原因
可能是因为没有把用户添加到具体的规则中
Delegate Admin
kerberos
1.Fail to create credential. (63) - No service creds
hdp | 2.6 | 是 | 是 |
可能原因
该异常由服务端与客户端配置项hadoop.rpc.protection不一致导致。