- 浏览: 137565 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
SINCE1978:
还没细看,似乎取材自一本书《scala与clojure设计模式 ...
Scala设计模式 -
HowKeyond:
补充,我代码中监听了session失效事件,并做了重连,但重连 ...
ZK Timeout再讨论 -
HowKeyond:
请问这一般是什么原因引起的呢?怎么解决?我被这个问题困扰几个星 ...
ZK Timeout再讨论 -
chenchao051:
耶 耶 耶 耶 耶 耶 耶 耶 耶 耶 耶 耶 耶 耶 耶 耶 ...
回答一位网友对Scala的提问 -
dogstar:
唉.唉.唉.唉.唉.唉.唉.唉.唉.唉.唉.唉.唉.唉.唉.
回答一位网友对Scala的提问
一、YouAreDeadException
FATAL org.apache.hadoop.hbase.regionserver.HRegionServer: ABORTING region server serverName=cloud13,60020,1348890729197, load=(requests=0, regions=375, usedHeap=2455, maxHeap=6035): Unhandled exception: org.apache.hadoop.hbase.YouAreDeadException: Server REPORT rejected; currently processing cloud13,60020,1348890729197 as dead server org.apache.hadoop.hbase.YouAreDeadException: org.apache.hadoop.hbase.YouAreDeadException: Server REPORT rejected; currently processing cloud13,60020,1348890729197 as dead server at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:525) at org.apache.hadoop.ipc.RemoteException.instantiateException(RemoteException.java:95) at org.apache.hadoop.ipc.RemoteException.unwrapRemoteException(RemoteException.java:79) at org.apache.hadoop.hbase.regionserver.HRegionServer.tryRegionServerReport(HRegionServer.java:734) at org.apache.hadoop.hbase.regionserver.HRegionServer.run(HRegionServer.java:595) at java.lang.Thread.run(Thread.java:722)
再看一段YouAreDeadException的注释
/** * This exception is thrown by the master when a region server reports and is * already being processed as dead. This can happen when a region server loses * its session but didn't figure it yet. */
很明显,这个是由于session超时引起的,譬如说超时时间是30s,结果30s内没有和服务器取得联系,那么服务器就会认定这个rs超时,等rs再次连接的时候,就会出现这个异常。这个问题极有可能是由于GC引起的,请留意GC日志。
--------------------------------------------------分割线------------------------------------------------------------
二、Got error for OP_READ_BLOCK
2012-10-09 02:22:41,788 WARN org.apache.hadoop.hdfs.DFSClient: Failed to connect to /10.0.1.170:50010 for file /hbase/pp_mac_all/784dcfc3fa060b66402a242080f5cd91/nf/5190449121954817199 for block blk_5558099265298248729_681382:java.io.IOException: Got error for OP_READ_BLOCK, self=/10.0.1.170:23458, remote=/10.0.1.170:50010, for file /hbase/pp_mac_all/784dcfc3fa060b66402a242080f5cd91/nf/5190449121954817199, for block 5558099265298248729_681382 at org.apache.hadoop.hdfs.DFSClient$BlockReader.newBlockReader(DFSClient.java:1476) at org.apache.hadoop.hdfs.DFSClient$DFSInputStream.fetchBlockByteRange(DFSClient.java:1992) at org.apache.hadoop.hdfs.DFSClient$DFSInputStream.read(DFSClient.java:2066) at org.apache.hadoop.fs.FSDataInputStream.read(FSDataInputStream.java:46) at org.apache.hadoop.hdfs.DFSClient$DFSInputStream.read(DFSClient.java:2066) at org.apache.hadoop.fs.FSDataInputStream.read(FSDataInputStream.java:46) at org.apache.hadoop.hbase.io.hfile.BoundedRangeFileInputStream.read(BoundedRangeFileInputStream.java:101) at java.io.BufferedInputStream.read1(BufferedInputStream.java:273) at java.io.BufferedInputStream.read(BufferedInputStream.java:334) at org.apache.hadoop.io.IOUtils.readFully(IOUtils.java:113) at org.apache.hadoop.hbase.io.hfile.HFile$Reader.decompress(HFile.java:1094) at org.apache.hadoop.hbase.io.hfile.HFile$Reader.readBlock(HFile.java:1036) at org.apache.hadoop.hbase.io.hfile.HFile$Reader$Scanner.loadBlock(HFile.java:1442) at org.apache.hadoop.hbase.io.hfile.HFile$Reader$Scanner.seekTo(HFile.java:1299) at org.apache.hadoop.hbase.regionserver.StoreFileScanner.seekAtOrAfter(StoreFileScanner.java:136) at org.apache.hadoop.hbase.regionserver.StoreFileScanner.seek(StoreFileScanner.java:96) at org.apache.hadoop.hbase.regionserver.StoreScanner.<init>(StoreScanner.java:77) at org.apache.hadoop.hbase.regionserver.Store.getScanner(Store.java:1351) at org.apache.hadoop.hbase.regionserver.HRegion$RegionScanner.<init>(HRegion.java:2284) at org.apache.hadoop.hbase.regionserver.HRegion.instantiateInternalScanner(HRegion.java:1135) at org.apache.hadoop.hbase.regionserver.HRegion.getScanner(HRegion.java:1127) at org.apache.hadoop.hbase.regionserver.HRegion.getScanner(HRegion.java:1111) at org.apache.hadoop.hbase.regionserver.HRegion.get(HRegion.java:3009) at org.apache.hadoop.hbase.regionserver.HRegion.get(HRegion.java:2911) at org.apache.hadoop.hbase.regionserver.HRegionServer.get(HRegionServer.java:1661) at org.apache.hadoop.hbase.regionserver.HRegionServer.multi(HRegionServer.java:2551) at sun.reflect.GeneratedMethodAccessor14.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.apache.hadoop.hbase.ipc.HBaseRPC$Server.call(HBaseRPC.java:570) at org.apache.hadoop.hbase.ipc.HBaseServer$Handler.run(HBaseServer.java:1039)
一般看到这个异常,都没什么关系。
这个问题是由于读hdfs中的block的时候出的问题,看DFSClient中的一段代码:
while (true) { // cached block locations may have been updated by chooseDataNode() // or fetchBlockAt(). Always get the latest list of locations at the // start of the loop. block = getBlockAt(block.getStartOffset(), false); DNAddrPair retval = chooseDataNode(block); DatanodeInfo chosenNode = retval.info; InetSocketAddress targetAddr = retval.addr; BlockReader reader = null; int len = (int) (end - start + 1); try { Token<BlockTokenIdentifier> accessToken = block.getBlockToken(); // first try reading the block locally. if (shouldTryShortCircuitRead(targetAddr)) { try { reader = getLocalBlockReader(conf, src, block.getBlock(), accessToken, chosenNode, DFSClient.this.socketTimeout, start); } catch (AccessControlException ex) { LOG.warn("Short circuit access failed ", ex); //Disable short circuit reads shortCircuitLocalReads = false; continue; } } else { // go to the datanode dn = socketFactory.createSocket(); NetUtils.connect(dn, targetAddr, socketTimeout); dn.setSoTimeout(socketTimeout); reader = BlockReader.newBlockReader(dn, src, block.getBlock().getBlockId(), accessToken, block.getBlock().getGenerationStamp(), start, len, buffersize, verifyChecksum, clientName); } int nread = reader.readAll(buf, offset, len); if (nread != len) { throw new IOException("truncated return from reader.read(): " + "excpected " + len + ", got " + nread); } return; } catch (ChecksumException e) { LOG.warn("fetchBlockByteRange(). Got a checksum exception for " + src + " at " + block.getBlock() + ":" + e.getPos() + " from " + chosenNode.getName()); reportChecksumFailure(src, block.getBlock(), chosenNode); } catch (IOException e) { if (refetchToken > 0 && tokenRefetchNeeded(e, targetAddr)) { refetchToken--; fetchBlockAt(block.getStartOffset()); continue; } else { LOG.warn("Failed to connect to " + targetAddr + " for file " + src + " for block " + block.getBlock() + ":" + e); if (LOG.isDebugEnabled()) { LOG.debug("Connection failure ", e); } } } finally { IOUtils.closeStream(reader); IOUtils.closeSocket(dn); } // Put chosen node into dead list, continue addToDeadNodes(chosenNode); }
以上代码结合异常信息,可以得出hdfs在读block时出了问题,
OP_READ_BLOCK 是读数据块的操作,最后一句addToDeadNodes(chosenNode)并不是说将这个DataNode直接加到deadlist中,而只是在这次操作中不会再去使用这个dn。
可以看一下这段注释:
/** * This variable tracks the number of failures since the start of the * most recent user-facing operation. That is to say, it should be reset * whenever the user makes a call on this stream, and if at any point * during the retry logic, the failure count exceeds a threshold, * the errors will be thrown back to the operation. * * Specifically this counts the number of times the client has gone * back to the namenode to get a new list of block locations, and is * capped at maxBlockAcquireFailures */ private int failures = 0;
发表评论
-
简单HBase笔记
2012-10-26 16:35 1971一、Client-side write buffe ... -
诡异的超长时间GC问题定位
2012-10-19 16:45 4354HBase的GC策略采用PawNew+CMS, 这是大众化的配 ... -
ZK Timeout再讨论
2012-10-18 15:29 29852http://crazyjvm.iteye.com/blog/ ... -
HBase集群中的某几台rs挂掉后导致整个集群挂掉的案例
2012-10-10 09:35 0集群规模(小型):13dn 6rs 现象:2台rs在很短 ... -
HBase日志中的异常记录1
2012-10-09 10:49 2晕菜了,这狗屁编辑器把我的格式全弄没了...mlgbd! 异 ... -
zookeeper超时--minSessionTimeout与maxSessionTimeout
2012-10-08 16:55 11100很多同学可能有这样的疑问,我明明把连接zk客户端的超时 ... -
HBase备份与还原
2012-09-18 13:53 2788转载两篇相关文章: 第一篇、http://blog.nosq ... -
Thrift安装中出现的问题(For HBase)
2012-09-06 10:55 1886安装巨简单: 进入thrif ... -
hadoop 0.20.203 数据迁移至 cdh3u3
2012-08-29 08:40 1480假如用hadoop0.20.203版本,hbase会提 ... -
HBase Backup Options
2012-08-23 15:24 1317If you are thinking about using ... -
HBase LRU源码解析
2012-08-13 14:52 2462先来看下LruBlockCache的构造,关键是看清每个参数的 ... -
HBase RegionServer挂掉后的源码分析
2012-08-13 11:20 4116首先肯定是HMaster通过ZK发现某RS挂掉了,HMaste ... -
HBase架构简介
2012-08-06 10:47 1154HBase的架构简介,有兴趣的可以看看。
相关推荐
当遇到“hbase zk异常启动不了”的问题时,通常意味着HBase依赖的ZooKeeper服务出现了故障,这可能是由多种原因导致的。在给定的描述中,我们发现了一个具体的问题:Linux磁盘空间满导致HBase宕机,同时ZooKeeper的...
`put`方法用于插入单条记录,而`batch`方法则可以处理多条记录,提高了效率。批量操作将所有待写入的数据先放入内存,然后一次性提交到HBase,减少了网络传输和磁盘I/O。 4. **预处理数据**: 在批量导入前,通常...
- **监控与告警**:提供监控接口,可以监控同步状态并设置异常告警。 **5. 应用场景** 这种数据同步方案适用于需要实时查询分析的场景,如日志分析、监控系统、推荐系统等,通过HBase存储大量原始数据,利用Elastic...
- `hbase hbck2 -forceRegionStateNormal`: 强制将所有Region设置为开放状态,用于处理Region状态异常。 3. **处理孤儿Region**: - `hbase hbck2 -orphanHFiles`: 查找并处理孤儿HFile,即那些不在任何Region内...
10. **异常处理**:在操作HBase时,可能会遇到各种异常,如`IOException`、`TableNotFoundException`、`ConstraintException`等,需要适当地捕获并处理这些异常。 在实践中,你可能需要根据具体需求对上述步骤进行...
10. **监控和日志**:使用HBase提供的监控接口和日志系统,可以跟踪集群的健康状况、性能指标以及异常信息。 通过以上步骤,你可以开始探索和使用HBase。对于更复杂的应用场景,如分布式部署、安全性设置、数据备份...
WAL用于记录尚未被持久化到磁盘的数据,以防服务异常重启时丢失数据。 2. **MemStore更新**:数据写入WAL之后,会被放入`MemStore`。如果`MemStore`已满,则会触发flush操作,将内存中的数据写入新的`HFile`中,并...
1. **在线存取**:用于处理用户的实时读写操作,如电商交易产生的各种记录。 2. **高吞吐数据写入**:适用于日志、消息、监控、聊天等需要高吞吐写入的数据存储需求。 3. **海量数据实时写入与查询**:特别适合安全...
MySQL是一个流行的开源RDBMS,它支持SQL语言,用于创建、查询、更新和删除数据库中的记录。在本场景中,我们需要从MySQL中读取数据。这通常通过编写SQL查询来完成,查询结果可以是表格形式,包含多行多列的数据。 ...
2. **数据血缘**:当通过HBase Hook在HBase中创建、修改或删除表时,这些操作的血缘信息会自动记录在Atlas中。血缘追踪有助于理解数据来源、数据处理过程和数据间的依赖关系,对问题排查和审计非常有用。 3. **安全...
- **数据丢失与读写异常**:通过修复已知的Bug、增强数据校验机制以及优化Split流程等手段可以有效减少这类问题的发生。 #### 性能优化 - **SplitRegion的影响**:频繁的Split操作会消耗资源,影响整体性能。合理...
本文将深入探讨如何基于Hadoop和HBase这两种强大的大数据处理技术,对电商交易记录进行有效分析。 Hadoop是Apache基金会开发的一个开源框架,专门用于处理和存储大规模数据。它采用了分布式计算模式,能够处理PB...
远程日志(remotelog)是同步复制中的一个关键组件,它记录了未被异步复制处理的数据。远程日志的内容、格式以及组织方式都是设计复制系统时需要考虑的因素。远程日志的清除机制同样重要,它确保了在异步复制完成后...
- **思路**:通过模拟用户操作来监测HBase系统的异常情况,例如检查每个RegionServer上是否有Region存在、定期对所有RegionServer执行简单的读写操作并记录响应时间等。 - **报警规则**:如果发现某个RegionServer...
HBase是一款分布式、面向列的存储系统,是基于Google的Bigtable模型...而且,API调用时要注意异常处理,并合理地管理HBase连接的生命周期。正确的使用HBase API不仅可以提升系统的性能,还可以避免不必要的资源浪费。
- **海量数据支持**:HBase能够存储千亿级别的记录,数据量达到PB级别,非常适合处理大量的网页数据。 - **多版本支持**:网页信息往往会有多版本,HBase可以存储网页的历史版本,便于版本追踪和信息回溯。 - **高...
`Put`对象代表要插入HBase的一条记录,可以指定行键和列族、列的值。 8. **写入HBase**:通过`Table`对象的`put(Put put)`方法,将解析后的`Put`对象写入HBase。如果数据量很大,可以考虑使用批量写入,如`Table`的...
1. **系统日志分析**:查看RegionServer、Master节点的日志,寻找异常信息。 2. **Zookeeper检查**:确认Zookeeper中的region状态和分配是否正确。 3. **HBCK检查**:运行HBCK工具来识别和修复一致性问题。 4. **...