通信人家园

标题: HADOOP和HBASE的内存  [查看完整版帖子] [打印本页]

时间:  2010-1-13 10:09
作者: 见龙在天     标题: HADOOP和HBASE的内存

在测试用HADOOP和hbase处理大数据量时,发现每次内存一旦超出物理内存而使用SWAP内存时,HBASE就会退出。

可以从RegionServer上看到log:
2009-12-22 10:18:38,555 WARNorg.apache.hadoop.hbase.util.Sleeper: We slept 187123ms, ten times longer thanscheduled: 3000
2009-12-22 10:18:38,513 WARNorg.apache.hadoop.hbase.util.Sleeper: We slept 188510ms, ten times longer thanscheduled: 10000
2009-12-22 10:18:42,042 WARNorg.apache.hadoop.hbase.regionserver.HRegionServer: unable to report to masterfor 193533 milliseconds - retrying
2009-12-22 10:18:44,712 WARNorg.apache.zookeeper.ClientCnxn: Exception closing session 0x125afa9121c002f tosun.nio.ch.SelectionKeyImpl@7a34cdfc
java.io.IOException: TIMED OUT
         atorg.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:858)
2009-12-22 10:18:44,733 WARNorg.apache.hadoop.hbase.regionserver.HRegionServer: Processing message (Retry:0)
org.apache.hadoop.hbase.Leases$LeaseStillHeldException
         atsun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
         atsun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)                                                                                                                                                                                                                                                                     
分析log和代码:
RegionServerSleeper类,本来只要sleep3000的,结果sleep187123ms,表示系统特别忙,根本没有时间执行RegionServer的主线程,所以不能向HMaster(zookeeper)发送心跳,导致HMaster认为这个RegionServer已经当掉,所以把它删除了,等到RegionServer有时间发送心跳时,HMaster已经不接受了,因此当有多个RegionServer被认为当掉时,导致Job失败。
而且这个系统忙的时候是在排序MR时,这个时候HBase基本没有业务要跑。
按道理他们的优先级是一样的,应该都能得到机会执行,但是再次执行时,用top看到,Hbase退出时,系统是在做SWAP操作。而我们的处理程序也是大量操作硬盘,所以导致硬盘IO能力不足,进而导致SWAP操作时间过长,从而导致HBASE超时退出。

所以呢,解决方法就是:
修改java各个JVM堆大小,让它不超过物理内存大小。
比我我8core 16GB的机器:Child: 768MB, DataNode and TaskTracker: 512MB, HRegionRerver: 4GB, 7 reduce, 7 map总共占用:15.5GB,还余下512MB给系统用




通信人家园 (https://www.txrjy.com/) Powered by C114