HBase表数据倾斜治理_读取hbase表数据并bulkload到不同结构hbase表中
在HBase表数据倾斜治理(2)中我们实现了读取HBase表数据并保存成字符串文件,在HBase表数据倾斜治理(3)中我们实现了读取字符串文件并bulkload到HBase表,那么将两部分结合即可达到读取HBase表数据并重新组装rowkey再放回Hbase中的目的。
1.项目背景
以前的数据保存到HBase中的过程中,rowkey首个字段并没有进行reverse散列,导致数据倾斜,现要求将HBase表中数据取出,从rowkey中获取首个字段并进行reverse散列,再重新将数据bulkload到新表中。(此处以TableScanMR方式扫描数据作为范例,实际项目中使用SnapshotScanMR以获取更高效率。)
2.创建HBase表
创建一个新的HBase表用来存放进行治理之后的数据:create 'fellowreverse','d'
3.创建Mapper类
1 | public class DataSkewCorrectMapper extends TableMapper<ImmutableBytesWritable, Put> { |
4.创建Driver类
1 | public class DataSkewCorrector { |
5.治理前后对比
治理前在hbase shell当中查看表数据如下:
1 | hbase(main):003:0> scan 'fellowjava' |
治理后在hbase shell当中查看表数据如下:
1 | hbase(main):001:0> scan 'fellowreverse' |
可以看出rowkey的前四个字节变化了,而且HBase表重新排序了。