我正在使用以下命令将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));
为什么数据没有划分到所有区域?
1条答案
按热度按时间trnvg8h31#
为什么数据没有划分到所有区域?
从上面的图片看来,您的行键在加载到hbase之前没有被正确地腌制。所以在源表中,它将自己加载到一个特定的区域。
因此,rdd将携带导致热插拔的源分区数
看看hbase文档中的rowkey设计
因此,我建议在创建表时,将其自动预拆分为0到10个区域,然后在0到10之间添加前缀到行键,这样可以确保数据的均匀分布。
例如:
前缀可以是在预拆分范围之间生成的任意随机id。
如果数据增加,这种行键也可以避免热点数据将分布在区域服务器上。
再看看我的答案