大数据套件之HBase性能测试

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

大数据套件之HBase性能测试

By:andrewcheng

前言

2.7­2.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.统计测试结果

二、Read­Write(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的请求情况,根据进程栈找到影响性能的关键点

相关文档
最新文档