通信人家园
标题:
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
和代码:
RegionServer
的
Sleeper
类,本来只要
sleep3000
的,结果
sleep
了
187123ms
,表示系统特别忙,根本没有时间执行
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