我们有一个有五个节点的hdfs集群。在将新文件写入文件系统时,经常会出现“副本不足”错误或以下错误:
2016-05-29 13:30:03,972 [Thread-486536] INFO org.apache.hadoop.hdfs.DFSClient - Exception in createBlockOutputStream
java.io.IOException: Got error, status message , ack with firstBadLink as 10.100.1.22:50010
at org.apache.hadoop.hdfs.protocol.datatransfer.DataTransferProtoUtil.checkBlockOpStatus(DataTransferProtoUtil.java:142) ~[hadoop-hdfs-2.7.1.jar!/:na]
...
2016-05-29 13:30:03,972 [Thread-486536] INFO org.apache.hadoop.hdfs.DFSClient - Abandoning BP-1195099512-10.100.1.21-1454597789659:blk_1085523876_11792285
2016-05-29 13:30:03,977 [Thread-486536] INFO org.apache.hadoop.hdfs.DFSClient - Excluding datanode DatanodeInfoWithStorage[10.100.1.22:50010,DS-2f34af8d-234a-4036-a810-908c3b2bd9cf,DISK]
2016-05-29 13:30:04,003 [pool-1272-thread-3] WARN org.apache.hadoop.hdfs.DFSClient - Slow waitForAckedSeqno took 65098ms (threshold=30000ms)
我们也经历了很多这样的情况,这似乎是当大gc'ing发生的时候。
[pool-9-thread-23] WARN org.apache.hadoop.hdfs.DFSClient - Slow waitForAckedSeqno took 34607ms (threshold=30000ms)
[pool-9-thread-30] WARN org.apache.hadoop.hdfs.DFSClient - Slow waitForAckedSeqno took 34339ms (threshold=30000ms)
[pool-9-thread-5] WARN org.apache.hadoop.hdfs.DFSClient - Slow waitForAckedSeqno took 34593ms (threshold=30000ms)
文件系统包含650万个小文件(4-20kb),当我们编写新文件时,节点会随着oom的下降而下降。新文件总是成批编写的,一个批可以是几十万个。
这些节点目前有大量的ram,名称节点为4gb,数据节点为3gb。
这真的是预期的行为吗?为什么节点消耗了这么多内存?
我想增加节点的数量,看看是否可以使用更严格的mem设置,比如1024mb。可能吗?
编辑:我们看到很多gc发生,当gc发生时节点没有响应。
1条答案
按热度按时间4xrmg8kj1#
最终问题是底层存储系统出现故障。将集群移动到硬件机架,添加第二个名称节点,定期将使用过的文件归档到har文件系统中,hdfs是一只快乐的Pandas。
如果您遇到过类似的问题,并且您的平台基于任何类型的虚拟化。立即远离虚拟的混乱。