Springboot+Hbase获取regions信息并上报到metrics接口中
【代码】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>
<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();
}
public void exposeregionmetrics() throws ioexception {
list<servername> servernames = hbaseutil.listallservername();
for (tablename curtablename : tablenames) {
list<regioninfo> curregions = hbaseutil.listregionsinfo(curtablename);
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);
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;
@scheduled(cron = "${scheduled.cron.expr}")
public void task() {
try {
hbaseservice.exposeregionmetrics();
} catch (exception e) {
log.error("==============hbase exporter======error=================");
e.printstacktrace();
}
}
}
相关文章:
-
-
-
-
-
Hadoop单机安装配置图文保姆级教程—全网最全一、安装前需要1.VMware安装配置:2.相关Hadoop软件包下载3.Ubuntu镜像下载二、Ubuntu系统安装前提声明:已安…
-
DataSophon也是个类似的管理平台,只不过与智子不同的是,智子的目的是锁死人类的基础科学阻碍人类技术爆炸,而DataSophon是致力于自动化监控、运维、管理大数据基础组件和…
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论