大数据套件之HBase性能测试
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
大数据套件之HBase性能测试
By:andrewcheng
前言
2.72.19期间,对大数据套件中的HBase组件进行了性能测试,本文总结了在测试步骤及其
优化思路。
一、Write
通过10个客户端节点向由20个RS节点的HBase集群中,写入20亿条数据,单条记录有10个字段,单字段的大小为100Byte
1、建表语句
n_splits = 299
create 'usertable',{NAME => '0'},{DURABILITY => 'SKIP_WAL', COMPACTION_EN ABLED => 'false',MAX_FILESIZE => '536870912000',SPLIT_POLICY => 'org.apac he.hadoop.hbase.regionserver.DisabledRegionSplitPolicy'},{SPLITS => (1..n _splits).map {|i| "user#{1000+i*(9999-1000)/n_splits}"}}
优化思路:
PACTION_ENABLED: 关闭hbase的compact操作,避免因compact操作影响性能
b.SKIP_WAL:不写WAL,提高写入性能
c.不用任何压缩算法,避免由于使用压缩算法而导致flush速度较慢,使得memstore中的数据无法及时flush到硬盘上,进而导致客户端写入堵塞
d.设置MAX_FILESIZE、SPLIT_POLICY,禁止region做split,影响写入速度
e.预分区region的数量要适中,此次测试单台机器上分布15个region
2、系统参数优化
Name Value
hbase.regionserver.handler.count50
hbase.hstore.flusher.count8
hbase.hregion.memstore.block.multiplier6
Name Value
hbase.hregion.memstore.flush.size134217728
hfile.block.cache.size0.2
hbase.regionserver.global.memstore.upperLimit0.4
hbase.regionserver.global.memstore.lowerLimit0.35
禁用ranger
优化思路
a.增大flusher的线程数,避免flush堵塞而导致memstore中的数据无法及时写入到HDFS,进而堵塞客户端
b.减小memstore需要flush时的阈值,提升flush的性能
c.减小handler的线程数,避免同时写入大量的数据导致的gc频发及gc停顿时间过长
d.套件中的HBase使用了ranger组件进行鉴权,ranger组件会影响HBase的读写性能,在这里需要禁用ranger
3、gc 参数优化
gc 参数如下:
.preferIPv4Stack=true -Xms57344m -Xmx57344m -XX:+UseG1GC -XX:+U nlockExperimentalVMOptions -XX:MaxGCPauseMillis=50 -XX:-OmitStackTraceInF astThrow -XX:ParallelGCThreads=18 -XX:+ParallelRefProcEnabled -XX:+PerfDi sableSharedMem -XX:-ResizePLAB -XX:MaxTenuringThreshold=1 -XX:G1HeapWaste Percent=10 -XX:G1MixedGCCountTarget=16 -XX:G1NewSizePercent=3
优化思路:
a.将regionserver的gc算法由CMS算法改为G1算法,使用G1算法可以有效避免单次gc停顿时间过长的问题,尽可能的使服务器端接收请求的能力保持稳定
b.通过不断的写入测试,来调整G1算法的参数,使得性能达到最优
4、客户端参数优化
YCSB客户端采用最新的稳定版本:0.12
./ycsb load hbase098 -P ../workloads/workloada -p table=usertable -p colu mnfamily=0 -p recordcount=200000000 -p insertorder=hashed -p
insertstart=0 -p clientbuffering=true -threads 70 -s
优化思路:
a.总共10台机器,每台机器启动一个客户端,单客户端写入2亿条数据,通过参数insertstart来调整各个客户端写入的起始值
b.设置参数clientbuffering为true,批量提交数据到HBase集群中
c.使用hbase098客户端,并不断调整客户端的线程数,获得写入性能最佳的线程数
d.每个客户的线程数: 70个
5、测试步骤
1.调整集群参数,重启集群
2.创建HBase表,并查看region是否均匀分布
3.启动客户端,开始测试
4.统计测试结果
二、ReadWrite(95%5%)
以读为主的场景,95%的读,5%的写
1、建表语句
alter 'usertable',{NAME => '0', ,BLOCKSIZE => '16384'}
alter 'usertable', METHOD => 'table_att_unset', NAME => 'COMPACTION_ENABL ED'
major_compact 'usertable'
优化思路:
a.将表的BLOCKSIZE设置为16k,提升get的性能
b.开启 COMPACTION_ENABLED 开关
c.对表usertable做major_compact操作,将每个region下的小文件合并成一个,提升读性能
2、系统参数优化
Name Value
hbase.regionserver.handler.count300
hbase.master.balancer.stochastic.readRequestCost90000000
优化思路:
a.与写操作不同的是每一次读操作都会与HBase集群进行交互,产生一次rpc,所以需要调大rpc handle的个数
b.调整balance算法的参数时,使得region做balance时以region读请求量为主,使得region分布时,按照读请求来分布
c.观察测试过程中,Regionserver的请求情况,根据进程栈找到影响性能的关键点