黑猴子的家:HBase 之HRegionserver挂死,日志出现Session Expired异常排查

1、编辑hbase-site.xml配置文件

加大zookeeper会话超时时间,编辑hbase-site.xml文件,添加下面的属性

[victor@hadoop102 hbase]# vim conf/hbase-site.xml

<property>
    <name>zookeeper.session.timeout</name>
    <value>120000</value>
    <description>加大zookeeper会话超时时间</description>
</property>

<property>
    <name>hbase.regionserver.restart.on.zk.expire</name>
    <value>true</value>
    <description>设置 regionserver 起死回生</description>
</property>

<property>
    <name>hbase.master.maxclockskew</name>
    <value>180000</value>
    <description>Time difference of regionserver from master</description>
</property>

2、加大zookeeper会话最大超时时间,编辑zoo.cfg

[victor@hadoop102 zookeeper]# vim conf/zoo.cfg
MaxSessionTimeout=120000

[victor@hadoop102 zookeeper]# bin/zkServer.sh restart

3、查看regionserver是否有充足的cpu资源

使用top命令查看regionserver是否有充足的cpu资源,mapreduce会占用很多cpu,可以减少mapreduce任务数

[victor@hadoop102 ~]# top

4、查看swap列,确认没有发生交换

使用vmstat 1 命令查看si so两个swap列,确认没有发生交换,1代表每秒打印一次

[victor@hadoop102 ~]# vmstat 1

5、查看fgct列

使用jstat -gcutil pid 1000 查看fgct列,确认regionserver没有发生长时间gc暂停,如果gc时间超过zookeeper的连接最大超时时间则会导致hbase挂掉

[victor@hadoop102 ~]# jstat -gcutil pid 1000

hbase中和GC相关的参数

export HBASE_OPTS="$HBASE_OPTS -ea -verbose:gc -Xloggc:$HBASE_LOG_DIR/hbase.gc.log -XX:ErrorFile=$HBASE_LOG_DIR/hs_err_pid.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode"

修改后

export HBASE_OPTS="$HBASE_OPTS -verbose:gc -Xloggc:$HBASE_LOG_DIR/hbase.gc.log -XX:ErrorFile=$HBASE_LOG_DIR/hs_err_pid.log -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:CMSInitiatingOccupancyFraction=70"

RegionServer 由于 ZooKeeper session expired 而退出,头疼了很久,总结可能的原因:

6、RegionServer 由于 ZooKeeper session expired 而退出,可能发生的原因

(1)网络不好
(2)GC时间过长,程序暂停导致租约过期
(3)CPU忙,维护zookeeper的线程不能及时得到执行机会(调度)
(4)服务器时间同步问题

7、zookeeper Session 时间如何计算

zookeeper的maxSessionTimeout默认值导致hbase regionserver超时
在hbase中经常会遇到regionserver挂掉的情况,查看日志会看到这样的错误信息

WARN  [master/hadoop02/192.168.100.5:6000] zookeeper.ZKUtil: master:6000-0x3525df55101a556, quorum=hadoop02:2181,hadoop03:2181,hadoop01:2181, baseZNode=/hbase Unable to get data of znode /hbase/xx
org.apache.zookeeper.KeeperException$SessionExpiredException: KeeperErrorCode = Session expired for /hbase/xx
        at org.apache.zookeeper.KeeperException.create(KeeperException.java:127)
        at org.apache.zookeeper.KeeperException.create(KeeperException.java:51)
        at org.apache.zookeeper.ZooKeeper.getData(ZooKeeper.java:1155)
        at org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper.getData(RecoverableZooKeeper.java:359)
        at org.apache.hadoop.hbase.zookeeper.ZKUtil.getData(ZKUtil.java:745)

说明与zookeeper的连接的session超时了,可是在hbase-site.xml中设置了zookeeper的超时时间为2分钟,原来
zookeeper中自带两个参数设置了session的超时时间,在启动时日志中会显示

INFO  [main:QuorumPeer@992] - tickTime set to 2000
INFO  [main:QuorumPeer@1012] - minSessionTimeout set to -1
INFO  [main:QuorumPeer@1023] - maxSessionTimeout set to -1

而minSessionTimeout 和maxSessionTimeout 是用下面的方式算出来的
Session

