Hadoop 如何在hbase中预拆分
我将数据存储在具有5个区域服务器的hbase中。我正在使用url的md5哈希作为我的行键。目前,所有数据仅存储在一个区域服务器中。所以我想预先分割区域,这样数据将统一地分布在所有区域服务器上,这样数据将统一地分布在每个区域服务器上。Hadoop 如何在hbase中预拆分,hadoop,hbase,Hadoop,Hbase,我将数据存储在具有5个区域服务器的hbase中。我正在使用url的md5哈希作为我的行键。目前,所有数据仅存储在一个区域服务器中。所以我想预先分割区域,这样数据将统一地分布在所有区域服务器上,这样数据将统一地分布在每个区域服务器上。 我想将数据拆分为行键的第一个字符。因为第一个字符是从0到f(16个字符)。与rowkey从0到3的数据一样,数据将进入第1个区域服务器,第2个区域服务器为3-6,第3个区域服务器为6-9,第4个区域服务器为a-d,第5个区域服务器为d-f。如何操作?您可以在创建表时
我想将数据拆分为行键的第一个字符。因为第一个字符是从0到f(16个字符)。与rowkey从0到3的数据一样,数据将进入第1个区域服务器,第2个区域服务器为3-6,第3个区域服务器为6-9,第4个区域服务器为a-d,第5个区域服务器为d-f。如何操作?您可以在创建表时提供SPLITS属性
create 'tableName', 'cf1', {SPLITS => ['3','6','9','d']}
4个分割点将生成5个区域
请注意,HBase不能保证区域服务器之间的分布100%均匀,一个区域服务器可能承载同一个表中的多个区域
有关其工作原理的更多信息,请参阅:
公共列表平衡群集(映射群集状态)
根据指定的映射生成全局负载平衡计划
将服务器信息复制到每台服务器负载最多的区域。这个
负载平衡不变量是所有服务器都在
每个服务器的平均区域数。如果平均值是整数
数量,所有服务器将平衡到平均水平。否则,所有
服务器将具有地板(平均)或天花板(平均)区域。
HBASE-3609使用Guava的MinMaxPriorityQueue so对区域进行建模
我们可以从队列的两端获取。一开始,我们
检查主服务器是否发现了空区域服务器。
如果是这样的话,我们交替地从图像的头部/尾部选择新的/旧的区域
分别是RegionTomove。这种交替避免了集群
新发现的区域服务器上的区域。否则,我们选择
来自区域负责人Tomove的新区域。另一个改进来自
HBASE-3609是我们从regionsToMove到Underload分配的区域
以循环方式运行服务器。以前是一台负载不足的服务器
将在我们移动到下一个负载不足的服务器之前填充,
导致年轻地区的聚集。最后,我们随机洗牌
服务器负载不足,因此它们可以相对地接收卸载的区域
在对balanceCluster()的调用中均匀分布。该算法目前正在运行
实施如下:
如果您已经存储了所有数据,我建议您使用手动将一些区域移动到另一个区域服务器 移动一个区域。(可选)指定我们选择的目标regionserver 随便一个。注意:您传递的是编码的区域名称,而不是区域名称 因此,此命令与其他命令略有不同。编码的 区域名称是区域名称上的哈希后缀:例如,如果区域 名字是 测试表,00944294561289497600452.527db22f95c8a9e0116f0cc13c680396。 然后,编码的区域名称部分是 527db22f95c8a9e0116f0cc13c680396服务器名是其主机,端口号为plus startcode。例如:host187.example.com,600201289493121758
如果使用ApachePhoenix在HBase中创建表,可以在CREATE语句中指定SALT_bucket。该表将被划分为与bucket所提到的一样多的区域。Phoenix计算rowkey的散列(最有可能是数值散列%SALT_bucket),并将列单元格分配给适当的区域
CREATE TABLE IF NOT EXISTS us_population (
state CHAR(2) NOT NULL,
city VARCHAR NOT NULL,
population BIGINT
CONSTRAINT my_pk PRIMARY KEY (state, city)) SALT_BUCKETS=3;
这将把表预拆分为3个区域
或者,HBase默认UI允许您相应地分割区域。
但如果我在创建表时进行预拆分,则可以保证它将在不同的区域服务器中分别创建5个区域。对吗?它将创建5个区域,但是LoadBalancer将根据每个regionserver的负载(分配的区域数)来分配它们,一个regionserver可能会获得tw
hbase> move ‘ENCODED_REGIONNAME’, ‘SERVER_NAME’
CREATE TABLE IF NOT EXISTS us_population (
state CHAR(2) NOT NULL,
city VARCHAR NOT NULL,
population BIGINT
CONSTRAINT my_pk PRIMARY KEY (state, city)) SALT_BUCKETS=3;