分享

hbase region导致磁盘Io过高,CPU 使用率过高,如何解决

cloudcat 发表于 2017-3-8 09:46:48 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 12 37268
由于是在线系统,提供用户查询,我们是solr+hbase,通过solr查询出来rowkey,然后再通过rowkey到hbase 查询数据。

最近发现集群磁盘IO达到  300M/s,hdfs IO 达到 700M/s ,磁盘IO过高会导致CPU使用率飙升到70%左右

用户查询量基本没有变化,但是现在怎么这么高。我分析了一下,现在每个服务器的region平均在950个左右,最高的达到1021个。2016年4月份,region个数在600个左右。我们hbase.hregion.max.filesize 为512M, 我怀疑是 region数量过多导致的。

问题:
1   如果我把hbase.hregion.max.filesize设置为1G,系统会自动给我region合并,我如何手动合并region,这样磁盘Io会降低吗?
2  现在 HBase RegionServer 的 Java 堆栈大小(字节) 为4G ,我提高内存 和增加hbase缓存比例,会减少磁盘Io吗?

或者还有别的方法能解决我的问题


已有(12)人评论

跳转到指定楼层
evababy 发表于 2017-3-8 10:30:16
本帖最后由 evababy 于 2017-3-8 10:52 编辑

有可能是频繁balancer导致的么?
数量貌似会对提升查询速度,但是影响管理的性能,官网都建议服务器不要超过1000个
回复

使用道具 举报

cloudcat 发表于 2017-3-8 12:37:31
evababy 发表于 2017-3-8 10:30
有可能是频繁balancer导致的么?
数量貌似会对提升查询速度,但是影响管理的性能,官网都建议服务器不要超 ...

您好,我如何 减少region的数量?

回复

使用道具 举报

yuwenge 发表于 2017-3-8 13:34:30
cloudcat 发表于 2017-3-8 12:37
您好,我如何 减少region的数量?

可以增大hbase.hregion.max.filesize
更多
较大的region / 自管理region split(机器内存8G+): 更大的Region可以使你集群上的Region的总数量较少。 一般来言,更少的Region可以使你的集群运行更加流畅(也可以手动的分割region)。一般一个regionserver在20~500之间算是比较好的一个值。hbase.hregion.max.filesize默认10G,当达到该值的时候,才开始进行分割。hbase.regionserver.region.split.policy指定分割文件的策略IncreasingToUpperBoundRegionSplitPolicy。hbase.regionserver.regionSplitLimit(该参数是一个指导性的参数,不是一个硬性指标)指定最大region的个数,默认INT_MAX。一般情况下,如果可以的话,选择手动管理region,也就是禁用hbase自带的region分割机制,在集群空闲的时候再进行region的分割,选择将hbase.regionserver.regionSplitLimit设置1以及hbase.hregion.max.filesize设的更大(比如100G,但是不推荐设置为LONG_MAX)。




回复

使用道具 举报

yuwenge 发表于 2017-3-8 13:36:48
hbase应该可以手工合并
Examples:
[mw_shl_code=bash,true]  hbase> merge_region 'ENCODED_REGIONNAME', 'ENCODED_REGIONNAME'
  hbase> merge_region 'ENCODED_REGIONNAME', 'ENCODED_REGIONNAME', true[/mw_shl_code]
更多可参考
hbase合并region
http://www.aboutyun.com/forum.php?mod=viewthread&tid=21188



回复

使用道具 举报

cloudcat 发表于 2017-3-8 14:18:08
本帖最后由 cloudcat 于 2017-3-8 14:21 编辑


您好,感谢您的回答。看了您的资料,region可以手动合并。这是我集群以前的数据,麻烦您一下
时间 hbase.hregion.max.filesize 每台服务器 region数量
  HDFS IO集群磁盘IOcpu使用率
