- 浏览: 353578 次
- 性别:
- 来自: 杭州
最新评论
-
penkee:
为何我启动 zookKeeper bookie 10 不能创 ...
bookkeeper安装及测试体验 -
Golden-jin:
1楼也好时髦呀
bookkeeper简单分析 -
xGss2000:
要是减少到300个 region,block就0.04s了。话 ...
多region下的hbase写入问题 -
brandom520:
请问lz,我从hbase0.94版本上的数据导入到0.96.1 ...
在不同版本hdfs集群之间转移数据 -
huanghaifeng1990:
您好,我想请问一下,我执行了会发生OOM溢出的Deflater ...
perftools查看堆外内存并解决hbase内存溢出
lease引发的血案
- 博客分类:
- hbase
今天线上出现了一个故障惊出一身冷汗,经过查明原来是lease引发的问题。不过查问题的过程让我们耽误了很多修复故障的时间,很是不爽。
起因:datanode和regionserver以及master同时挂掉
现象:datanode重启后,regionserver重启不久,多台regionserver相继即挂掉,log显示:
看起来是datanode的问题,但是登陆datanode发现木有问题。于是再重启regionserver,过一会又报同样的错误退出...
于是开始查系统的问题。半个小时过去鸟。。。
实在查不到原因,再重启,发现系统好了。。。
原因:datanode挂掉的时候,regionserver正在写hlog,这是一个append的过程。当regionserver也挂掉后,则相应的块的client也断开了,很自然这个block连同它的备份都处于需要修复的状态。由于master也挂掉了,所以master被备机接管。接管时候有一步是检查哪些region server处于online状态(waitForRegionServers)。不处于online状态的rs(默认的配置下有一定概率在线的rs也会被判断为不在线,如果hbase.master.wait.on.regionservers.timeout设置为大于6秒则不会出现这种情况)会被master强制执行recoverFileLease。于是引发了namenode对这个block发起recovery block过程,这个过程抢占了lease。当其它region server需要读这个文件或者其它这个datanode原先持有的block的时候都会发现需要recovery block,这个过程由于抢占不到lease导致失败。而写hlog阶段的失败regionserver的处理逻辑是让自己挂掉(这样最安全)。于是会发现凡是需要写这个hlog的region server会连续挂掉。
虽然regionserver挂掉了,但是它对这个坏块仍然发起过一次写操作,于是这个block上的lease由1小时的硬lease降级为了1分钟的软lease,即1分钟后租约消失。所以1分钟后再次发起请求就恢复正常了。
但是为什么再次重启regionserver也挂掉了呢?原因是当时datanode上面还有其它正在被写的hlog的block,所以多重启几次就好了。事实上当时如果我们不等待这半小时而是直接手忙脚乱重启的话,故障就会更快恢复了。。。
结论:master和regionserver不能同时挂掉。只要不是同时挂掉,就不会导致recovery block的发生,也就不会发生lease的杯具了。不过这种情况很难发生,所以我们决定将hbase.master.wait.on.regionservers.timeout参数改为10秒。
大师威武,感激艳堂
master发起lease recovery在先,rs写满hlog滚动log时需要recovery在后,这两者间隔在1分钟以内的话就挂了。P.S:修改了下原文,再看下吧。还有,这里挂的rs并不是原先被重启的那一台,而是其它好几台的rs
今天再review了一下,稍改了下原文
起因:datanode和regionserver以及master同时挂掉
现象:datanode重启后,regionserver重启不久,多台regionserver相继即挂掉,log显示:
org.apache.hadoop.hbase.regionserver.wal.HLog: Could not append. Requesting close of hlog java.io.IOException: Reflection at org.apache.hadoop.hbase.regionserver.wal.SequenceFileLogWriter.sync(SequenceFileLogWriter.java:147) at org.apache.hadoop.hbase.regionserver.wal.HLog.sync(HLog.java:994) at org.apache.hadoop.hbase.regionserver.wal.HLog.completeCacheFlush(HLog.java:1176) at org.apache.hadoop.hbase.regionserver.HRegion.internalFlushcache(HRegion.java:1038) at org.apache.hadoop.hbase.regionserver.HRegion.internalFlushcache(HRegion.java:929) at org.apache.hadoop.hbase.regionserver.HRegion.doClose(HRegion.java:571) at org.apache.hadoop.hbase.regionserver.HRegion.close(HRegion.java:524) at org.apache.hadoop.hbase.regionserver.handler.CloseRegionHandler.process(CloseRegionHandler.java:120) at org.apache.hadoop.hbase.executor.EventHandler.run(EventHandler.java:151) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.hadoop.hbase.regionserver.wal.SequenceFileLogWriter.sync(SequenceFileLogWriter.java:145) ... 11 more Caused by: java.io.IOException: Error Recovery for block blk_-5430512709521689588_45878056 failed because recovery from primary datanode xx.xx.xx.xx:50010 failed 6 times. Pipeline was xx.xx.xx.xx:50010. Aborting... at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.processDatanodeError(DFSClient.java:2841) at
看起来是datanode的问题,但是登陆datanode发现木有问题。于是再重启regionserver,过一会又报同样的错误退出...
于是开始查系统的问题。半个小时过去鸟。。。
实在查不到原因,再重启,发现系统好了。。。
原因:datanode挂掉的时候,regionserver正在写hlog,这是一个append的过程。当regionserver也挂掉后,则相应的块的client也断开了,很自然这个block连同它的备份都处于需要修复的状态。由于master也挂掉了,所以master被备机接管。接管时候有一步是检查哪些region server处于online状态(waitForRegionServers)。不处于online状态的rs(默认的配置下有一定概率在线的rs也会被判断为不在线,如果hbase.master.wait.on.regionservers.timeout设置为大于6秒则不会出现这种情况)会被master强制执行recoverFileLease。于是引发了namenode对这个block发起recovery block过程,这个过程抢占了lease。当其它region server需要读这个文件或者其它这个datanode原先持有的block的时候都会发现需要recovery block,这个过程由于抢占不到lease导致失败。而写hlog阶段的失败regionserver的处理逻辑是让自己挂掉(这样最安全)。于是会发现凡是需要写这个hlog的region server会连续挂掉。
虽然regionserver挂掉了,但是它对这个坏块仍然发起过一次写操作,于是这个block上的lease由1小时的硬lease降级为了1分钟的软lease,即1分钟后租约消失。所以1分钟后再次发起请求就恢复正常了。
但是为什么再次重启regionserver也挂掉了呢?原因是当时datanode上面还有其它正在被写的hlog的block,所以多重启几次就好了。事实上当时如果我们不等待这半小时而是直接手忙脚乱重启的话,故障就会更快恢复了。。。
结论:master和regionserver不能同时挂掉。只要不是同时挂掉,就不会导致recovery block的发生,也就不会发生lease的杯具了。不过这种情况很难发生,所以我们决定将hbase.master.wait.on.regionservers.timeout参数改为10秒。
评论
7 楼
alexanderdai
2012-04-03
lease非客户端正常回收有两种,一种是其他dfsclient主动force回收,一种是NN对lease的心跳判断,判定lease很久没有心跳了,心跳超时于是租约超时,然后主动走入force调用的相同逻辑代码。
执行逻辑如下:NN找到最后一个block所在的dn,并向dn发recoverblock命令,dn flush到磁盘后会向NN发送一个comit操作(全局互斥),NN在comit操作中会将pending的数据结构挂到正常数据结构中。
执行逻辑如下:NN找到最后一个block所在的dn,并向dn发recoverblock命令,dn flush到磁盘后会向NN发送一个comit操作(全局互斥),NN在comit操作中会将pending的数据结构挂到正常数据结构中。
6 楼
piaoya
2012-01-14
上周也遇到一个lease引发的线上血案~~~baggioss也清楚啊。哈哈。lease这东西,总是这么巧的被触发做recovery...
5 楼
lc_koven
2011-12-21
nopower 写道
发起lease recovery的不是datanode吧,貌似是NN?lease是针对文件而言的,DN只管block,所以不大可能是他发起的,回头我再看看代码。庄哥威武。
大师威武,感激艳堂
4 楼
lc_koven
2011-12-21
baggioss 写道
为什么会有多个人同时出发lease recovery? 我印象里split hlog不是有hmaster干的吗? lease的 owner 应该只有一个才对呀。
master发起lease recovery在先,rs写满hlog滚动log时需要recovery在后,这两者间隔在1分钟以内的话就挂了。P.S:修改了下原文,再看下吧。还有,这里挂的rs并不是原先被重启的那一台,而是其它好几台的rs
3 楼
lc_koven
2011-12-21
nopower 写道
发起lease recovery的不是datanode吧,貌似是NN?lease是针对文件而言的,DN只管block,所以不大可能是他发起的,回头我再看看代码。庄哥威武。
今天再review了一下,稍改了下原文
2 楼
baggioss
2011-12-21
为什么会有多个人同时出发lease recovery? 我印象里split hlog不是有hmaster干的吗? lease的 owner 应该只有一个才对呀。
1 楼
nopower
2011-12-20
发起lease recovery的不是datanode吧,貌似是NN?lease是针对文件而言的,DN只管block,所以不大可能是他发起的,回头我再看看代码。庄哥威武。
发表评论
-
hbase写被block住的典型案例分析
2011-11-10 22:32 5941今天一个线上集群出现莫名奇妙不能写入数据的bug,lo ... -
在不同版本hdfs集群之间转移数据
2011-10-26 18:56 7208本文仅供记录一下程序心得: 很多人会有这样一个需求:将 ... -
hbase中的deleteColumn
2011-10-26 16:59 5163Delete类的接口有两个方法:deleteColum ... -
splitlog期间丢失数据的问题
2011-10-18 22:26 3702splitlog是保证在重启或rs挂掉后,恢复hlog ... -
hbase中多次加载root及meta的bug
2011-10-18 22:24 3197执行以下case可以见到root或meta被加载两次: ... -
两次hbase丢失数据的故障及原因分析
2011-10-18 18:12 16789hbase的稳定性是近期社区的重要关注点,毕竟稳定的系 ... -
hbase中regionserver常见的oom原因分析
2011-09-15 10:40 9076首先要清楚reginserver中内存是如何使用的。 ... -
hbase的export与import工具
2011-09-01 08:01 11317hbase提供了导出表的方案,将指定的表导出到HDFS ... -
disable table失败的处理
2011-08-30 20:02 4344相信每一个维护hbase集群的运维人员一定碰到过dis ... -
使用zookeeper管理多个hbase集群
2011-08-16 15:30 18162zookeeper是hbase集群的"协调器 ... -
一次奇异的getRegionInfo异常定位
2011-08-10 19:55 2526今天在线上环境的 ... -
多region下的hbase写入问题
2011-08-10 13:13 9251最近在集群上发现hbase写入性能受到较大下降,测试环 ... -
hbase上应用lucene创建索引及检索
2011-07-21 17:14 11621hbasene(https://github.com/ ... -
hbase-0.90.4的主要更新
2011-07-15 22:15 2819apache邮件列表中提 ... -
hbase中缓存的优先级
2011-06-15 16:30 4134今天同事问到hbase中in-memory属性的作用, ... -
hbase交流记录
2011-06-02 10:34 3543前几天和公司的同事杨传辉(http://www.nosqlno ... -
secondary index for hbase
2011-05-07 23:05 5800最近因为业务需求 ... -
hdfs上的append测试
2011-05-04 23:42 6557hbase在写入数据之前会先写hlog,hlog目前是se ... -
hbase写入性能影响续
2011-04-18 15:28 10606今天发现hbase在写入一张新表时,写入过程中时常会出 ... -
hbase中的缓存的计算与使用
2011-04-13 20:20 8371hbase中的缓存分了两层:memstore和b ...
相关推荐
可以对dhcpd.lease 文件整理成以tab分隔的文本文件,支持以IP地址,starts,ends,mac等字段排序,可支持控制台直接输出,或指定输出文件,可以删除过期的IP分配记录并生成新的dhcpd.lease文件,(或直接更新原dhcpd....
Oracle Lease Management用户指南是Oracle公司为11i版本发布的一份详细文档,旨在帮助用户理解和操作Oracle Lease Management系统。该指南由G. Kundahl和J. Litwin主要编写,版权归属Oracle公司,涵盖2002年和2007年...
lease.sql
Lease Expired(解决方案).md
很抱歉,根据您提供的信息,"566885653546083lease_car-master.zip"是一个压缩文件,但没有提供足够的详细信息来生成超过1000字的IT知识文章。通常,这样的文件名可能是某个开源项目、代码库或者数据集的名称,...
Lease Renewal Failed(解决方案).md
Invalid DHCP Lease(解决方案).md
Oracle Lease Management Implementation Guide Release 11i 是一份详细的文档,旨在指导用户在Oracle数据库系统上部署和配置租赁管理模块。这个版本(11i)是Oracle应用产品的一部分,专为处理租赁合同、财务管理和...
租赁协议(LEASE AGREEMENT)是企业或个人在租赁房产时所签署的一种法律文件,它规定了出租人(LESSOR)和承租人(LESSEE)之间的权利和义务。以下是这份租赁协议中的关键知识点: 1. **租赁双方**:协议中明确指出了...
在IT行业中,"Lease"一词通常与网络协议、分布式系统或数据库管理中的租赁机制有关。在这种机制中,一个实体(通常是客户端)获取对某个资源的临时使用权,这种使用权在一定时间后会自动失效,除非它被续租。这个...
git clone https://github.com/andrewsbrown/lease-savings-calculator 在克隆目录中, bower update 执照 麻省理工学院许可证 (MIT) 版权所有 (c) 2014 安德鲁·布朗 特此授予任何人免费获得本软件副本和相关文档...
《Hibernate 框架深度解析:以 hibernate-lease-4.3.5Final.jar 为例》 在Java世界中,Hibernate是一个广受欢迎的对象关系映射(ORM)框架,它极大地简化了数据库操作,使开发者可以更专注于业务逻辑而不是底层的...
该项目采用Java新版本技术,精心设计并实现了基于Lease协议的源码,共计361个文件,包括299个Java源文件、60个XML配置文件和2个YAML文件,旨在提供高效稳定的资源租赁解决方案。
《深入剖析Java租赁系统——lease-system》 在IT行业中,租赁系统已经成为许多企业和行业的核心业务模块,用于管理和跟踪各种租赁资产。"lease-system"便是这样一款专为租赁业务设计的系统,它基于Java技术栈构建,...
《Lease-Orb后端应用程序的深度剖析》 在当今的互联网技术领域,后端开发扮演着至关重要的角色,它是任何复杂应用的核心部分。本文将深入探讨名为“Lease-Orb”的后端应用程序,这是一款专为租赁业务定制的高效能...
建筑材料租赁系统,后端框架SSM,前端框架LayUI,数据库MySQL,开发工具IDEA,Web服务_Lease
OSCI组织最新lease出来的传输级建模指导实验,对初学者快速认识TLM中的一些基本概念很有用,本实验经作者修改并调试通过。-The tutorial1 of TLM-2.0 which is released frm OSCI group!
lease = Lease ( 2000 ) ; function get ( cb ) { function criticalSection ( err , release ) { if ( err ) { if ( 'AlreadyLeasedError' === err . name ) return ; return cb ( err ) ; } setTimeout ( ...
sap press doc 解压密码:abap_developer
- **max-lease-time**:指定客户端可以持有的最大租期长度(同样以秒为单位),通常设置为比`default-lease-time`更长。 - **hardware**:定义客户端的硬件类型及其MAC地址,用于识别特定的网络设备。 - **server-...