我有一个java的spark应用程序,运行在aws emr上。我实现了一个基于可用内存的自动缩放策略。对于需要更高内存的作业,emr会将集群提升到1+8个节点。
在我工作的一个时间点之后,我不断地得到下面的错误,这个错误持续了几个小时,然后我手动终止集群。
java.io.IOException: All datanodes [DatanodeInfoWithStorage[<i.p>:50010,DS-4e7690c7-5946-49c5-b203-b5166c2ff58d,DISK]] are bad. Aborting...
at org.apache.hadoop.hdfs.DataStreamer.handleBadDatanode(DataStreamer.java:1531)
at org.apache.hadoop.hdfs.DataStreamer.setupPipelineForAppendOrRecovery(DataStreamer.java:1465)
at org.apache.hadoop.hdfs.DataStreamer.processDatanodeError(DataStreamer.java:1237)
at org.apache.hadoop.hdfs.DataStreamer.run(DataStreamer.java:657)
此错误出现在生成的第一个工作节点中。经过一番挖掘,我发现这可能是因为乌利米特。现在增加ulimit可以在任何linux或ec2机器上手动完成。但我无法获得如何动态地对每个生成的emr集群执行此操作。
此外,我甚至不能100%确定ulimit是否引起了这个问题。这也可能是别的东西。我只能确认一次,我改变ulimit和检查。
暂无答案!
目前还没有任何答案,快来回答吧!