`
zhangxiong0301
  • 浏览: 359055 次
社区版块
存档分类
最新评论

HBase的long GC与 Zookeeper lease expired的权衡(转载)

阅读更多

问题和现象:

这是一个连锁反应:
1)RegionServer在遇到"Stop-The-World" GC时,会停止一切工作,这样与Zookeeper保持的心跳,就会停止。
2)Zookeeper在没有收到注册节点的心跳时,就会删除对应rs对应节点。
3)HMaster的ServerManager会发现这个RegionServer出现了问题,然后交由ServerShutdownHandler处理。
4)HMaster的SplitLogManager和RegionServer的SplitLogWorker组成Master-Slave结构,对HMaster
认定Dead的RegionServer的节点进行处理。
 HLOG => {按照Region分割成不同的edits文件},具体内容可以查看:http://www.cloudera.com/blog/2012/07/hbase-log-splitting/
5)HMaster的AssignmentManager把HLog处理完成的Region分配给一个RegionServer,RegionServer在接到Open Region的请求之后,利用分割出来的edits,实现HLog Replay,将其加载到MemStore,并且flush成一个文件。
6)RegionServer上的所有Region在其它RegionServer上提供服务
7)RegionServer FullGC结束,然后正常与HMaster进行心跳tryRegionServerReport(),后来收到了一个YouAreDeadException,接到命令后,就开始关闭各种线程,然后退出。

以上只是对HBase一个现象的描述,如果正常的情况下,这样的处理是没有问题的。但是,我们在维护的Hbase集群却出现了一个让我们很郁闷的问题。
有应用报出Get、Scan某些数据不见了,查看Region下的RegionServer报出:
DFS Read: java.io.FileNotFoundException: File does not exist: /user/hbase/hbase/OTHER/9cc2c3d381e6891d1798d2cf4fe23859/dat/48bf8d0bbdae4b8b85f66da6f81b66aa
也就是该表格下的dat数据丢失,检查了NameNode查看该文件的情况,发现该数据被原RegionServer的DFSClient删除了,是因为原RegionServer在Long FullGC之后,做了一次minor Compaction,把两个StoreFile文件合并成了一个。而在这个之前,该Region已经被一个新的RegionServer所服务着,这样这个新的RegionServer会认为没有进行Compaction,还是按照接手该Region时的情况进行读取数据,于是,悲剧就产生了。

具体描述:
出问题Region:RegionA
FullGC的RegionServer: RegionServer1
接管RegionA的RegionServer: RegionServer2
RegionServer1 --------------Full---GC------------------->compaction--(delete 原 dat/48bf***)->You Are Dead--->Exit
RegionServer2 -------------------------> 接管RegionA---->请求出错

整体上虽然数据没有丢失,但是仍然给线上系统带来一定的影响。分析了整个过程之后,预防这类问题出现应该
从如下几点入手:
1、相关参数
<property>
  <name>hbase.regionserver.lease.period</name>
  <value>240000</value>
  <description>HRegion server lease period in milliseconds. Default is 60 seconds. Clients must report in within this period else they are considered dead.</description>
</property>
hbase.regionserver.lease.period的设置是Tradeoff,因为在HBase Client操作过程中,如果RegionServer的响应速度过慢或者出现了Long FullGC,超过了设置值,则抛出lease expired。
ps:hbase.regionserver.lease.period的设置要和hbase.rpc.timeout保持一致,最好hbase.rpc.timeout的值略大于hbase.regionserver.lease.period

<property>
  <name>zookeeper.session.timeout</name>
  <value>90000</value>
  <description>Default 3 minutes.ZooKeeper session timeout. HBase passes this to the zk quorum as suggested maximum time for a session (This setting becomes zookeeper's 'maxSessionTimeout'). See http://hadoop.apache.org/zookeeper/docs/current/zookeeperProgrammers.html#ch_zkSessions "The client sends a requested timeout, the server responds with the timeout that it can give the client. " In milliseconds. </description>
</property>
zookeeper.session.timeout指定zk Client与zk Server Quorum之间的会话的最长时间,RegionServerTracker监听rs的znode的变化,超过session time out的,就认定该RegionServer出错了,然后通过ServerManager的expireServer将其加入Dead RegionServer Lists中。这样等RegionServer发送心跳给HMaster时,发现该RegionServer位于Dead RegionServer Lists中,会抛出YouAreDeadException。然后,RegionServer会开始执行shutdown系统操作。
注意:这里设置的zookeeper.session.timeout与zookeeper设置的ticktime共同影响session的生存周期,一般而言,sessionTimeOut= Min(应用设置的zookeeper.session.timeout,ticktime*20)


2、tryRegionServerReport()的频率设置高一些。默认间隔时间为:
this.msgInterval = conf.getInt("hbase.regionserver.msginterval", 3 * 1000);设置成1*1000ms,可以更快地同步HMaster上RegionServer状态,尽量避免延迟阶段造成的数据不一致。注意,如果是RegionServer的个数超过200,该值不要太小,避免HMaster的压力过大
3、在compaction删除文件时,tryRegionServerReport一下,保证没有出现已经被认定“Dead”但仍然工作的情况。在任何删除操作之前,首先report一下HMaster,检查是否已经出现YouAreDeadException,然后恢复之前的文件。

分享到:
评论

相关推荐

    hbase配置内置的zookeeper

    ### HBase 配置内置 ZooKeeper 的详细步骤与解析 #### 一、配置背景与目的 在 HBase 的部署环境中,ZooKeeper 起着非常重要的作用,它主要用于协调集群中的各个节点,并且管理 HBase 的元数据。通常情况下,HBase ...

    Docker(Hadoop-3.3.1+HBase-2.4.16+Zookeeper-3.7.1+Hive-3.1.3)配置文件

    Docker(Hadoop_3.3.1+HBase_2.4.16+Zookeeper_3.7.1+Hive_3.1.3 )配置文件 搭建集群环境

    hadoop+hbase+zookeeper集群配置流程及文件

    在大数据处理领域,Hadoop、HBase和Zookeeper是三个至关重要的组件,它们共同构建了一个高效、可扩展的数据处理和存储环境。以下是关于这些技术及其集群配置的详细知识。 首先,Hadoop是一个开源的分布式计算框架,...

    hadoop、hbase、hive、zookeeper版本对应关系续(最新版)(2015)

    Hadoop、HBase、Hive和ZooKeeper是大数据技术栈中的重要组件,它们在数据存储、处理和管理方面扮演着核心角色。了解这些组件的版本对应关系对于部署和维护大数据集群来说至关重要,因为不兼容的版本可能会导致集群...

    hbase和zookeeper配置

    HBase 和 ZooKeeper 配置详解 HBase 和 ZooKeeper 是两个非常重要的分布式系统组件,分别用于分布式数据库和分布式协调服务。今天,我们将详细介绍如何配置 HBase 和 ZooKeeper,以便更好地理解它们之间的交互。 ...

    Linux下Hbase和zookeeper的安装和部署

    ### Linux下Hbase和Zookeeper的安装与部署详解 #### Zookeeper 安装与配置 Zookeeper 是一款开源的分布式协调服务系统,主要用于解决分布式应用中的常见问题,例如:命名服务、状态同步服务、集群管理等。在进行...

    hbase-0.92.1+zookeeper

    在HBase 0.92.1版本中,它与Zookeeper 3.3.5协同工作,提供了稳定的数据存储和管理功能。 HBase的设计灵感来源于Google的Bigtable论文,它旨在处理大规模数据集,能够存储PB级别的数据,并且支持实时查询。HBase的...

    Hbase与zookeeper文档

    安装过程完成后,还需要根据实际需求对HBase的配置文件(如`hbase-site.xml`和`hbase-env.sh`)进行调整,比如设置HBase的内存使用、Zookeeper地址、HDFS地址等。 总的来说,HBase是一个强大的分布式数据库,尤其...

    flume+hbase+sqoop+zookeeper的整合包

    在大数据处理领域,Flume、HBase、Sqoop和ZooKeeper是四个非常重要的组件,它们各自承担着不同的角色,并且在很多情况下需要协同工作。这个整合包包含了这些组件的Linux版本,为大数据处理提供了完整的解决方案。 ...

    Hadoop、HBase、Hive、Pig、Zookeeper资料整理

    标题 "Hadoop、HBase、Hive、Pig、Zookeeper资料整理" 涵盖了大数据处理领域中几个核心的开源项目,这些项目在分布式计算、数据存储和管理方面发挥着重要作用。以下是对这些技术的详细介绍: 1. **Hadoop**:Hadoop...

    [Doker+HBASE+HADOOP+Zookeeper]全分布式环境搭建

    [Doker+HBASE+HADOOP+Zookeeper]全分布式环境搭建

    Hbase与zookeeper笔记备份.rar

    《Hbase与Zookeeper深度解析》 在大数据领域,Hbase和Zookeeper是两个至关重要的组件,它们在分布式系统中的作用不可忽视。本篇笔记主要围绕这两个技术进行深入探讨,结合尚硅谷的视频教程资源,旨在帮助读者全面...

    Hadoop Zookeeper HBase集群

    标题 "Hadoop Zookeeper HBase集群" 涉及到的是大数据处理领域中的三个关键组件:Hadoop、Zookeeper和HBase。这三个组件在构建分布式系统中起着至关重要的作用。 首先,Hadoop是Apache软件基金会开发的一个开源框架...

    CentOS-6.4 64位系统下hadoop-2.2.0+hbase-0.96+zookeeper-3.4.5 分布式安装配置

    在本文中,我们将深入探讨如何在CentOS-6.4 64位操作系统上配置一个基于Hadoop 2.2.0、HBase 0.96和Zookeeper 3.4.5的分布式环境。这个过程涉及到多个步骤,包括系统设置、软件安装、配置以及服务启动。 首先,为了...

    大数据入门指南Hadoop,Hive,Spark,Storm,Flink,HBase,Kafka,Zookeeper,Flume

    大数据入门指南Hadoop,Hive,Spark,Storm,Flink,HBase,Kafka,Zookeeper,Flume。包含大数据学习路线、大数据技术栈思维导图、大数据常用软件安装指南、Hadoop、hive、spark等技术的环境搭建、命令实用、集群...

    Hadoop、HBase、Zookeeper安装部署

    在大数据处理领域,Hadoop、HBase和Zookeeper是三个至关重要的组件,它们共同构建了高效、可扩展的数据存储和管理基础设施。以下是关于这三个技术的详细介绍以及安装部署的关键步骤。 **Hadoop** 是一个开源的...

    hadoop,hbase,zookeeper安装笔记

    hadoop,hbase,zookeeper安装笔记hadoop,hbase,zookeeper安装笔记hadoop,hbase,zookeeper安装笔记

    Hadoop2.7.3+HBase1.2.5+ZooKeeper3.4.6 搭建分布式集群环境详解

    在大数据处理领域,Hadoop、HBase和ZooKeeper是三个至关重要的开源组件。本教程将深入探讨如何利用Hadoop2.7.3、HBase1.2.5和ZooKeeper3.4.6搭建一个完整的分布式集群环境,以支持大规模数据存储和处理。 首先,...

Global site tag (gtag.js) - Google Analytics