hadoop的datanode异常结束

本文记录了一次Hadoop集群中datanode节点出现故障的排查过程,包括错误日志分析、网络及磁盘IO问题排查,并最终通过配置文件调整解决了问题。
集群datanode节点挂掉一个。错误如下:


2013-11-18 02:01:13,730 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: DatanodeRegistration(192.168.1.190:50010, storageID=DS-155659652-192.168.1.190-50010-1383619740465, infoPort=50075, ipcPort=50020):DataXceiver
java.io.InterruptedIOException: Interruped while waiting for IO on channel java.nio.channels.SocketChannel[closed]. 0 millis timeout left.
        at org.apache.hadoop.net.SocketIOWithTimeout$SelectorPool.select(SocketIOWithTimeout.java:349)
        at org.apache.hadoop.net.SocketIOWithTimeout.doIO(SocketIOWithTimeout.java:157)
        at org.apache.hadoop.net.SocketInputStream.read(SocketInputStream.java:155)
        at org.apache.hadoop.net.SocketInputStream.read(SocketInputStream.java:128)
        at java.io.BufferedInputStream.read1(BufferedInputStream.java:256)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
        at java.io.DataInputStream.read(DataInputStream.java:132)
        at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.readToBuf(BlockReceiver.java:292)
        at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.readNextPacket(BlockReceiver.java:382)
        at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receivePacket(BlockReceiver.java:403)
        at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receiveBlock(BlockReceiver.java:581)
        at org.apache.hadoop.hdfs.server.datanode.DataXceiver.writeBlock(DataXceiver.java:406)
        at org.apache.hadoop.hdfs.server.datanode.DataXceiver.run(DataXceiver.java:112)
        at java.lang.Thread.run(Thread.java:619)
2013-11-18 02:01:14,731 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Waiting for threadgroup to exit, active threads is 0
2013-11-18 02:01:28,233 INFO org.apache.hadoop.hdfs.server.datanode.DataBlockScanner: Verification succeeded for blk_106200183580401997_8995735
2013-11-18 02:01:28,233 INFO org.apache.hadoop.hdfs.server.datanode.DataBlockScanner: Exiting DataBlockScanner thread.
2013-11-18 02:01:28,234 INFO org.apache.hadoop.hdfs.server.datanode.FSDatasetAsyncDiskService: Shutting down all async disk service threads...
2013-11-18 02:01:28,234 INFO org.apache.hadoop.hdfs.server.datanode.FSDatasetAsyncDiskService: All async disk service threads have been shut down.
2013-11-18 02:01:28,242 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Exiting Datanode
2013-11-18 02:01:28,243 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down DataNode at node-128-190/192.168.1.190
************************************************************/

