开发者社区 问答 正文

Hadoop集群HDFS测试文件上传,小文件可以,大文件DataNode日志警告超出阈值时间

三台服务器,hdsf和yarn都正常启动,几K的小文件正常传输,188M的大文件DataNode日志一直在跑 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Slow BlockReceiver write packet to mirror took 1107ms (threshold=300ms)

然后主机完成上传报错 WARN hdfs.DFSClient: Slow waitForAckedSeqno took 39186ms (threshold=30000ms) put: java.nio.channels.ClosedChannelException

查看文件变小,只有80多M

我觉得是等待阈值时间太小, 请问大佬们如何解决这个问题? 服务器是CentOS7.7 2核4G 1M

很急,谢谢

展开
收起
九厘米的梦 2020-05-23 12:36:40 3130 分享 版权
阿里云 AI 助理回答

遇到Hadoop HDFS上传大文件时出现慢写警告(Slow BlockReceiver/write packet)以及最终的ClosedChannelException,通常意味着数据传输过程中遇到了网络延迟、资源不足或配置不当的问题。针对您描述的情况,可以尝试以下几个解决方案:

  1. 调整HDFS配置参数

    • dfs.datanode.socket.write.timeout:这个参数控制DataNode socket写超时时间,默认值可能较短,您可以适当增加这个值以适应大文件传输。例如,可以在hdfs-site.xml中设置:
      <property>
      <name>dfs.datanode.socket.write.timeout</name>
      <value>60000</value> <!-- 设置为60秒 -->
      </property>
      
    • dfs.client.socket-timeout:客户端socket超时时间,同样可以适当调高。
      <property>
      <name>dfs.client.socket-timeout</name>
      <value>240000</value> <!-- 设置为4分钟 -->
      </property>
      
    • io.file.buffer.size:增加Hadoop读写缓冲区大小,有助于提高文件读写效率。
      <property>
      <name>io.file.buffer.size</name>
      <value>65536</value> <!-- 或更大,如131072 -->
      </property>
      
  2. 检查网络状况:确保服务器之间的网络连接稳定,没有明显的丢包或延迟问题。使用如pingtraceroute等工具进行基本的网络诊断。

  3. 资源优化

    • 确认服务器的CPU和内存资源是否足够。您提到的是2核4G的配置,如果系统负载较高,可能会导致处理大文件时资源紧张。考虑在上传期间减少其他非关键任务的运行。
    • 检查磁盘I/O性能,使用如iostat命令监控磁盘使用情况,必要时优化磁盘配置或升级硬件。
  4. YARN配置:虽然直接与HDFS写入问题关系不大,但确保YARN的资源配置合理,避免因资源调度问题间接影响到HDFS操作。

  5. 重启服务:在修改配置后,记得重启HDFS相关服务(包括NameNode和DataNodes)以使更改生效。

  6. 日志分析:深入分析DataNode的日志,查找是否有其他异常信息,这可能提供更具体的故障线索。

请逐一尝试上述建议,并观察效果。希望这些建议能帮助您解决问题。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答