hbase 0.96 java api_HBase(九) HBase JAVA API - 运维API

news/2024/9/17 15:48:02

运维API

监控集群状态

Configuration conf = HBaseConfiguration.create();

HBaseAdmin admin = new HBaseAdmin(conf);

ClusterStatus status = admin.getClusterStatus();

System.out.println("Cluster Status:\n--------------");

// 集群版本

System.out.println("HBase Version: " + status.getHBaseVersion());

// ClusterStatus实例的版本号,通过序列化的方式通过RPC传输

System.out.println("Version: " + status.getVersion());

//根目录下hbase.id存的集群id,这个id是集群第一次启动时通过UUID生成的

System.out.println("Cluster ID: " + status.getClusterId());

// 返回master的ServerName实例,用法类同下面rs的ServerName

System.out.println("Master: " + status.getMaster());

System.out.println("No. Backup Masters: " + status.getBackupMastersSize());

System.out.println("Backup Masters: " + status.getBackupMasters());

// 当前正常的region服务器数量,不包括dead server

System.out.println("No. Live Servers: " + status.getServersSize());

// 当前正常的region服务器列表,信息包括服务器名、端口、启动时间戳

System.out.println("Servers: " + status.getServers());

// 下面两个类同

System.out.println("No. Dead Servers: " + status.getDeadServers());

System.out.println("Dead Servers: " + status.getDeadServerNames());

// 集群中region的总数量

System.out.println("No. Regions: " + status.getRegionsCount());

// 当前集群正在进行的region事务列表,包括移动、上线、下线;key是编码后的region名,value是RegionState实例

System.out.println("Regions in Transition: " + status.getRegionsInTransition());

// 集群请求TPS

System.out.println("No. Requests: " + status.getRequestsCount());

// 平均每台服务器上线的region数量

System.out.println("Avg Load: " + status.getAverageLoad());

System.out.println("Master Coprocessors: " + Arrays.asList(status.getMasterCoprocessors()));

System.out.println("\nServer Info:\n--------------");

for (ServerName server : status.getServers()) {

// 返回域名,如果没有返回ip

System.out.println("Hostname: " + server.getHostname());

// hostname:rpc-port

System.out.println("Host and Port: " + server.getHostAndPort());

// hostname,rpc-port,start-code

System.out.println("Server Name: " + server.getServerName());

System.out.println("RPC Port: " + server.getPort());

// 启动时的System.currentTimeMillis()

System.out.println("Start Code: " + server.getStartcode());

// 每个region服务器的负载情况,包括server中管理的region信息

HServerLoad load = status.getLoad(server);

System.out.println("\nServer Load:\n--------------");

// 等于getNumberOfRegions

System.out.println("Load: " + load.getLoad());

// JVM信息

System.out.println("Max Heap (MB): " + load.getMaxHeapMB());

System.out.println("Used Heap (MB): " + load.getUsedHeapMB());

// 当前服务器已用写缓存的大小,包括服务器上的所有server

System.out.println("Memstore Size (MB): " + load.getMemStoreSizeInMB());

// 仅统计上线的region

System.out.println("No. Regions: " + load.getNumberOfRegions());

// 当前周期内的TPS,包括所有API请求,如get/put/incr/delete等,周期结束后清零

// 周期配置由hbase.regionserver.msginterval配置

System.out.println("No. Requests: " + load.getNumberOfRequests());

System.out.println("Total No. Requests: " + load.getTotalNumberOfRequests());

// 下面三个都是包括server上所有region的整体情况

System.out.println("No. Storefiles: " + load.getStorefiles());

System.out.println("Storefile Size (MB): " + load.getStorefileSizeInMB());

System.out.println("Storefile Index Size (MB): " + load.getStorefileIndexSizeInMB());

System.out.println("Coprocessors2: " + Arrays.asList(load.getRsCoprocessors()));

System.out.println("\nRegion Load:\n--------------");

for (Map.Entryentry : load.getRegionsLoad().entrySet()) {

System.out.println("Region: " + Bytes.toStringBinary(entry.getKey()));

RegionLoad regionLoad = entry.getValue();

System.out.println("Name: " + Bytes.toStringBinary(regionLoad.getName()));

System.out.println("Name (as String): " + regionLoad.getNameAsString());

// TPS

System.out.println("No. Requests: " + regionLoad.getRequestsCount());

// QPS

System.out.println("No. Read Requests: " + regionLoad.getReadRequestsCount());

// WPS

System.out.println("No. Write Requests: " + regionLoad.getWriteRequestsCount());

// 当前region的列族数量

System.out.println("No. Stores: " + regionLoad.getStores());

// region的store file数量

System.out.println("No. Storefiles: " + regionLoad.getStorefiles());

// region总占用

System.out.println("Storefile Size (MB): " + regionLoad.getStorefileSizeMB());

System.out.println("Storefile Index Size (MB): " + regionLoad.getStorefileIndexSizeMB());

System.out.println("Memstore Size (MB): " + regionLoad.getMemStoreSizeMB());

// 当前region的root-level indexes

System.out.println("Root Index Size: " + regionLoad.getRootIndexSizeKB());

System.out.println("Total Bloom Size: " + regionLoad.getTotalStaticBloomSizeKB());

System.out.println("Total Index Size: " + regionLoad.getTotalStaticIndexSizeKB());

// 当前compaction中已compacted的kvs数

System.out.println("Current Compacted Cells: " + regionLoad.getCurrentCompactedKVs());

// 当前compaction的总kvs数

System.out.println("Total Compacting Cells: " + regionLoad.getTotalCompactingKVs());

System.out.println();

}

}

