Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop Hbase区域请求不平衡_Hadoop_Hbase - Fatal编程技术网

Hadoop Hbase区域请求不平衡

Hadoop Hbase区域请求不平衡,hadoop,hbase,Hadoop,Hbase,我使用此TTL创建表: create "aos:for_test", {NAME => "data", COMPRESSION => "LZO"}, {NUMREGIONS => 240, SPLITALGO => "UniformSplit"} 并将一个大数据文件(接近14G)导入表中。尽管该表有240个区域,但客户端报告的错误如下: 错误:org.apache.hadoop.hbase.client.RetriesHaustedWithDetails异常:失败182

我使用此TTL创建表:

create "aos:for_test", {NAME => "data", COMPRESSION => "LZO"}, {NUMREGIONS => 240, SPLITALGO => "UniformSplit"}
并将一个大数据文件(接近14G)导入表中。尽管该表有240个区域,但客户端报告的错误如下:

错误:org.apache.hadoop.hbase.client.RetriesHaustedWithDetails异常:失败1822操作:RegionToBusYeException:1822次

我检查了hbase webUI,发现所有请求只命中一个区域。我不明白为什么写入请求不能平衡到所有区域

但是,如果我这样更改TTL:

create "aos:for_test", {NAME => "data", COMPRESSION => "LZO"}, {SPLITS => ['00000','00001','00002','00003','00004','00005','00006','00007','00008','00009','00009p','00009q','00009r','00009s']}

一切正常。

你有两种解决问题的方法

首先修改原始密钥,使其随机分布在各个区域。如果可以通过获取原始密钥的散列(例如md5与杂音散列函数)并使用由散列和旧密钥的值组成的新密钥来实现,如下所示

byte[]newKye=Bytes.add(hashOfOldKeyBytes,oldKeyBytes)

第二个varian,随机抽取1%的数据,并在此基础上计算密钥分布。然后根据这些数据定义一个区域分割。下面是在java语言上执行此操作的代码片段

byte[][] keys // key from 1% of data 

Collections.sort(splitList, new Comparator<byte[]>() {
        @Override
        public int compare(byte[] o1, byte[] o2) {
            return Bytes.compareTo(o1, o2);
        }
    });    

byte[][] splitKeys = new byte[numberOfRegions][];
for (int i = 0; i < numberOfRegions; i++) {
            splitKeys[i] = keys[(i + 1) * keys.length / (numberOfRegions + 1)];    
 }

 admin.createTable(tableDescriptor, splitKeys);
byte[][]键//从1%的数据中键入
Collections.sort(splitList,newcomparator(){
@凌驾
公共整数比较(字节[]o1,字节[]o2){
返回字节。比较(o1,o2);
}
});    
字节[][]拆分键=新字节[numberOfRegions][];
对于(int i=0;i
您有两种解决问题的方法

首先修改原始密钥,使其随机分布在各个区域。如果可以通过获取原始密钥的散列(例如md5与杂音散列函数)并使用由散列和旧密钥的值组成的新密钥来实现,如下所示

byte[]newKye=Bytes.add(hashOfOldKeyBytes,oldKeyBytes)

第二个varian,随机抽取1%的数据,并在此基础上计算密钥分布。然后根据这些数据定义一个区域分割。下面是在java语言上执行此操作的代码片段

byte[][] keys // key from 1% of data 

Collections.sort(splitList, new Comparator<byte[]>() {
        @Override
        public int compare(byte[] o1, byte[] o2) {
            return Bytes.compareTo(o1, o2);
        }
    });    

byte[][] splitKeys = new byte[numberOfRegions][];
for (int i = 0; i < numberOfRegions; i++) {
            splitKeys[i] = keys[(i + 1) * keys.length / (numberOfRegions + 1)];    
 }

 admin.createTable(tableDescriptor, splitKeys);
byte[][]键//从1%的数据中键入
Collections.sort(splitList,newcomparator(){
@凌驾
公共整数比较(字节[]o1,字节[]o2){
返回字节。比较(o1,o2);
}
});    
字节[][]拆分键=新字节[numberOfRegions][];
对于(int i=0;i
配置了什么区域分割策略?如果是ConstantSizeRegionSplitPolicy,则所有请求都将转到同一区域,直到达到阈值大小。我没有配置策略。我不知道默认值是什么。从HBase 0.94+,默认区域分割策略将增加到UpperBoundRegionSplitPolicy。请验证hbase-site.xml中的hbase.hregion.max.filesize属性值。有关更多详细信息,请参阅hbase.hregion.max.filesize为512M,memstore.flush.size为64M,我检查reginserver日志,其中包含许多信息,如“[B.defaultRpcServer.handler=33,queue=3,port=60020]regionserver.MemStoreFlusher:阻止datanodetest01.hadoop.ebj.elong.com上的更新,60020144524980310:全局memstore大小358.0 M大于阻止355.6 M”。另外,从用户界面上我可以看到,这个表一直在做主要的压缩。我已经阅读了文档。有一句话类似于“无论您选择何种方法来创建具有预先确定的区域数的表,您现在都可以开始将数据加载到表中,并看到负载分布在整个集群中。”尽管我仍然感到困惑…配置了什么区域分割策略?如果是ConstantSizeRegionSplitPolicy,则所有请求都将转到同一区域,直到达到阈值大小。我没有配置策略。我不知道默认值是什么。从HBase 0.94+,默认区域分割策略将增加到UpperBoundRegionSplitPolicy。请验证hbase-site.xml中的hbase.hregion.max.filesize属性值。有关更多详细信息,请参阅hbase.hregion.max.filesize为512M,memstore.flush.size为64M,我检查reginserver日志,其中包含许多信息,如“[B.defaultRpcServer.handler=33,queue=3,port=60020]regionserver.MemStoreFlusher:阻止datanodetest01.hadoop.ebj.elong.com上的更新,60020144524980310:全局memstore大小358.0 M大于阻止355.6 M”。另外,从用户界面上我可以看到,这个表一直在做主要的压缩。我已经阅读了文档。有一句话类似于“无论您选择何种方法来创建具有预先确定的区域数的表,您现在都可以开始将数据加载到表中,并看到负载分布在整个集群中。”尽管我仍然感到困惑。。。