No live nodes contain current block. Will get new block locations from namenode and retry...

来源:互联网 发布:win7一键优化工具 编辑:程序博客网 时间:2024/05/09 14:52

1   多个用户操作hdfs和hbase时,出现以下异常,大概意思就是无法连接datanode,获取不到数据

INFO hdfs.DFSClient: Could not obtain block blk_-3181406624357578636_19200 from any node: java.io.IOException: No live nodes contain current block. Will get new block locations from namenode and retry...13/07/23 09:06:39 WARN hdfs.DFSClient: Failed to connect to /192.168.3.4:50010, add to deadNodes and continuejava.net.SocketException:

2    用hadoop fsck /  检查hdfs文件,结果是healthy,说明节点数据没问题,namenode和datanode应该也一致

3    查看datanode的log  

发现是DataXceiver的问题,DataXceiver的值大于4096了,所以无法提供读写,这个值以前改成4096,现在发现这个值还是太小了

在配置文件中改成:

<property>          <name>dfs.datanode.max.xcievers</name>          <value>12288</value>  </property>

4    问题还是没有解决 接着datanode的log报如下错误

2012-06-18 17:47:13 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode DatanodeRegistration(x.x.x.x:50010, storageID=DS-196671195-10.10.120.67-50010-1334328338972, infoPort=50075, ipcPort=50020):DataXceiverjava.net.SocketTimeoutException: 480000 millis timeout while waiting for channel to be ready for write. ch : java.nio.channels.SocketChannel[connected 

https://issues.apache.org/jira/browse/HDFS-3555  这篇帖子说是客户端的问题,导致datanode无法向客户端写数据,重新检查代码,因为文件较多,发现每次读取数据都没有关闭文件

5  改好后,重启集群,发现hbase启动时无法加载META表

org.apache.hadoop.hbase.NotServingRegionException: org.apache.hadoop.hbase.NotServingRegionException: Region is not online: .META.,,1

http://www.zihou.me/html/2013/06/27/8673.html按照这篇帖子解决,重启后hbse没有问题

6   之后多线程读取数据时,一段时间后,仍有region无法提供服务,这种情况肯定是datanode的问题,但是DataXceiver已经改成很大,继续查看代码,每次读取数据时都获取了FileSystem实例,而且没有关闭,更改后,问题解决


总结:其实这个问题和集群没有什么关系DataXceiver设置成4096应该也没问题

自己的问题有2个

第一:每次读文件都没有关闭文件

第二:不要多次获取FileSystem实例

原创粉丝点击