admin.close();

集群管理

Configuration conf = HBaseConfiguration.create();

// 校验配置文件是否可以通信,如果不通会抛出异常

HBaseAdmin.checkHBaseAvailable(conf);

HBaseAdmin admin = new HBaseAdmin(conf);

HTable table = new HTable(conf, "t1");

HRegionLocation hrl = table.getRegionLocation("r1");

System.out.println(hrl.getHostnamePort());

HRegionInfo hri = hrl.getRegionInfo();

System.out.println(hri.getRegionNameAsString());

// out: 't1,,1438153572263.7c01637130a14cb696483c9b70788ee6.'

byte[] regionName = hri.getRegionName();

/*

* region下线,之后会随机再上线,可能在本机或者其他rs上

* 第二个参数表示是否在zk中强制标记下线 执行此条命令后,

* shell中执行get '.META.','t1,,1438153572263.7c01637130a14cb696483c9b70788ee6.'

* 会发现info:server和info:serverstartcode的timestamp变化了, 值可能变化,因为是随机的再上线

*/

admin.unassign(regionName, true);

Thread.sleep(2000);

// region上线

admin.assign(regionName);

// 这两个sleep是为了让这两次重新分配能够生效,否则下面closeregion会报region非上线的错误,但sleep不是好办法

Thread.sleep(2000);

admin.flush("t1");

// 下面两个操作是异步的,因为合并可能会很耗时,可以传table或region

admin.compact(regionName);

admin.majorCompact(regionName);

// 表或region拆分,第二个参数是切分点,如果不为空则按这个行健切分,但必须保证行健合法且大于起始行健,否则被忽略

// 如果第二个参数空,则hbase自动选择切分点。此操作也是异步的

admin.split(regionName);

// 可以控制region在哪个特定的服务器上线,如果第二个参数null,则随机分配

admin.move(hri.getEncodedNameAsBytes(), null);

// 负载均衡开关,第二个参数如果是true,会等待到下一次balancer执行

admin.setBalancerRunning(true, true);

// 立刻执行负载均衡

admin.balancer();

