(1)创建表预分区(必须的)
针对原始数据实时ETL落地hbase,设置好预分区,解决数据热点问题,当已知rowkey的值的时候,设置预分区可以根据rowkey的区间进行分区。
# 创建预分区语法
create 'VEHICLE_NS:VEHICLE_SPLIT','INFO', {SPLITS => ['40000','70000']}
# rowkey所在的范围
分区1:startKey 为空,endKey为10000
分区2:startKey 10000,endKey为70000
分区3:startKey 70000,endKey为空
# 正常情况下,创建表预分区个数不少3个,一定时在创建表的时候指定,并不是表创建以后。
(2)表数据压缩
HBase数据库,底层数据存储在HFile文件中,放置在HDFS文件系统上,可以对其设置数据压缩,比如gzip、snappy或lz4等,减少磁盘存储空间。
预分区字段要符合rowkey前缀匹配
• 查看系统支持压缩格式
hbase org.apache.hadoop.util.NativeLibraryChecker
# 创建表示指定压缩格式
create 'vehicle_src_gz',{NAME => 'info', COMPRESSION => 'gz'}
• 不同压缩方式对比
同等数据98192 row(s),虚拟机服务环境压缩率顺序为
gz > snappy > lz4
压缩率对比,还应该看压数据总量,压缩速度和解压速度,也就是压缩和解压消耗的时间
数据量更大的情况下,可能snappy压缩率更高,按实际情况测试选择压缩算法
(3)数据块Block编码
当从HBase表读取数据时,先读MemStore,然后再读BlockCache的。那么Block越小,能放到BlockCache中的数据就越多,命中率就越高,对Scan就越友好。
Block Encoding:通过某种算法,对Data Block中的数据进行压缩,Block Size小,放到Block Cache中就多。
create 'VEHICLE_NS:VEHICLE_SRC_BLOCK', { NAME => 'INFO', DATA_BLOCK_ENCODING => 'FAST_DIFF'}
标签:压缩,性能,rowkey,调优,VEHICLE,HBase,分区,Block From: https://www.cnblogs.com/xiaotian278/p/16622614.html