HBase_HBase倾斜治理专利与实战代码
一、专利撰写
一种多维度组合rowkey的HBase表数据倾斜治理方法
技术领域
本发明属于HBase数据库技术领域,具体涉及一种针对由聚集维度组成rowkey的HBase表的数据倾斜治理方法。
背景技术
HBase是一种非关系型数据库,适合于存储非结构化数据,具有高可靠性、高性能、面向列、可伸缩、分布式等特点。HBase数据库构建于Hadoop分布式文件系统之上,通过底层HDFS的副本机制实现数据的冗余存储,在物理存储上以列簇的形式实现KV数据的存储,具有极其出色的读写性能。
数据应用平台为了使用更加灵活的聚合维度组合方式进行批量数据查询,使用不同聚合维度范围从大到小的拼接的方式组成rowkey,在此基础之上使用rowkey前缀查询即可实现查询不同维度的批量数据。比如一张HBase表中存储了SKU商品数据,使用商品的一级类目id+二级类目id+三级类目id作为rowkey,在进行数据查询时,只输入一级类目id维度即可高效快速地查询出该一级类目id下的所有SKU商品数据,输入一级类目id+二级类目id维度组合即可高效快速地查询出该二级类目组合下的所有SKU商品数据,输入一级类目id+二级类目id+三级类目id维度组合即可高效快速地查询出该三级类目组合下的所有SKU商品数据。
数据应用平台使用上述灵活的聚合维度组合拼接rowkey,配合rowkey前缀查询可以高效定位目标数据,避免了将HBase全表数据全量读取到内存再进行过滤,实现了高效查询、资源占用少、响应速度快等优点。但是这种携带业务逻辑的rowkey设计则会导致rowkey的不均匀分布,无论是采用HexStringSplit还是UniformSplit等预分区算法,当组成rowkey的首个业务维度值分布较为集中时,一定会造成HBase表的分区倾斜,大量数据集中在单个RegionServer上,导致单个节点存储和查询压力过大,夜间生产推数时效延迟。
鉴于上述HBase数据库存储现状,有必要针对数据倾斜和热点问题加以治理,因此设计一种针对由业务维度组成rowkey的HBase表数据倾斜治理方法,显得十分迫切和重要。
发明内容
本发明的目的是克服现有技术的不足,提供一种针对由业务维度组成rowkey的HBase表数据倾斜治理方法,该方法能够解决HBase表的数据倾斜和热点问题,避免HBase集群出现单个节点存储和访问压力过大。
为了克服现有技术问题,本发明是通过以下技术方案实现的:
1)一种针对由业务维度组成rowkey的HBase表数据倾斜治理方法,特征在于利用Export工具扫描所述原数据倾斜HBase表生成快照,并将快照文件转存在可读取的HDFS分布式文件系统目录上。
2)按上述技术方案,所述倾斜治理工具主要包含快照读取模块与数据重推模块,HBase倾斜数据读取与治理后数据重写分两步独立进行。
3)按上述技术方案,所述快照读取模块采用MapReduce计算模型读取原数据倾斜HBase表快照,采用字节码预分区算法对单个region的rowkey范围进行均等拆分,实现多个map并行读取单个region。
4)按上述技术方案,所述快照读取模块按照业务字段数据类型元数据对表中字节码数据进行反序列化解码,对不同数据类型的数据使用不同的解码算法,得到具有完整业务含义的原始数据。
5)按上述技术方案,所述快照读取模块使用水平制表符作为业务原始数据行的列分隔符,以字符串的心事保存到Text中间存储文件中。
6)按上述技术方案,所述快照读取模块以Bzip2压缩格式对Text中间存储文件进行压缩。
7)按上述技术方案,所述快照读取模块在倾斜数据读取解析过程中统计元HBase表数据总行数。
8)按上述技术方案,所述数据重推模块采用MapReduce计算模型读取Bzip2压缩格式的Text中间存储文件,对单个文件按照数据量均分为多份,使用多个map并发读取。
9)按上述技术方案,所述数据重推模块对组成rowkey的首个业务维度字段原始数据进行反转散列。
10)按上述技术方案,所述数据重推模块将反转散列后的rowkey与其他原始业务字段数据进行编码后存储到hfile中,以BulkLoad形式将hfile直接推送到HBase目录中。
11)按上述技术方案,所述数据重推模块在数据重推过程中统计治理后数据总行数,并随机挑选一个rowkey获取行数据,验证倾斜治理前后数据总量一致性和正确性。
本发明提供的HBase表数据倾斜治理方法与现有技术相比,具有以下有益技术效果:将原数据倾斜HBase表直接底层hfile层面生成快照保存到HDFS目录上,再使用快照读取模块读取倾斜数据,避免直接全表扫描线上HBase集群,造成RegionServer压力过大;采用字节码预分区算法对每个region的rowkey范围进行预拆分,实现多个map并行读取单个region,成倍缩减了快照读取时间;按照HBase原数据字段类型将表中字节码数据进行反序列化,保证数据正确性,避免编码方式错误造成乱码导致数据失真;Bzip2压缩格式存储Text中间文件,占用HDFS存储资源缩减至十分之一;将数据推入HBase新表时,将组成rowkey的首个业务字段进行反转再拼接rowkey,将不同业务字段值尽可能散列开来,避免聚集,同时还能实现灵活的业务维度组合精确快速查询;比对倾斜治理前后HBase表中数据总行数与随机数据行值,确保了倾斜治理前后数据总量一致性与数据正确性。
附图说明
图1为本发明的整体流程示意图。
图2为本发明所述的一个HBase表倾斜治理前region数据分布图。
图3为本发明所述的一个HBase表倾斜治理后region数据分布图。
图1:

图2:

图3:

二、实战代码
1.HBaseSnapshotRead快照读取模块
主程序
1 | public class GetHbaseTool extends Configured implements Tool { |
数据读取与转换mapper
1 | public class ReverseRowkeyMapper extends TableMapper<Text, Text> { |
并发读取工具类
1 | public class ParallelizeTableMapReduceUtil extends TableMapReduceUtil { |
并发读取InputFormat类
1 | public class ParallelizeTableSnapshotInputFormat extends TableSnapshotInputFormat { |
并发读取InputFormatImpl类
1 | public class ParallelizeTableSnapshotInputFormatImpl extends TableSnapshotInputFormatImpl { |
2.HBaseBulkload数据重推模块
主程序
1 | public class LoadHbaseTool extends Configured implements Tool { |
数据转换mapper
1 | public class LoadHbaseMapper extends Mapper<LongWritable, Text, ImmutableBytesWritable, Put> { |