hbase thrift2 jar包冲突导致启动失败问题排查记录

1、启动命令

${HBASE_HOME}/bin/hbase-daemon.sh start thrift2

2、异常情况

hbase-root-thrift2-hdfs-test07.yingzi.com.out异常日志:

Exception in thread "main" java.lang.AbstractMethodError: org.apache.hadoop.metrics2.sink.timeline.HadoopTimelineMetricsSink.init(Lorg/apache/commons/configuration/SubsetConfiguration;)Vat org.apache.hadoop.metrics2.impl.MetricsConfig.getPlugin(MetricsConfig.java:199)at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.newSink(MetricsSystemImpl.java:529)at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.configureSinks(MetricsSystemImpl.java:501)at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.configure(MetricsSystemImpl.java:480)at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.start(MetricsSystemImpl.java:189)at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.init(MetricsSystemImpl.java:164)at org.apache.hadoop.metrics2.lib.DefaultMetricsSystem.init(DefaultMetricsSystem.java:54)at org.apache.hadoop.metrics2.lib.DefaultMetricsSystem.initialize(DefaultMetricsSystem.java:50)at org.apache.hadoop.hbase.metrics.BaseSourceImpl$DefaultMetricsSystemInitializer.init(BaseSourceImpl.java:51)at org.apache.hadoop.hbase.metrics.BaseSourceImpl.<init>(BaseSourceImpl.java:112)at org.apache.hadoop.hbase.metrics.ExceptionTrackingSourceImpl.<init>(ExceptionTrackingSourceImpl.java:44)at org.apache.hadoop.hbase.thrift.MetricsThriftServerSourceImpl.<init>(MetricsThriftServerSourceImpl.java:59)at org.apache.hadoop.hbase.thrift.MetricsThriftServerSourceFactoryImpl$FactoryStorage.<init>(MetricsThriftServerSourceFactoryImpl.java:35)at org.apache.hadoop.hbase.thrift.MetricsThriftServerSourceFactoryImpl$FactoryStorage.<clinit>(MetricsThriftServerSourceFactoryImpl.java:34)at org.apache.hadoop.hbase.thrift.MetricsThriftServerSourceFactoryImpl.createThriftTwoSource(MetricsThriftServerSourceFactoryImpl.java:52)at org.apache.hadoop.hbase.thrift.ThriftMetrics.<init>(ThriftMetrics.java:72)at org.apache.hadoop.hbase.thrift2.ThriftServer.run(ThriftServer.java:473)at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)at org.apache.hadoop.hbase.thrift2.ThriftServer.main(ThriftServer.java:374)

3、问题分析&排查

这个报错基本可以认定是jar包冲突导致的,不过问题的难点在于如何定位到有问题的jar

之前遇到过hive由于jar冲突导致的启动失败问题,记录在:一个Hive curator-client.jar包冲突问题排查解决_org.apache.curator.shaded_Java小田的博客-CSDN博客

排查问题的思路可以借鉴,不过hbase比hive的情况更复杂一点

通过日志和查看代码,找到一个关键的配置文件:/usr/hdp/3.0.1.0-187/hbase/conf/hadoop-metrics2-hbase.properties

其中比较关键的配置如下:

*.timeline.plugin.urls=file:///usr/lib/ambari-metrics-hadoop-sink/ambari-metrics-hadoop-sink.jar
hbase.sink.timeline.class=org.apache.hadoop.metrics2.sink.timeline.HadoopTimelineMetricsSink

大致逻辑是,通过一个自定义类加载器,加载外部jar:/usr/lib/ambari-metrics-hadoop-sink/ambari-metrics-hadoop-sink.jar中的org.apache.hadoop.metrics2.sink.timeline.HadoopTimelineMetricsSink类,并调用init方法

把/usr/lib/ambari-metrics-hadoop-sink/ambari-metrics-hadoop-sink.jar下载到本地反编译

然后找到org.apache.hadoop.metrics2.sink.timeline.HadoopTimelineMetricsSink这个类,找到init(SubsetConfiguration conf)方法

仔细看可以发现这里的SubsetConfiguration的包名是org.apache.commons.configuration2.SubsetConfiguration:

而根据上面的异常日志:Exception in thread "main" java.lang.AbstractMethodError: org.apache.hadoop.metrics2.sink.timeline.HadoopTimelineMetricsSink.init(Lorg/apache/commons/configuration/SubsetConfiguration;)V

可以发现两边SubsetConfiguration的包名是不同的,调用的方法和实际加载的类方法,参数不一致,导致了AbstractMethodError

而HadoopTimelineMetricsSink类的加载和init()的方法调用是在org.apache.hadoop.metrics2.impl.MetricsConfig.getPlugin()中进行的,大概率可以推断是MetricsConfig类所在的jar包存在版本冲突

还是通过自己写一个程序来查找这个jar,参考一个Hive curator-client.jar包冲突问题排查解决_org.apache.curator.shaded_Java小田的博客-CSDN博客

中的maven工程

Test.java代码改为:

package com.tianzy.test;public class Test {public static void main(String[] args) {try {String filePath = Class.forName("org.apache.hadoop.metrics2.impl.MetricsConfig").getProtectionDomain().getCodeSource().getLocation().getFile();System.out.println(filePath);} catch (ClassNotFoundException e) {e.printStackTrace();}}
}

执行mvn package命令打包成hive_test-1.0-SNAPSHOT.jar,上传到服务器上,放到/tmp/test/目录下

接下来比较难办的是要找到hbase thrift2程序的classpath,由于启动脚本比较复杂,想准确找到classpath比较麻烦。

