#amazon-web-services #apache-spark #hdfs #amazon-emr #ulimit
#amazon-веб-сервисы #apache-spark #hdfs #amazon-emr #ulimit
Вопрос:
У меня есть приложение Spark на Java, работающее на AWS EMR. Я внедрил политику автоматического масштабирования на основе доступной памяти yarn. Для заданий, требующих большего объема памяти, 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. Теперь увеличение ulimit можно легко выполнить вручную на любых компьютерах с Linux или EC2. Но я не могу понять, как сделать это динамически для каждого созданного кластера EMR.
Кроме того, я даже не уверен на 100%, является ли ulimit причиной этой конкретной проблемы. Это может быть и что-то еще. Я могу подтвердить только после изменения ограничения и проверки.
Комментарии:
1. Можете ли вы проверить журнал диспетчера узлов для этого узла данных? Проблема также может быть связана с нехваткой свободного места на диске?
2. Лучше использовать
ContainerPendingRatio
вместо памяти yarn. Также смотрите полные журналы.