Hbase-region迁移

HbaseRegin迁移

1为什么要做region迁移

在生产上遇到有比较大的Region都是运行在同一个RegionSever上,有些RegionSever上的Requests比较少,明显的出现读请求不均衡;这个时候我们可以手动的移动Region到负载比较低的RegionSever上面,让负载高的regionServer减轻负载,然负载低的regionService增加负载以达到hbase集群资源的充分利用。

2.怎么做region迁移

1) 先查看hbase ui对应表的各个region的读写请求情况和所在regionserver的位置

 

2)发现哪个region的读写请求很高,以及该region所在的regionServce读写请求很高,然后再看哪个regionServcer的读写请求很低,我们就将高请求的regionServce上的region迁移到低请求上去。

 

3)演示将第一个region从s2上迁移到s1。

1) 代码:

//调用自己封装好的move方法

public static void move(String s1, String s2) throws IOException {
    
//1.创建admin对象
    HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();

//调用admin.move方法。
    admin.move(Bytes.toBytes(s1), Bytes.toBytes(s2));
   
//2.判断

    admin.close();
 

 

 

解释admin.move方法


/**
 * Move the region <code>r</code> to <code>dest</code>.
 *
 * @param
encodedRegionName The encoded region name; i.e. the hash that makes up the region name
 * suffix: e.g. if regionname is
 * <code>TestTable,0094429456,1289497600452.527db22f95c8a9e0116f0cc13c680396.</code>,
 * then the encoded region name is: <code>527db22f95c8a9e0116f0cc13c680396</code>.
 * @param
destServerName The servername of the destination regionserver.  If passed the empty byte
 * array we'll assign to a random server.  A server name is made of host, port and startcode.
 * Here is an example: <code> host187.example.com,60020,1289493121758</code>
 * @throws IOException if we can't find a region named
 * <code>encodedRegionName</code>
 */

void move(byte[] encodedRegionName, byte[] destServerName) throws IOException;

 

第一个参数:

1.看上图的名字

 

t_rsd_amber_device,,1563189870092.7a443f4f5fb53e711f08f5c2ab42464a.

encodedRegionName 7a443f4f5fb53e711f08f5c2ab42464a

destServerName机器名,端口号,一串随机数字

4)查看结果

 

5)使用hbaseshell 同样可以做region迁移,,两个参数就是以上方法的参数

move '7f44b788a070ed8729d5f7f2df145e70','dn3.tysci.com,60020,1456733389581

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页