(DataXceiver.java:
代码,相应代码如下:

      long startTime = DataNode.now();
      switch ( op ) {
      case DataTransferProtocol.OP_READ_BLOCK:
        readBlock( in );
        datanode.myMetrics.addReadBlockOp(DataNode.now() - startTime);
        if (local)
          datanode.myMetrics.incrReadsFromLocalClient();
        else
          datanode.myMetrics.incrReadsFromRemoteClient();
        break;
      case DataTransferProtocol.OP_WRITE_BLOCK:
        writeBlock( in );
        datanode.myMetrics.addWriteBlockOp(DataNode.now() - startTime);
        if (local)
          datanode.myMetrics.incrWritesFromLocalClient();
是网络io问题,但网卡没问题,联想到磁盘IO.把log向上找去,发现如下错误:

2013-11-18 02:01:11,027 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: DataNode.handleDiskError: Keep Running: false
2013-11-18 02:01:13,042 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: DataNode is shutting down.
DataNode failed volumes:/data3/dfs/data/current;
2013-11-18 02:01:13,043 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Exception in receiveBlock for block blk_-2665830487288
167569_12466770 java.io.IOException: Read-only file system
2013-11-18 02:01:13,043 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: PacketResponder blk_-2665830487288167569_12466770 1 : 
Thread is interrupted.
2013-11-18 02:01:13,043 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: PacketResponder 1 for block blk_-2665830487288167569_1
2466770 terminating
2013-11-18 02:01:13,043 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: writeBlock blk_-2665830487288167569_12466770 received 
exception java.io.IOException: Read-only file system
2013-11-18 02:01:13,043 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: DatanodeRegistration(192.168.1.190:50010, storageID=D
S-155659652-192.168.1.190-50010-1383619740465, infoPort=50075, ipcPort=50020):DataXceiver
java.io.IOException: Read-only file system
        at java.io.FileOutputStream.writeBytes(Native Method)
        at java.io.FileOutputStream.write(FileOutputStream.java:260)
        at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receivePacket(BlockReceiver.java:480)
        at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receiveBlock(BlockReceiver.java:581)
        at org.apache.hadoop.hdfs.server.datanode.DataXceiver.writeBlock(DataXceiver.java:406)
        at org.apache.hadoop.hdfs.server.datanode.DataXceiver.run(DataXceiver.java:112)
        at java.lang.Thread.run(Thread.java:619)
未作修改,重启datanode,发现如下错误。印证了上面的想法:

2013-11-18 14:58:56,962 INFO org.apache.hadoop.metrics2.impl.MetricsConfig: loaded properties from hadoop-metrics2.properties
2013-11-18 14:58:57,005 INFO org.apache.hadoop.metrics2.impl.MetricsSinkAdapter: Sink ganglia started
2013-11-18 14:58:57,020 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source MetricsSystem,sub=Stats registered.
2013-11-18 14:58:57,022 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Scheduled snapshot period at 10 second(s).
2013-11-18 14:58:57,022 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: DataNode metrics system started
2013-11-18 14:58:57,124 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source ugi registered.
2013-11-18 14:58:57,308 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Invalid directory in dfs.data.dir: can not create directory: /data3/dfs/data
2013-11-18 14:58:57,829 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: org.apache.hadoop.util.DiskChecker$DiskErrorException: Invalid value for volsFailed : 1 , Volumes tolerated : 0
        at org.apache.hadoop.hdfs.server.datanode.FSDataset.<init>(FSDataset.java:974)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:403)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:309)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:1651)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1590)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1608)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:1734)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:1751)

2013-11-18 14:58:57,831 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: SHUTDOWN_MSG: 

在hdfs-site.xml里屏蔽掉坏磁盘。搞定。






### Hadoop 集群中主节点停止后的其他节点 DataNode 状态及处理 在Hadoop集群环境中,如果主节点(通常是NameNode)意外停止运行,则会对整个系统的稳定性造成影响。具体来说: - 当NameNode不可用时,DataNodes会尝试定期连接到NameNode以报告状态和接收命令。由于无法建立这种通信链路,这些DataNodes将继续保持在线状态一段时间,但不会执行任何新的I/O操作[^1]。 对于这种情况的处理措施如下: #### 数据一致性保障 为了防止数据丢失或损坏,在重新启动之前应确保所有正在运行的服务已经安全关闭,并且所有的磁盘写入都已完成。这可能涉及到手动终止应用程序或者等待它们自然结束当前的任务周期[^3]。 #### 日志审查与诊断 检查各台机器上的日志文件可以帮助定位问题所在。特别是要关注`/var/log/hadoop/*`路径下的记录,寻找有关错误消息或其他异常行为的信息。通过分析这些日志可以更好地理解为什么某些组件未能按预期工作以及采取何种纠正行动最为合适[^4]。 #### 清除临时存储空间 有时本地缓存或临时文件可能会干扰正常的重启过程。按照官方文档建议清理指定位置的数据目录可能是必要的步骤之一;例如,在CentOS7上搭建环境时遇到类似的问题可通过移除`dfs.data.dir`参数所指向的具体路径内的"data"文件夹来解决问题[^5]。 #### 同步配置更改 确认所有从属节点拥有最新的配置副本非常重要。如果有最近更新过的XML设置文件或者其他资源管理器相关联的部分,请务必同步至每一个参与计算的成员之上。此外还需验证SSH无密码登录机制是否依然有效以便于后续自动化脚本调用无障碍[^2]。 #### 逐步恢复服务 最后一步是在解决了上述潜在障碍之后依次唤醒各个组成部分直至整体恢复正常运作模式。先单独激活NameNode再让其余部分跟随其指示加入进来是最稳妥的做法。 ```bash # 停止所有节点上的Hadoop进程 stop-dfs.sh stop-yarn.sh # 在主节点上格式化Namenode (仅当必要时) hdfs namenode -format # 开始重建集群 start-dfs.sh start-yarn.sh ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值