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;)V
    at 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,启动成功

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TextToSpeech类学习和简单封装

TextToSpeech类简单学习封装 前言一、TTS是什么&#xff1f;二、TextToSpeech简单使用1.官方介绍2.简单使用 三、TextToSpeech简单封装总结 前言 业务涉及到对接TTS相关&#xff0c;所以简单学习下如何使用。 一、TTS是什么&#xff1f; TextToSpeech简称为TTS&#xff0c;即…

[网鼎杯 2020 青龙组]singal 1

前言 在主函数中找到了一个vm的译码器&#xff0c;译码器主要是解释传入的opcode&#xff0c;然后对我们输入的字符操作&#xff0c;这里我们发现他是单字节比较的&#xff0c;方法很多可以使用单字节映射&#xff0c;也可以是使用符号化执行&#xff0c;当然也可以硬着头皮去…

软件测试计划书

测试计划书 1.测试参考文档和测试提交文档 2.测试进度计划 3.测试资源 4.系统风险、优先级 5.测试策略 6.缺陷管理 7.测试停止标准 软件开发全文档下载进入主页。

Linux部署elasticsearch集群

文章目录 一、集群规划二、安装前准备(所有节点操作)创建数据目录修改系统配置文件/etc/sysctl.conf创建用户组设置limits.conf 三、初始化配置(在节点1上操作)下载安装包解压安装包修改jvm.options文件下配置的所占内存修改集群配置文件elasticsearch.yml将安装包传到另外两个…

JavaFramework JDK Version Test

测试JDK8 JDK17编译包 当前环境JDK8 CASE 1&#xff1a; /*** * author ZengWenFeng* email 117791303QQ.com* mobile 13805029595* date 2023-08-07*/ package zwf;import a.T; import ce.pub.util.GUID;/*** 测试高版本JDK编译JAR&#xff0c;低版本错误** author ZengWenF…

电梯导航的小练习

目录 css代码 html代码 js代码 完整代码 效果图 需求&#xff1a;点击某个模块&#xff0c;显示对应内容 css代码 <style>*{padding: 0;margin: 0;list-style: none;}ul{display: flex;justify-content: center;position: fixed;top: 0;left: 20%;}ul>li{text-…

对换数组的维度numpy.transpose()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 对换数组的维度 numpy.transpose() 请以下代码执行print(np.transpose(a))后输出的结果是&#xff1f; import numpy as np a np.array([[0, 1], [2, 3]]) b np.array([[0, 1], [2, 3], […

Tomcat 漏洞修复

1、去掉请求响应中Server信息 修复方法&#xff1a; 在Tomcat的配置文件的Connector中增加 server" " &#xff0c;server 的值可以改成你任意想返回的值。

Gee教程5.中间件

鉴权认证、日志记录等这些保障和支持系统业务属于全系统的业务&#xff0c;和具体的系统业务没有关联&#xff0c;对于系统中的很多业务都适用。 因此&#xff0c;在业务开发过程中&#xff0c;为了更好的梳理系统架构&#xff0c;可以将上述描述所涉及的一些通用业务单独抽离…

蓝桥杯第198题 人物相关性分析 C++ 模拟 字符串 双指针

题目 思路和解题方法 程序首先定义了一个函数check&#xff0c;用于判断一个字符是否为字母。接下来&#xff0c;程序读取输入的整数k和一行字符串str。定义了两个空的向量a和b&#xff0c;用于存储满足条件的子串的起始位置。使用for循环遍历字符串str的每个字符&#xff0c;检…

Python--使用布林线设计均值回归策略

在本教程中,我们将探讨均值回归的概念以及如何使用 Python 中的布林线设计交易策略。均值回归是一种流行的交易策略,它基于这样的假设:随着时间的推移,资产价格往往会恢复到历史平均水平。布林线 (Bollinger Bands) 由约翰布林格 (John Bollinger) 开发,是一种技术分析工具…