2016年4月2号 10G 350 1.3GM/s 135M/s 15%
2016年4月3号 512M350 80M/s120M/s 16%
2017年3月5号 512M970 600M/s300M/s 60%

去年4月2号,发现 HDFS IO太高,所以设置hbase.hregion.max.filesize=512M,HDFS IO 就降低了,系统也很稳定。
到现在数据量大了,region达到1000,导致集群磁盘IO很高,这样cpu也会很高了。
我查了linux io,发现大部分都是habase读取数据造成的。

按照您的资料,合并region可以提高性能,我一共6台服务器,加起来5000多个region,如果每次只能合并两个,这个不太实际。
当比如2016年4月3号,我把hbase.hregion.max.filesize=512M后,以前的10G大小的region会自动split吗?
如果我现在hbase.hregion.max.filesize=2G,我不用手动合并region,我重启动hbase服务器,CDH集群会帮我自动合并region,使每个region达到2G吗?

回复

使用道具 举报

cloudcat 发表于 2017-3-8 14:21:51
yuwenge 发表于 2017-3-8 13:36
hbase应该可以手工合并
Examples:
[mw_shl_code=bash,true]  hbase> merge_region 'ENCODED_REGIONNAME', ...
您好,感谢您的回答。看了您的资料,region可以手动合并。这是我集群以前的数据,麻烦您一下
时间hbase.hregion.max.filesize每台服务器 region数量
  HDFS IO集群磁盘IOcpu使用率
2016年4月2号10G3501.3GM/s135M/s15%
2016年4月3号512M35080M/s120M/s16%
2017年3月5号512M970600M/s300M/s60%

去年4月2号,发现 HDFS IO太高,所以设置hbase.hregion.max.filesize=512M,HDFS IO 就降低了,系统也很稳定。
到现在数据量大了,region达到1000,导致集群磁盘IO很高,这样cpu也会很高了。
我查了linux io,发现大部分都是habase读取数据造成的。

按照您的资料,合并region可以提高性能,我一共6台服务器,加起来5000多个region,如果每次只能合并两个,这个不太实际。
当比如2016年4月3号,我把hbase.hregion.max.filesize=512M后,以前的10G大小的region会自动split吗?
如果我现在hbase.hregion.max.filesize=2G,我不用手动合并region,我重启动hbase服务器,CDH集群会帮我自动合并region,使每个region达到2G吗?
回复

使用道具 举报

langke93 发表于 2017-3-8 14:37:37
cloudcat 发表于 2017-3-8 14:21
您好,感谢您的回答。看了您的资料,region可以手动合并。这是我集群以前的数据,麻烦您一下

去年4月2号 ...

生效后,在插入数据flush的时候,系统应该会检测。楼主可以观察下
回复

使用道具 举报

cloudcat 发表于 2017-3-8 14:47:36
langke93 发表于 2017-3-8 14:37
生效后,在插入数据flush的时候,系统应该会检测。楼主可以观察下

是这样的,比如我以前的region 大小是512M,现在我想修改为2G,如果我重启动CDH集群,当集群检测到hbase.hregion.max.filesize=2G,他会自动以前的region合并成2G?
回复

使用道具 举报

fylanyu 发表于 2017-3-8 16:02:51
cloudcat 发表于 2017-3-8 14:47
是这样的,比如我以前的region 大小是512M,现在我想修改为2G,如果我重启动CDH集群,当集群检测到hbase. ...

楼主既然调整过,那相信应该清楚,是否会合并。个人认为系统不会自动合并
还可以调整下hbase.regionserver.handler.count参数
regionserver处理IO请求的线程数
线上配置:适当调大
默认配置:10

hbase.regionserver.handler.count:该设置决定了处理RPC的线程数量,默认值是10,通常可以调大,比如:150,当请求内容很大(上MB,比如大的put、使用缓存的scans)的时候,如果该值设置过大则会占用过多的内存,导致频繁的GC,或者出现OutOfMemory,因此该值不是越大越好。

回复

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条