6. Hbase region 管理

本文详细介绍了在 HBase 中进行表的创建、分割、合并、关闭、移动以及负载均衡等关键操作,包括如何在不同主机之间分配和调整 region 的状态,确保数据高效存储和访问。

实验环建

master: 192.168.1.160
slave1: 192.168.1.161
zookeeper版本: 3.4.6
hadoop版本: apache-hadoop-2.6.5
hbase版本: 1.2.6
主机操作系统: ubuntu-16.04

region 日常管理命令

region分割

  • 创建表

     hbase(main):068:0> create 'ns2:t1', NAME=>'f1'
     0 row(s) in 1.2780 seconds
     
     => Hbase::Table - ns2:t1
    
  • 分割表

     hbase(main):075:0> split 'ns2:t1', '00100'
    
  • 查看表元数据

     hbase(main):075:0> scan 'hbase:meta'
    

这里写图片描述
可以看出ns2:t1表被分割成两个region。

合并region

  • 查看表的元数据

     base(main):081:0> scan 'hbase:meta'
    

这里写图片描述
表ns2:t1有两个region,下面需要将其合并为一个region。

  • 合并region

     hbase(main):078:0> merge_region '53e22bebf0b02667f0c408bfdf68a931', 'b5c9f4b0eb33dadec81e44dab820b2ac'
     0 row(s) in 0.0560 seconds
    
  • 再次查看元数据

     hbase(main):081:0> scan 'hbase:meta'
    

这里写图片描述
可以看出两个region被合并成一个region。

关闭region

  • 新建一个有两个region的表

     hbase(main):099:0> create 'ns2:t1','f1' ,SPLITS=>['00100']
     0 row(s) in 1.2690 seconds
    
     => Hbase::Table - ns2:t1
    
     hbase(main):104:0> scan 'hbase:meta'
    

这里写图片描述

  • 分别给两个region中插入数据

      hbase(main):002:0> put 'ns2:t1', '00001' , 'f1:name', 'lisi'
      hbase(main):004:0> put 'ns2:t1', '00101' , 'f1:name', 'Bob'
      
      hbase(main):006:0> scan 'ns2:t1'
      ROW                          COLUMN+CELL                                                                    
      00001                       column=f1:name, timestamp=1532365712744, value=lisi                            
      00101                       column=f1:name, timestamp=1532365730917, value=Bob                             
     2 row(s) in 0.0270 seconds
    
  • 关闭其中一个region

    hbase(main):015:0> close_region ‘ns2:t1,1532364170492.96603f4c1b2df6dbe5d316820494d2e8.’
    0 row(s) in 0.0640 seconds

  • 访问刚插入的数据

     hbase(main):020:0> get 'ns2:t1', '00101'
     COLUMN                       CELL                                                                           
      f1:name                     timestamp=1532365730917, value=Bob                                             
     1 row(s) in 0.0100 seconds
      
      hbase(main):027:0> get 'ns2:t1', '00001'
     COLUMN                       CELL                                                                           
     ERROR: org.apache.hadoop.hbase.NotServingRegionException: Region ns2:t1,,1532364170492.96603f4c1b2df6dbe5d316820494d2e8. is not online on master,16020,1532358837870
    

可见没有被关闭的region里的数据还能正常访问。

region上线

  • 关闭的region上线
    基于ns2:t1表,让关闭的region重新上线。

      hbase(main):031:0> assign 'ns2:t1,,1532364170492.96603f4c1b2df6dbe5d316820494d2e8.'
     0 row(s) in 0.0590 seconds
    
  • 重新访问以前添加的数据

     hbase(main):036:0> scan 'ns2:t1'
     ROW                          COLUMN+CELL                                                                    
      00001                       column=f1:name, timestamp=1532365712744, value=lisi                            
      00101                       column=f1:name, timestamp=1532365730917, value=Bob                             
     2 row(s) in 0.0430 seconds
    

移动region

  • 新建一个有两个region的表

      hbase(main):046:0> create 'ns2:t2','f1' ,SPLITS=>['0010']
     0 row(s) in 1.2710 seconds
     
     => Hbase::Table - ns2:t2
    
  • 查看两个region在主机上的分布

      hbase(main):051:0> scan 'hbase:meta'
    

这里写图片描述
可以看出一个region位于slave1上,一个位于master上。

  • 移动region
    将位于master上的region移动到主机slave1上。

     hbase(main):055:0> move '574e8f43936dbb63342041bb370c4b93', 'slave1,16020,1532358841383'
     0 row(s) in 0.0280 seconds
    
  • 再次查看region在主机上的分布
    这里写图片描述

可以看出两个region都在slave1上了。

region负载均衡

