hbase快速入门之---参数调优

来源:互联网 发布:淘宝买家怎么删除评论 编辑:程序博客网 时间:2024/06/04 19:03
Ø创建自定义的预分区
默认情况下,在创建HBase表的时候会自动创建一个region分区,当导入数据的时候,所有的HBase客户端都向这一个region写数据,直到这个region足够大了才进行切分。一种可以加快批量写入速度的方法是通过预先创建一些空的regions,这样当数据写入HBase时,会按照region分区情况,在集群内做数据的负载均衡。

Ø增加Regionserver的处理线程
hbase.regionserver.handler.countRegionServer端开启的RPC监听器实例个数,也即RegionServer能够处理的IO请求线程数。默认是10.
 此参数与内存息息相关。该值设置的时候,以监控内存为主要参考。
 对于 单次请求内存消耗较高的Big PUT场景(大容量单次PUT或设置了较大cachescan,均属于Big PUT)或ReigonServer的内存比较紧张的场景,可以设置的相对较小。
 对于 单次请求内存消耗低,TPSTransactionPerSecond,每秒事务处理量)要求非常高的场景,可以设置的相对大些。

Ø使用noatimenodiratime挂载磁盘
如果你以noatime挂载磁盘,访问时间戳不会更新,当一个文件在文件系统中被读的时候。在这个nodiratime属性情况中,挂载磁盘不会更新文件系统中目录的inode访问时间。因为它们没有更多的磁盘I/O更新访问时间戳,这提升了文件系统的访问速度。

Øvm.swappiness设置成0来避免swap
Linux移动那些一段时间没有被访问的内存页到swap空间,即使它由足够可用的内存。这叫做swap out。换一句话说,从swap空间读swapped out的数据到内存中叫做swap。如果HBase使用的内存被swapped了,HBase运行可能会遇到问题,如会增加GC时间等。

ØJava GCHBase堆设置
因为HBase运行在JVM,JVM的 Garbage Collection(GC) 设置对于HBase流畅的运行,更高的性能是非常重要的。建议HBase的最大堆内存不要超过16 GB,并将垃圾回收机制设置为CMS
同时HBase进程输出到它们的GC日志中是同样重要的,可以根据GC日志来定位问题,或调整JVM设置。
另外可以设置hbase.hregion.memstore.mslab.enabledtrue,来预防老年代堆碎片,减少因内存碎片导致的Full GC,提高整体性能

Ø增加HBase用户的File handlesprocess limits
操作系统默认的nofile nproc对于HBase来说偏小,在高并发的情况下会使用HBase出现问题。建议增大nofile nproc设置。

Ø增加DATANODE处理线程数
HBaseDatanode做为底层的存储,可能会同时打开较多的hdfs文件,因些需要增大默认的dfs.datanode.max.transfer.threads参数。
Øhbase.hregion.max.filesize
在当前ReigonServer上单个Reigon的最大存储空间,单个Region超过该值时,这个Region会被自动split成更小的region。对于0.90.x版本该参数的最大值为4GB,之后的版本最大值 可以达到20GB510GB是最优的。

Ø增大zookeepermaxClientCnxns
默认zookeeper给每个客户端IP使用的连接数为10个,可能会出现连接不够用的情况。可以增大maxClientCnxns参数。

Ø增大hbase.hstore.blockingStoreFiles
flush时,当一个region中的Store(Coulmn Family)内有超过7storefile时,则block所有的写请求进行compaction,以减少storefile数量。可以增加为20

Øhfile.block.cache.size
storefile的读缓存占用Heap的大小百分比,0.2表示20%。该值直接影响数据读的性能。如果写比读少很多,可以开到0.4-0.5。如果读写较均衡,0.3左右。如果写比读多,可以使用默认值。