当前位置: 代码网 > it编程>编程语言>Java > Springboot+Hbase获取regions信息并上报到metrics接口中

Springboot+Hbase获取regions信息并上报到metrics接口中

2024年08月01日 Java 我要评论
【代码】Springboot+Hbase获取regions信息并上报到metrics接口中。
1. 添加hbase和micrometer依赖
<dependencies>
  <dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter</artifactid>
  </dependency>
	
  <dependency>
    <groupid>org.apache.hbase</groupid>
    <artifactid>hbase-client</artifactid>
  </dependency>
  <dependency>
    <groupid>io.micrometer</groupid>
    <artifactid>micrometer-core</artifactid>
    <version>1.9.0</version>
  </dependency>
  <dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-actuator</artifactid>
    <exclusions>
        <exclusion>
            <artifactid>micrometer-core</artifactid>
            <groupid>io.micrometer</groupid>
        </exclusion>
    </exclusions>
 </dependency>
 <dependency>
    <groupid>io.micrometer</groupid>
    <artifactid>micrometer-registry-prometheus</artifactid>
    <version>1.9.0</version>
 </dependency>
</dependencies>
2. 新增hbase配置文件
<configuration>
    <!--
    check out the properties here
    https://github.com/apache/hbase/blob/master/hbase-server/src/test/resources/hbase-site.xml
    -->
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>manager01,manager02,manager03</value>
    </property>
    <property>
        <name>hbase.zookeeper.property.clientport</name>
        <value>2181</value>
    </property>
    <property>
        <name>base.client.scanner.caching</name>
        <value>1000</value>
    </property>
    <property>
        <name>zookeeper.session.timeout</name>
        <value>60000</value>
    </property>

    <property>
        <name>zookeeper.znode.parent</name>
        <value>/hbase-unsecure</value>
    </property>

</configuration>
3. 编写服务获取hbase admin客户端
@slf4j
@data
public class hbaseutil implements closeable {

    private static hbaseutil hbaseutil = null;

    private configuration configuration = null;
    private connection connection = null;
    private admin admin = null;

 	@override
    public void close() throws ioexception {
        connection.close();
    }

    private hbaseutil(configuration configuration) throws ioexception, serviceexception {
        this.configuration = configuration;
        hbaseadmin.available(this.configuration);
        this.connection = connectionfactory.createconnection(configuration);
        this.admin = connection.getadmin();
    }

    public static hbaseutil getinstance() {
        if (hbaseutil == null) {
            try {
                configuration configuration = hbaseconfiguration.create();
        string path = hbaseutil.class
                .getclassloader()
                .getresource("config/hbase-site.xml")
                .getpath();
        system.out.println(path);
        configuration.addresource(new org.apache.hadoop.fs.path(path));
                hbaseutil = new hbaseutil(configuration);
            } catch (ioexception | serviceexception ex) {
                ex.printstacktrace();
            }
        }
        return hbaseutil;
    }
    public list<servername> listallservername() throws ioexception {
        list<servername> servernames = new arraylist<>();
        servernames.addall(admin.getclusterstatus().getservers());
        log.info("==========servernames==============" + servernames.size());
        return servernames;
    }
	
	  public list<regioninfo> listregionsinfo(servername servername) throws ioexception {
        return admin.getregions(servername);
    }
   .......
 }
 
4. 获取regions信息并上报
@service
@slf4j
public class hbaseservice {

    private static hbaseutil hbaseutil;

    @autowired
    private meterregistry meterregistry;


    public hbaseservice() {
        hbaseutil = hbaseutil.getinstance();
    }

    /**
     * 处理regions指标数据
     *
     * @throws exception
     */
    public void exposeregionmetrics() throws ioexception {
        list<servername> servernames = hbaseutil.listallservername();
        for (tablename curtablename : tablenames) {
            list<regioninfo> curregions = hbaseutil.listregionsinfo(curtablename);
            // table中regions分区数量指标
            hbaseregionnumsmetrics hbaseregionnumsmetrics = hbaseregionnumsmetrics.builder()
                    .namespace(curtablename.getnamespaceasstring())
                    .tablename(curtablename.getnameasstring())
                    .nums(curregions.size())
                    .build();
            numsmetrics.add(hbaseregionnumsmetrics);

            list<regionmetrics> regionmetricslist = hbaseutil.listregionmetrics(curtablename, servernames);
            regionmetricslist.foreach(r -> {
                // 文件数量指标
                hbaseregionstorecountmetrics curstorecountmetrics = hbaseregionstorecountmetrics.builder()
                        .regionsname(r.getnameasstring())
                        .storecount((long) r.getstorecount())
                        .tablename(curtablename.getnameasstring()).build();
                storecountmetrics.add(curstorecountmetrics);
                // 总文件大小指标 mb
                hbaseregionstoresizemetrics curstoresizemetrics = hbaseregionstoresizemetrics.builder()
                        .regionsname(r.getnameasstring())
                        .storesize(r.getstorefilesize().getlongvalue())
                        .tablename(curtablename.getnameasstring()).build();
                storesizemetrics.add(curstoresizemetrics);
            });

        }
        for (hbaseregionnumsmetrics num : numsmetrics) {
            gauge.builder(hbaseregionnumsmetrics.metrics_name, num::getnums).tags(num.gettags()).register(meterregistry);
        }
       ......
    }
5. 启动定时任务
@slf4j
@component
@enablescheduling
public class hbasemetricsjob {

    @autowired
    private hbaseservice hbaseservice;

    /**
     * @todo 基础任务
     */
    @scheduled(cron = "${scheduled.cron.expr}")
    public void task() {
        try {
            hbaseservice.exposeregionmetrics();
        } catch (exception e) {
            log.error("==============hbase exporter======error=================");
            e.printstacktrace();
        }
    }
}
(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com