通过Beeline连接HBase表时HiveServer2报类缺失错误求助
解决HiveServer2查询HBase表时的
com/yammer/metrics/core/MetricsRegistry缺失错误 嘿,我来帮你搞定这个问题!从你贴的报错和HiveServer2日志来看,导致查询失败的核心原因很明确——那台出问题的HiveServer2节点里,找不到Yammer Metrics核心类的jar包,这个jar是HBase的MapReduce工具类必须依赖的组件。至于日志里提到的hbase-prefix-tree缺失只是个警告,和这次的查询失败没关系哈。
具体修复步骤:
- 对比正常节点和故障节点的jar包
先登录那台能正常查询的HiveServer2节点,去Hive或者HBase的lib目录(比如$HIVE_HOME/lib/、$HBASE_HOME/lib/)找一下类似metrics-core-*.jar的文件,这就是我们要找的Yammer Metrics核心jar包;再去故障节点的相同路径下看看,十有八九是这个jar包没了。 - 复制缺失的jar包到故障节点
把正常节点上的metrics-core-*.jar复制到故障节点的Hive lib目录,保险起见也同步一份到HBase的lib目录,确保依赖完整。 - 重启故障节点的HiveServer2
用命令重启服务就行,比如:
要是你们用Ambari或者Cloudera Manager这类集群管理工具,直接在界面上重启更方便。# 先停掉服务 hive --service hiveserver2 stop # 后台启动并指定日志文件 nohup hive --service hiveserver2 > /var/log/hive/hiveserver2.log 2>&1 & - 验证修复结果
用Beeline重新连那台故障节点的HiveServer2,跑一遍之前报错的查询,确认能不能正常执行啦。
额外小贴士:
- 为了以后不再出现这种节点间依赖不一致的问题,建议用集群配置工具(比如Ansible)同步所有HiveServer2节点的lib目录,或者用Ambari/CM这类平台统一管理Hive和HBase的依赖版本,这样就不用手动一个个节点去弄啦。
- 至于日志里的
缺少PrefixTreeCodec的jar包警告,如果你们的HBase集群没用到PrefixTree编码的列族,完全可以忽略;要是需要用这个编码,就把hbase-prefix-tree-*.jar同步到所有节点的HBase lib目录就行。
内容的提问来源于stack exchange,提问作者Praveen Prakasan




