尘世随缘
作者尘世随缘·2015-05-08 16:38
技术总监·上海某互联网金融公司

HBASE配置优化-致所有在找工作的朋友

字数 2618阅读 4300评论 0赞 1

硬件配置

编号

硬件

说明

1

内存 32G

服务器端接收客户端的数据可以缓存在内存中以及排序,速度也就越快

2

CPU 8

要想速度快,数据必须离CPU最近,CPU性能高也可提高MR的运算速度

3

网络

分布式系统致命的地方,cpu、内存不是问题,但是网络绝对是问题,推荐用千兆双网卡绑定,万兆交换机

4

硬盘

推荐使用500GBSATA/SAS盘,7200

二、你的集群规模

 60台机器做集群,分配规则如下:

 

编号

名称

数量

1

Master

2

2

ZK

5

3

RegionServer

15

4

DataNode

37

5

监控服务器

1

 

三、性能优化

1) hbase.hregion.max.filesize

这个参数是单个region的最大字节数,当region中的数据达到这个值之后就会平均分裂成2region

2) hbase.hregion.memstore.flush.size

这个参数是每次内存能缓存的数据最大字节数,当memstore中缓存的数据达到这个值,hbase就将数据flush到硬盘上

3) hbase.regionserver.handler.count

 

这个参数决定了每个regionserver能够开启的最大handler数量,即接受客户端请求的句柄数,这个数量越大能接受的客户端以及线程数越多

4) HBASE_HEAPSIZE

这个参数决定了hbase最多能调用物理机的内存大小,尽量配置大一些

hbase.hregion.max.filesizehbase.hregion.memstore.flush.size参数的配置有讲究。目前有2种设计思路:

1、建表时预划分region,对数据有清楚的把握(数据量、rowkey分布),能够进行将region分好,而无需启用hbase的自split策略,这种方式能够提高集群稳定性,缺点是操作上较困难。在此情况下hbase.hregion.max.filesize设置为1TB或更大值

2、数据无法估量,采用hbase自身split机制。灵活性高,易操作,缺点是存在不稳定风险。在此情况下将hbase.hregion.max.filesize设置为1GB-2GB较合理

3、无论上述哪种情况,hbase.hregion.memstore.flush.size200MB左右是经过多次测试后一个较理想值

四、Hadoop配置参数

hbase是基于hadoop构建的,要调优hbase入库性能必然少不了调优hdfs。这里发现了几个比较有用的参数

dfs.replication.interval:默认为3秒,就是hadoop检查备份的时间间隔,这个时间稍微设长一点可以避免hdfs频繁备份,提高hdfs吞吐效率

dfs.datanode.handler.countdatanodehandler,增加datanodehandler

dfs.namenode.handler.countnamenodehandler数。

五、系统架构因素

 Client

入库时对client的数量和开启的线程数量有要求,对client机器性能也有一定的要求,因为实际测试的时候发现client端开启50个线程后机器性能占用比较满。

Regionserver

Regionserver端越多,能同时接受的请求就越多,入库速度就越快。

六、配套软件

操作系统:64centOS

JDKsun64jdk1.7

Hadoophadoop2.6

Hbasehbase0.98

七、hbase表设计因素

hbase表如果设计成多列族会比单列族的时候入库速度慢。因为多列族的时候hbasememstoreflush时对一个store文件的flush会同时触发其他storeflush,这个可能是hbase的一个bug,目前来说设计表的时候不要将列族设计到3个以上。

八、入库程序设计因素

 

入库程序的设计上最好在创建Htable的时候就设置好region的数量,start_keyend_key,这样就能够使程序开始运行的时候向每个regionserver传递请求。另外start_keyend_key的设计可以让数据较紧凑的平均分发到各个region上。

入库程序不要手动做table.flushcommit(),而是使用hbase自带的memstore->硬盘的写入机制,只需要table.put即可。然后设置table的自动提交功能为false(如果为true的话每次调用table.put的时候都会触发一次操作)。

数据入库时只对自动提交选项设为false,而不对writebuffersize做设置效果会比较好,看了hbase的代码不设置的话默认值是2MBwritebuffersize的设置不能太大,也不能太小,实际测试中2-5MB之间比较合理

入库程序设计要开尽可能多的线程,推荐20-25线程,在多个机器上运行,同时读取本地文件,在并发数量大的情况下入库效率会得到较大提升。

BlukLoad入库:除了client方式之外,可以通过mr来生成hfile,之后将hfile直接导入hbase的方式入库。目前以这种方式进行大文件批量入库是最为理想的方法。

九、性能分析

1regionserver的内存设置为20000M,

2、修改region的最大大小为100G(目的是为了不做分裂);

3、提前划分region 1000个;regionflush大小为4G

4clientwritebuffersize64MB,每个开50线程。

5、入库速度能达到60MB/shbaserequest20w

 

                                      祝愿所有找工作的朋友都能找到好的工作

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

1

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广