这里采用了偷懒的办法,直接拷贝hbase regionserver进程的classpath:先找到regionserver的pid,然后从/proc/${pid}/environ文件中找到CLASSPATH,拷贝到/tmp/test/habase-classpath.txt文件

再执行命令:

cd /tmp/test
export CLASSPATH=`cat /tmp/test/habase-classpath.txt`:/tmp/test/hive_hook_test-1.0-SNAPSHOT.jar
java com.tianzy.test.TestHbase

输出结果:/data/hdp/3.0.1.0-187/hbase/lib/flink-realtime-data-hbase-1.0-SNAPSHOT.jar

这个一看明显就是自己打的jar包上传的,是谁上传的已经不可考,直接删掉后再尝试启动hbase thrift2,启动成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/236766.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在cmd下查看mysql表的结构信息

我提前已经在mysql数据库中创建了一个表&#xff1a; 在cmd下&#xff0c;登录mysql以后&#xff0c;使用命令describe 表名、或者explain 表名可以查看表结构信息。但在实践中&#xff0c;查看表结构&#xff0c;多用describe命令&#xff0c;而查看执行计划用explain。 例…

element ui el-date-picker日期时间选择器 设置只能选择不大于30天时间范围

需求&#xff1a;要求日期时间选择器只能选择最多32天&#xff0c;其他日期为不可点击状态。 日期组件type为daterange或者datetimerange都生效 实现&#xff08;vue2.x&#xff09;&#xff1a; 通过属性picker-options html <el-date-pickerv-model"dateTime&qu…

神经网络模型数字推理预测

MNIST数据集 MNIST是机器学习领域 最有名的数据集之一&#xff0c;被应用于从简单的实验到发表的论文研究等各种场合。 实际上&#xff0c;在阅读图像识别或机器学习的论文时&#xff0c;MNIST数据集经常作为实验用的数据出现。 MNIST数据集是由0到9的数字图像构成的。训练图…

<Linux>(极简关键、省时省力)《Linux操作系统原理分析之linux存储管理(2)》(18)

《Linux操作系统原理分析之linux存储管理&#xff08;1&#xff09;》&#xff08;17&#xff09; 6 Linux存储管理6.2 选段符与段描述符6.2.1 选段符6.2.2 段描述符6.2.3 分段机制的存储保护 6.3 80x86 的分页机制6.3.180x86 的分页机制6.3.2 分页机制的地址转换6.3.3 页表目录…

⭐ Unity + ARKIT 介绍 以及 平面检测的实现

在AR插件中&#xff0c;ARKIT是比较特殊的一个&#xff0c;首先他在很多追踪上的效果要比其他的AR插件要好&#xff0c;但是只能在IOS系统设备上运行。 1.首先ARKIT在最新版Unity已经集成在AR Foundation中&#xff0c;那我们就需要ARSession 和ARSessionOrigin这两个重要组件…

年终好价节买什么好?高效实用、高性价比的的数码好物推荐

前段时间&#xff0c;“淘宝双12不再举办”的话题上了热搜&#xff0c;改成了“淘宝年终好价节”。从“双12”到“好价节”&#xff0c;背后意味着大众跳出了一味追求低价的“买买买”的怪圈&#xff0c;转变为更追寻价好质优的商品。错过双11的消费者可以趁这个时间抓紧入手收…

深度学习手势识别 - yolo python opencv cnn 机器视觉 计算机竞赛

文章目录 0 前言1 课题背景2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层 4 数据集准备4.1 数据标注简介4.2 数据保存 5 模型训练5.1 修…

PHP开源问答网站平台源码系统 源码全部开源可二次开发 附带完整的搭建教程

目前&#xff0c;问答网站已经成为人们获取知识、交流思想的重要平台。然而&#xff0c;对于许多开发者来说&#xff0c;从头开始构建一个问答网站可能会面临各种挑战。今天&#xff0c;小编给大家介绍一款基于PHP的开源问答网站平台源码系统&#xff0c;它不仅源码全部开源&am…

NOIP2007提高组第二轮T3:矩阵取数游戏

题目链接 [NOIP2007 提高组] 矩阵取数游戏 题目描述 帅帅经常跟同学玩一个矩阵取数游戏&#xff1a;对于一个给定的 n m n \times m nm 的矩阵&#xff0c;矩阵中的每个元素 a i , j a_{i,j} ai,j​ 均为非负整数。游戏规则如下&#xff1a; 每次取数时须从每行各取走一…

学习笔记7——数据库基础知识以及mysql的查询语句

学习笔记系列开头惯例发布一些寻亲消息 链接&#xff1a;https://baobeihuijia.com/bbhj/contents/3/199913.html 数据库 三个概念区分 DB&#xff1a;数据库&#xff0c;存储数据的仓库&#xff0c;有组织的数据容器DBMS:数据库管理系统SQL&#xff1a;几乎所有的DBMS都支持…

人工智能_机器学习056_拉格朗日乘子法原理推导_公式由来详解_原理详解---人工智能工作笔记0096

https://blog.csdn.net/Soft_Po/article/details/118332454 这里有老师的一篇文章介绍拉格朗日乘子法的原理推导 结合老师的这篇文章我们来看一下详细的推导过程 可以看到上一节我们说,一个有条件的,函数,可以转换为一个,无条件的函数, 根据拉格朗日乘子法,可以创建出一个等…

python使用记录

1、VSCode添加多个python解释器 只需要将对应的python.exe的目录&#xff0c;添加到系统环境变量中即可&#xff0c;VSCode会自动识别及添加 2、pip 使用 pip常用命令和一些坑 查看已安装库的版本号 pip show 库名称 通过git 仓库安装第三方库 pip install git仓库地址