public int getMinSessionTimeout()
{ return minSessionTimeout == -1 ? tickTime * 2 : minSessionTimeout; } 
public int getMaxSessionTimeout() 
{ return maxSessionTimeout == -1 ? tickTime * 20 : maxSessionTimeout; }

Session 默认情况,tickTime=2sec,那么minSessionTimeout 和 maxSessionTimeout 分别是4sec和40sec

所以在hbase中设置超时时间是没用的,必须修改zookeeper自身的maxSessionTimeout为120000,才能真正起到加长zookeeper的session超时时间的作用

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 当HBase的HRegionServer挂掉时,可能会导致数据不可用或无法访问。此时需要进行以下操作: 1. 检查HRegionServer日志,查看是否有异常或错误信息。 2. 检查Hadoop集群的状态,确保所有节点都正常运行。 3. 尝试重启HRegionServer,如果无法重启,则需要进行故障排除。 4. 如果HRegionServer无法恢复,则需要进行数据恢复操作,例如使用备份数据或从其他节点复制数据。 5. 在HBase集群中使用多个HRegionServer可以提高可用性和性能,因此建议使用多个HRegionServer来避免单点故障。 ### 回答2: 当HBase的HRegionServer挂掉时,会对整个HBase集群造成严重的影响。因为HBase是基于分布式架构的,HRegionServer是其中一个重要的组成部分。因此,如果一个或多个HRegionServer挂掉,会导致HBase集群无法正常工作。 造成HRegionServer挂掉的原因有很多,比如网络故障、硬件故障、软件异常等。无论是哪种原因,都需要采取相应的措施来解决问题,以保证HBase集群的稳定运行。 首先,我们需要检查HRegionServer挂掉的原因。我们可以查看日志文件或者使用命令行工具来获取更多的信息。一旦我们确定了原因,我们就可以采取相应的措施来解决问题。 如果是硬件故障,我们需要更换或修理故障的硬件设备。如果是网络故障,我们需要检查网络连接并修复故障。如果是软件异常,我们可以尝试重新启动HRegionServer或者在其他节点上重新启动服务。 此外,为了避免HRegionServer挂掉的情况,我们还可以采取一些预防措施。比如,我们可以在HBase集群中添加足够的备用节点,以便在出现故障时可以快速地替换故障节点。我们也可以使用监控工具来监控HBase集群的运行状况,及时发现并解决问题。 总之,HBase的HRegionServer挂掉是一个严重的问题,需要及时采取措施来解决。我们需要对HBase集群的运行状况进行严密的监控,及时处理任何可能导致故障的问题,以保证HBase集群的持续稳定运行。 ### 回答3: HBase是一种可扩展的面向列的NoSQL数据库,与关系数据库不同,它可以处理分布式数据存储。HRegionServerHBase中重要的组件之一。它被设计用于处理HBase表中特定的数据区域,即Region。如果HRegionServer挂掉了,HBase表中包含的数据区域就需要重新分配到其他HRegionServer的实例上。 HRegionServer的故障可能是由多种原因造成的。可能是由于操作系统内存不足,硬件故障、网络故障或其他问题造成的。当HRegionServer挂掉时,HBase集群就会变得不可用,除非故障的节点上的HRegionServer被替换或恢复。 为了避免这种情况,HBase管理员应该监视HRegionServer的健康状况。当发现HRegionServer故障时,管理员应该采取以下步骤: 1. 确认问题:首先需要确认HRegionServer确实已经挂掉,而不是网络或其他问题导致的连接问题。可以通过查看日志文件或检查监控工具来确认。 2. 重新分配Region:当确认HRegionServer已经挂掉时,HBase会自动重新分配该HRegionServer上的Region到其他可用节点。这需要一定的时间,但不会影响对HBase表的读取和写入。 3. 恢复:如果HRegionServer上的数据对于生产环境非常重要,则需要尽快恢复。可以通过停止并重新启动HRegionServer来实现。重新启动后,HBase将自动分配该HRegionServer上的Region。 4. 预防:为了避免HRegionServer故障,HBase管理员可以采取措施,如监视HRegionServer的健康状况,规划适当的负载均衡策略,定期备份数据等。 总之,HRegionServer挂掉后需要进行重新分配Region和恢复。为了避免发生此类故障,管理员需要监视HRegionServer的健康状况,并采取预防措施。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值