/*

* region下线,如果第二个参数不为空,会绕过master,直接下线,

* 尽管RegionServer关闭了这个Region,但是,在Master侧,还以为该Region是在该RegionServer上面打开的。

* 假如,在执行Balance的时候,Master计算出恰好要转移这个Region,那么,这个Region将无法被关闭,本次转移操作将无法完成

* 所以尽量不要执行此操作,更不要绕过master执行此操作 执行此条命令后,shell中执行get

* '.META.','t1,,1438153572263.7c01637130a14cb696483c9b70788ee6.'

* 会发现info:server和info:serverstartcode的时间戳和值都变了(也是随机的)

*/

admin.closeRegion(regionName, null);

// 下面这三个方法是瞬时方法,不可逆的过程,分别关闭RS,MS,CLUSTER

// admin.stopRegionServer(hrl.getHostnamePort());

// admin.stopMaster();

// admin.shutdown();

// 生产代码这里要处理异常

table.close();

admin.close();

作者 | 林钰鑫

转载请注明出处:华为云博客 https://portal.hwclouds.com/blogs


http://lihuaxi.xjx100.cn/news/271727.html

相关文章

IntelliJ IDEA 2020.2.4款 神级超级牛逼插件推荐

满满的都是干货 所有插件都是在 ctrlalts 里的plugins 里进行搜索安装1、CodeGlance 代码迷你缩放图插件2、 Codota代码提示工具,扫描你的代码后,根据你的敲击完美提示Codota基于数百万个开源Java程序和您的上下文来完成代码行,从而帮助您以…

ubuntu升级python_ubuntu升级python版本

运行发现错误: AttributeError: module object has no attribute OrderedDict google发现是因为python版本老了的原因(python 2.7之后带有OrderedDict) # python -V Python 2.6.6 # curl -kL https://raw.github.com/utahta/pythonbrew/master/pythonbrew-install |…

支付宝二面:Mybatis接口Mapper内的方法为啥不能重载吗?我直接懵逼了...

点击上方“方志朋”,选择“设为星标”回复”666“获取新整理的面试文章作者:祖大俊来源:my.oschina.net/zudajun/blog/666223动态代理的功能:通过拦截器方法回调,对目标target方法进行增强。言外之意就是为了增强目标t…

AI算法实现武侠小说中的“绝世武功”——动作残影特效!

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达‍‍‍‍‍‍‍二、创作背景“飞雪连天射白鹿,笑书神侠倚碧鸳”,相信很多90后知道这副对联的含义,这是武侠小说作家金庸先生的作品合集…

使用大batch优化深度学习:训练BERT仅需76分钟 | ICLR 2020

作者 | Yang You, Jing Li等译者 | 刘畅在海量数据集上训练大型深度神经网络,是非常具有挑战性的。最近,有许多研究均使用大batch随机优化方法来解决此问题。在该研究领域中,目前最杰出的算法是LARS,它通过采用分层自适应学习率&a…

【算法】弗洛伊德(Floyd)算法

这个算法主要要弄懂三个循环的顺序关系。 弗洛伊德(Floyd)算法过程:1、用D[v][w]记录每一对顶点的最短距离。2、依次扫描每一个点,并以其为基点再遍历所有每一对顶点D[][]的值,看看是否可用过该…

mysql出现提示错误10061的解决方法

今天把mysql数据库拷贝到另外一台机上,结果连不上,报“Cant connect to MySQL server on localhost (10061)“错误到网上search,发现一篇文章很好,两种方法都能解决此问题1、删除my.ini(在C:\windows\下)&a…

李飞飞提出深度进化强化学习新框架:创建具身智能体学会动物进化法则

点击上方“视学算法”,选择加"星标"或“置顶” 重磅干货,第一时间送达转自 | 新智元来源 | 外媒编辑 | Yaxin, LQ6亿多年的进化中,动物表现出显著的具身智能,利用进化学习复杂的任务。研究人员称,AI智能体也…