HBase 常见问题集合

一. Region Server 意外退出

1.1 背景

报错信息如下:

ERROR org.apache.hadoop.hbase.regionserver.HRegionServer: ZooKeeper session expired

之后, regionserver就退出了。

对于一个 reigonserver, 它需要将自己注册到 Zookeeper 上 master 的 Znode 上。这样的目的,是当master 宕机或者新的master启动的时候,能及时收到通知。对于 regionserver来说,维持和 Zookeeper 的联系是非常重要的。因为 regionserver 需要定期的将心跳包发给 master server。如果 regionserver 不能及时的知道 master 的改变,就会导致 regionserver 和 master 失去联系,而成为一个僵死的进程。
于是,在默认情况下,regionserver 遇到这种情况,就选择退出。

1.2 原因

为什么 regionserver 和Zookeeper的session expired? 可能的原因有

  • 网络不好
  • Java full GC, 这会 block 所有的线程。如果时间比较长,也会导致 session expired

1.3 解决办法

  • 将 Zookeeper 的 timeout 时间加长
<property>
<name>zookeeper.session.timeout</name>
<value>120000</value>
</property>
  • 配置“hbase.regionserver.restart.on.zk.expire” 为true

这样子,遇到 ZooKeeper session expired , regionserver 将选择 restart 而不是 abort

为了避免 java full GC suspend thread 对Zookeeper heartbeat 的影响,我们还需要对 hbase-env.sh进行配置。

export HBASE_OPTS="$HBASE_OPTS -XX:+HeapDumpOnOutOfMemoryError \
-XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode" 
修改成

export HBASE_OPTS="$HBASE_OPTS -XX:+HeapDumpOnOutOfMemoryError 
-XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseParNewGC -Xmn256m"

参考自 《Region Server 意外退出》:http://eclecl1314-163-com.iteye.com/blog/1463431

你可能感兴趣的:(HBase 常见问题集合)