hbase:所有数据都存储在一个区域中

e4eetjau  于 2021-06-08  发布在  Hbase
关注(0)|答案(1)|浏览(622)

我正在使用以下命令将hfiles导入hbase:

hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles -Dcreate.table=no /user/myuser/map_data/hfiles my_table

当我刚刚查看hbase主ui时,我看到所有数据似乎都存储在一个区域:

hfiles是由spark应用程序使用以下命令创建的:

JavaPairRDD<String, MyEntry> myPairRDD = ...
myPairRDD .repartitionAndSortWithinPartitions(new HashPartitioner(hbaseRegions));

为什么数据没有划分到所有区域?

trnvg8h3

trnvg8h31#

为什么数据没有划分到所有区域?

从上面的图片看来,您的行键在加载到hbase之前没有被正确地腌制。所以在源表中,它将自己加载到一个特定的区域。
因此,rdd将携带导致热插拔的源分区数
看看hbase文档中的rowkey设计
因此,我建议在创建表时,将其自动预拆分为0到10个区域,然后在0到10之间添加前缀到行键,这样可以确保数据的均匀分布。
例如:

create 'tableName', {NAME => 'colFam', VERSIONS => 2, COMPRESSION => 'SNAPPY'}, 
    {SPLITS => ['0','1','2','3','4','5','6','7']}

前缀可以是在预拆分范围之间生成的任意随机id。
如果数据增加,这种行键也可以避免热点数据将分布在区域服务器上。
再看看我的答案

相关问题