项目场景:
大致报错-导致spark流失写入数据失败:
IOException: Could not get block locations…Aborting…block==null
问题描述
具体报错如下:
2024-04-18 16:30:44.701 ERROR [dfsSyncThread] Failed writing driver logs to dfs
java.io.IOException: Could not get block locations. Source file "/user/spark/driverLogs/application_1712999280232_0147_driver.log" - Aborting...block==null
at org.apache.hadoop.hdfs.DataStreamer.setupPipelineForAppendOrRecovery(DataStreamer.java:1477)
at org.apache.hadoop.hdfs.DataStreamer.processDatanodeOrExternalError(DataStreamer.java:1256)
at org.apache.hadoop.hdfs.DataStreamer.run(DataStreamer.java:667)
2024-04-18 16:30:47.141 INFO [pool-24-thread-1] 接收数据量:12,处理数据条数:12,总数据量:12
原因分析:
百度大部分说的都是因为防火墙没关,实际我这里全部关闭了的,所以我这里的情况可能不太一样:
查看cdh监控图,主要看hdfs的datanode有没有问题:
发生了告警基本可以判断,这个时候有一个datanode节点挂掉了,后续datanode又重启好了,时间上非常吻合。重启好后,业务流程 也没有报警。证实此次原因主要是因为,datanode挂掉导致的
总结:
IOException: Could not get block locations…Aborting…block==null的原因总结:
1.防火墙未关闭
2.datanode挂掉了导致的,所以才报block==null