问题和现象:
这是一个连锁反应:
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,然后恢复之前的文件。
- 浏览: 351141 次
文章分类
最新评论
-
jfeifjlafekae:
另外,为什么存储日志会有拆分过程,而不是rotation方式? ...
HBASE数据架构 -
jfeifjlafekae:
“当然,数据刷写时,一个Region只要有一个列族的memSt ...
HBASE数据架构 -
hmc52107521:
你好,params.keys,params.values以及# ...
mybatis中使用map类型参数,其中key为列名,value为列值 -
zhangxiong0301:
qindongliang1922 写道AM中其它与内存相关的参 ...
(转)YARN内存配置 -
qindongliang1922:
AM中其它与内存相关的参数,还有JVM相关的参数,这些参数可以 ...
(转)YARN内存配置
发表评论
-
HBase安全及namespace操作
2015-09-18 19:37 47621、介绍 在HBase中,namespace命名空 ... -
How-to: Use HBase Bulk Loading, and Why
2015-06-26 16:46 1386Hbase对外提供随机、实时的读写访问大数据, ... -
HBase的Block Cache实现机制分析
2015-06-19 11:45 549本文结合HBase 0.94.1版本源码,对H ... -
hbase中的MSLAB
2015-06-19 10:21 1185CDH用MSLAB避免Hbas ... -
hbase优化(1)
2015-06-18 11:16 745因官方Book Performance Tuning部分章节 ... -
实时系统HBase读写优化--大量写入无障碍
2015-06-18 10:55 3852在使用hbase过程中发现在写入hbase的数据量很大时,经 ... -
hbase0.96—+版本的endpoint
2015-04-21 17:16 887HBase Coprocessor 之 endpio ... -
hbase observer
2015-04-21 10:28 955Hbase自0.92之后开始支持 ... -
hbase block cache中的in-memory
2015-04-21 10:26 1136每load一个block到cache时,都会检查当前cache ... -
hbase0.94之后split策略
2015-04-18 15:57 792问题导读1.而在0.94版本之后,默认split策略修改为了 ... -
HBASE COPROCESSOR EndPoint实例
2015-04-18 15:26 1231问题导读:1、统计总行数,理想的方式应该是怎样?2、什么是E ... -
HBASE在QIHOO 360搜索中的应用
2015-04-07 14:10 1402【CSDN现场报道】中国IT ... -
hadoop+hbase+hive日常异常记录
2015-01-12 14:37 10821. 在hvie关联hbase创建外部表时报错: ... -
HBASE API高级特性
2014-12-22 18:17 1757一、过滤器 HBASE过滤器用来过滤数据,减少传输 ... -
HBASE 协处理器入门(转载)
2014-12-20 11:13 962如果要统对hbase中的数据,进行某种统计,比如统计某个字段 ... -
HBASE数据架构
2014-12-17 09:38 20521、数据结构 关系数据库一般用B+树,HBA ... -
HBASE高级应用
2014-12-15 17:53 16761、行健或表设计 基本原则是尽量把查询的维度或信息 ... -
HBASE高级应用
2014-12-15 17:53 8921、行健或表设计 基本 ... -
HBASE ScannerTimeoutException 问题
2014-10-15 10:49 1198在对Hbase进行Scan的时候有时候会抛出ScannerT ... -
hbase维护(转载)
2014-10-15 10:40 652一,基本命令: 建表:create 'testt ...
相关推荐
hbase配置内置的zookeeper;hbase配置内置的zookeeper;
hadoop、hbase、hive、zookeeper版本对应关系续(最新版)
Docker(Hadoop_3.3.1+HBase_2.4.16+Zookeeper_3.7.1+Hive_3.1.3 )配置文件 搭建集群环境
hadoop集群配置流程以及用到的配置文件,hadoop2.8.4、hbase2.1.0、zookeeper3.4.12
HBase即Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在普通的PC Server上搭建起大规模结构化...Google Bigtable利用 Chubby作为协同服务,HBase利用Zookeeper作为对应。
hbase和zookeeper的详细配置
flume+hbase+sqoop+zookeeper的整合包,linux版本,如果还需要别的关于hadoop工具的话可以留言,我再上传
分享一下Hadoop、HBase、Hive、Pig、Zookeeper相关资料。
CentOS-6.4 64位系统下hadoop-2.2.0+hbase-0.96+zookeeper-3.4.5 分布式安装配置
[Doker+HBASE+HADOOP+Zookeeper]全分布式环境搭建
hbase-0.92.1
在Linux虚拟机下的Hadoop集群上配置和安装hbase和zookeeper,
hadoop,hbase,zookeeper安装笔记hadoop,hbase,zookeeper安装笔记hadoop,hbase,zookeeper安装笔记
Hadoop、HBase、Zookeeper安装部署
NULL 博文链接:https://zhengzhuangjie.iteye.com/blog/1408185
尚硅谷版本的视频笔记资源,留着自己备份 怕丢
徐老师大数据培训Hadoop+HBase+ZooKeeper+Spark+Kafka+Scala+Ambari
hadoop2.7.1+hbase2.1.4+zookeeper3.6.2集合
hadoop-2.7.5,hbase1.2.6.zookeeper.3.3.6完全分布式安装教程 hadoop-2.7.5,hbase1.2.6.zookeeper.3.3.6完全分布式安装教程 hadoop-2.7.5,hbase1.2.6.zookeeper.3.3.6完全分布式安装教程