hbase(main):064:0> balancer #触发region负载均衡
hbase(main):065:0> balance_switch true  #启用均衡算器
hbase(main):065:0> balance_switch false #关闭均衡算器
base/MasterData/oldWALs, maxLogs=10 2025-06-24 21:56:39,697 INFO [master/hadoop102:16000:becomeActiveMaster] wal.AbstractFSWAL: Closed WAL: AsyncFSWAL hadoop102%2C16000%2C1750773392926:(num 1750773399658) 2025-06-24 21:56:39,701 ERROR [master/hadoop102:16000:becomeActiveMaster] master.HMaster: Failed to become active master java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.hdfs.protocol.HdfsFileStatus, but class was expected at org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputHelper.createOutput(FanOutOneBlockAsyncDFSOutputHelper.java:535) at org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputHelper.access$400(FanOutOneBlockAsyncDFSOutputHelper.java:112) at org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputHelper$8.doCall(FanOutOneBlockAsyncDFSOutputHelper.java:615) at org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputHelper$8.doCall(FanOutOneBlockAsyncDFSOutputHelper.java:610) at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81) at org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputHelper.createOutput(FanOutOneBlockAsyncDFSOutputHelper.java:623) at org.apache.hadoop.hbase.io.asyncfs.AsyncFSOutputHelper.createOutput(AsyncFSOutputHelper.java:53) at org.apache.hadoop.hbase.regionserver.wal.AsyncProtobufLogWriter.initOutput(AsyncProtobufLogWriter.java:190) at org.apache.hadoop.hbase.regionserver.wal.AbstractProtobufLogWriter.init(AbstractProtobufLogWriter.java:160) at org.apache.hadoop.hbase.wal.AsyncFSWALProvider.createAsyncWriter(AsyncFSWALProvider.java:116) at org.apache.hadoop.hbase.regionserver.wal.AsyncFSWAL.createWriterInstance(AsyncFSWAL.java:719) at org.apache.hadoop.hbase.regionserver.wal.AsyncFSWAL.createWriterInstance(AsyncFSWAL.java:128) at org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.rollWriter(AbstractFSWAL.java:884) at org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.rollWriter(AbstractFSWAL.java:577) at org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.init(AbstractFSWAL.java:518) at org.apache.hadoop.hbase.wal.AbstractFSWALProvider.getWAL(AbstractFSWALProvider.java:160) at org.apache.hadoop.hbase.wal.AbstractFSWALProvider.getWAL(AbstractFSWALProvider.java:62) at org.apache.hadoop.hbase.wal.WALFactory.getWAL(WALFactory.java:295) at org.apache.hadoop.hbase.master.region.MasterRegion.createWAL(MasterRegion.java:200) at org.apache.hadoop.hbase.master.region.MasterRegion.open(MasterRegion.java:263) at org.apache.hadoop.hbase.master.region.MasterRegion.create(MasterRegion.java:344) at org.apache.hadoop.hbase.master.region.MasterRegionFactory.create(MasterRegionFactory.java:104) at org.apache.hadoop.hbase.master.HMaster.finishActiveMasterInitialization(HMaster.java:856) at org.apache.hadoop.hbase.master.HMaster.startActiveMasterManager(HMaster.java:2199) at org.apache.hadoop.hbase.master.HMaster.lambda$run$0(HMaster.java:529) at java.lang.Thread.run(Thread.java:750) 2025-06-24 21:56:39,702 ERROR [master/hadoop102:16000:becomeActiveMaster] master.HMaster: ***** ABORTING master hadoop102,16000,1750773392926: Unhandled exception. Starting shutdown. ***** java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.hdfs.protocol.HdfsFileStatus, but class was expected at org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputHelper.createOutput(FanOutOneBlockAsyncDFSOutputHelper.java:535) at org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputHelper.access$400(FanOutOneBlockAsyncDFSOutputHelper.java:112) at org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputHelper$8.doCall(FanOutOneBlockAsyncDFSOutputHelper.java:615) at org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputHelper$8.doCall(FanOutOneBlockAsyncDFSOutputHelper.java:610) at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81) at org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputHelper.createOutput(FanOutOneBlockAsyncDFSOutputHelper.java:623) at org.apache.hadoop.hbase.io.asyncfs.AsyncFSOutputHelper.createOutput(AsyncFSOutputHelper.java:53) at org.apache.hadoop.hbase.regionserver.wal.AsyncProtobufLogWriter.initOutput(AsyncProtobufLogWriter.java:190) at org.apache.hadoop.hbase.regionserver.wal.AbstractProtobufLogWriter.init(AbstractProtobufLogWriter.java:160) at org.apache.hadoop.hbase.wal.AsyncFSWALProvider.createAsyncWriter(AsyncFSWALProvider.java:116) at org.apache.hadoop.hbase.regionserver.wal.AsyncFSWAL.createWriterInstance(AsyncFSWAL.java:719) at org.apache.hadoop.hbase.regionserver.wal.AsyncFSWAL.createWriterInstance(AsyncFSWAL.java:128) at org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.rollWriter(AbstractFSWAL.java:884) at org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.rollWriter(AbstractFSWAL.java:577) at org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.init(AbstractFSWAL.java:518) at org.apache.hadoop.hbase.wal.AbstractFSWALProvider.getWAL(AbstractFSWALProvider.java:160) at org.apache.hadoop.hbase.wal.AbstractFSWALProvider.getWAL(AbstractFSWALProvider.java:62) at org.apache.hadoop.hbase.wal.WALFactory.getWAL(WALFactory.java:295) at org.apache.hadoop.hbase.master.region.MasterRegion.createWAL(MasterRegion.java:200) at org.apache.hadoop.hbase.master.region.MasterRegion.open(MasterRegion.java:263) at org.apache.hadoop.hbase.master.region.MasterRegion.create(MasterRegion.java:344) at org.apache.hadoop.hbase.master.region.MasterRegionFactory.create(MasterRegionFactory.java:104) at org.apache.hadoop.hbase.master.HMaster.finishActiveMasterInitialization(HMaster.java:856) at org.apache.hadoop.hbase.master.HMaster.startActiveMasterManager(HMaster.java:2199) at org.apache.hadoop.hbase.master.HMaster.lambda$run$0(HMaster.java:529) at java.lang.Thread.run(Thread.java:750) 2025-06-24 21:56:39,703 INFO [master/hadoop102:16000:becomeActiveMaster] regionserver.HRegionServer: ***** STOPPING region server 'hadoop102,16000,1750773392926' ***** 2025-06-24 21:56:39,703 INFO [master/hadoop102:16000:becomeActiveMaster] regionserver.HRegionServer: STOPPED: Stopped by master/hadoop102:16000:becomeActiveMaster 2025-06-24 21:56:40,607 INFO [master/hadoop102:16000] ipc.NettyRpcServer: Stopping server on /192.168.10.102:16000 2025-06-24 21:56:40,628 INFO [master/hadoop102:16000] regionserver.HRegionServer: Stopping infoServer 2025-06-24 21:56:40,652 INFO [master/hadoop102:16000] handler.ContextHandler: Stopped o.a.h.t.o.e.j.w.WebAppContext@45acdd11{master,/,null,STOPPED}{file:/opt/module/hbase-2.4.18/hbase-webapps/master} 2025-06-24 21:56:40,658 INFO [master/hadoop102:16000] server.AbstractConnector: Stopped ServerConnector@7efd28bd{HTTP/1.1, (http/1.1)}{0.0.0.0:16010} 2025-06-24 21:56:40,659 INFO [master/hadoop102:16000] server.session: node0 Stopped scavenging 2025-06-24 21:56:40,659 INFO [master/hadoop102:16000] handler.ContextHandler: Stopped o.a.h.t.o.e.j.s.ServletContextHandler@5f7da3d3{static,/static,file:///opt/module/hbase-2.4.18/hbase-webapps/static/,STOPPED} 2025-06-24 21:56:40,660 INFO [master/hadoop102:16000] handler.ContextHandler: Stopped o.a.h.t.o.e.j.s.ServletContextHandler@2b10ace9{logs,/logs,file:///opt/module/hbase-2.4.18/logs/,STOPPED} 2025-06-24 21:56:40,664 INFO [master/hadoop102:16000] regionserver.HRegionServer: aborting server hadoop102,16000,1750773392926 2025-06-24 21:56:40,665 INFO [master/hadoop102:16000] regionserver.HRegionServer: stopping server hadoop102,16000,1750773392926; all regions closed. 2025-06-24 21:56:40,665 INFO [master/hadoop102:16000] hbase.ChoreService: Chore service for: master/hadoop102:16000 had [] on shutdown 2025-06-24 21:56:40,672 WARN [master/hadoop102:16000] master.ActiveMasterManager: Failed get of master address: java.io.IOException: Can't get master address from ZooKeeper; znode data == null 2025-06-24 21:56:40,782 INFO [ReadOnlyZKClient-hadoop102:2181,hadoop103:2181,hadoop104:2181@0x1a9293ba] zookeeper.ZooKeeper: Session: 0x20000754c8c0002 closed 2025-06-24 21:56:40,782 INFO [ReadOnlyZKClient-hadoop102:2181,hadoop103:2181,hadoop104:2181@0x1a9293ba-EventThread] zookeeper.ClientCnxn: EventThread shut down for session: 0x20000754c8c0002 2025-06-24 21:56:40,797 INFO [master/hadoop102:16000] zookeeper.ZooKeeper: Session: 0x100007708c00000 closed 2025-06-24 21:56:40,797 INFO [main-EventThread] zookeeper.ClientCnxn: EventThread shut down for session: 0x100007708c00000 2025-06-24 21:56:40,797 INFO [master/hadoop102:16000] regionserver.HRegionServer: Exiting; stopping=hadoop102,16000,1750773392926; zookeeper connection closed. 2025-06-24 21:56:40,798 ERROR [main] master.HMasterCommandLine: Master exiting java.lang.RuntimeException: HMaster Aborted at org.apache.hadoop.hbase.master.HMasterCommandLine.startMaster(HMasterCommandLine.java:254) at org.apache.hadoop.hbase.master.HMasterCommandLine.run(HMasterCommandLine.java:145) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:82) at org.apache.hadoop.hbase.util.ServerCommandLine.doMain(ServerCommandLine.java:140) at org.apache.hadoop.hbase.master.HMaster.main(HMaster.java:2969) [manager1@hadoop102 logs]$
06-25
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值