喜讯 | Circulation(IF:37.8)ChIP-seq+RNA-seq助力解析USP28在糖尿病性心脏病的调控机制

2023年11月23日&#xff0c;国际知名期刊Circulation&#xff08;IF:37.8&&#xff09;在线发表了武汉大学人民医院心内科唐其柱教授团队题为 ” USP28 Serves as a Key Suppressor of Mitochondrial Morphofunctional Defects and Cardiac Dysfunction in the Diabetic He…

OSI七层模型与TCP/IP四层模型

一、OSI七层模型简述 OSI 模型的七层是什么&#xff1f;在 OSI 模型中如何进行通信&#xff1f;OSI 模型有哪些替代方案&#xff1f; TCP/IP 模型关于专有协议和模型的说明 二、七层模型详解&#xff08;DNS、CDN、OSI&#xff09; 状态码DNS nslookup命令 CDN whois命令 …

熬夜会秃头——beta冲刺Day4

这个作业属于哪个课程2301-计算机学院-软件工程社区-CSDN社区云这个作业要求在哪里团队作业—beta冲刺事后诸葛亮-CSDN社区这个作业的目标记录beta冲刺Day4团队名称熬夜会秃头团队置顶集合随笔链接熬夜会秃头——Beta冲刺置顶随笔-CSDN社区 一、团队成员会议总结 1、成员工作进…

计算机网络——数据链路层-封装成帧(帧定界、透明传输-字节填充,比特填充、MTU)

目录 介绍 帧定界 PPP帧 以太网帧 透明传输 字节填充&#xff08;字符填充&#xff09; 比特填充 比特填充习题 MTU 介绍 所谓封装成帧&#xff0c;就是指数据链路层给上层交付下来的协议数据单元添加帧头和帧尾&#xff0c;使之成为帧。 例如下图所示&#xff1a; …

【LeetCode刷题笔记】102. 二叉树的层序遍历

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 更多算法知识专栏&#xff1a;算法分析&#x1f525; 给大家跳段街舞感谢…

NRF24L01 无线收发模块与 Arduino 的应用

NRF24L01 是一款常用的无线收发模块&#xff0c;与 Arduino 兼容性良好&#xff0c;可以用于实现无线通信和数据传输。本文将介绍如何将 NRF24L01 模块与 Arduino 配合使用&#xff0c;包括硬件的连接和配置&#xff0c;以及相应的代码示例。 一、引言 NRF24L01 是一款基于 2.…

图解「差分」入门(“前缀和“ 到 “差分“ 丝滑过渡)

题目描述 这是 LeetCode 上的 「1094. 拼车」 &#xff0c;难度为 「中等」。 Tag : 「差分」、「前缀和」 车上最初有 capacity 个空座位&#xff0c;车只能向一个方向行驶&#xff08;不允许掉头或改变方向&#xff09;。 给定整数 capacity 和一个数组 trips, 表示第 i 次旅…

HarmonyOs 4 (三) ArkTS语言

目录 一 认识ArkTs语言1.1 ArkTs1.2 基本结构 二 基本语法2.1 声明式UI2.1.1 创建组件2.1.1.1 无参数2.1.1.2 有参数2.1.1.3 组件样式2.1.1.4 组件方法2.1.1.5 组件嵌套 2.1.2 自定义组件2.1.2.1 基本结构2.1.2.2 成员函数/变量2.1.2.3 自定义组件的参数规定2.1.2.4 Build函数2…

最新版dede织梦CMS采集侠工具

在网络时代&#xff0c;拥有一个充实而有吸引力的网站是吸引访客、提高流量的关键。织梦CMS一直以其简单易用、灵活性强而备受欢迎。而如何让网站内容更富有吸引力&#xff0c;如何在激烈的网络竞争中脱颖而出&#xff1f;新版织梦采集侠以及147SEO插件或许是你的得力助手。 新…