Zu viele offene Dateien in EMR

Ich bekomme folgende Auszeichnung in meinen Reduzierstücken:

EMFILE: Too many open files
    at org.apache.hadoop.io.nativeio.NativeIO.open(Native Method)
    at org.apache.hadoop.io.SecureIOUtils.createForWrite(SecureIOUtils.java:161)
    at org.apache.hadoop.mapred.TaskLog.writeToIndexFile(TaskLog.java:296)
    at org.apache.hadoop.mapred.TaskLog.syncLogs(TaskLog.java:369)
    at org.apache.hadoop.mapred.Child$4.run(Child.java:257)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:396)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059)
    at org.apache.hadoop.mapred.Child.main(Child.java:249)

Pro Reduzierer werden ca. 10.000 Dateien erstellt. Gibt es eine Möglichkeit, wie ich das Ulimit jeder Box einstellen kann.

Ich habe versucht, den folgenden Befehl als Bootstrap-Skript zu verwenden: ulimit -n 1000000

Aber das hat überhaupt nicht geholfen.

Ich habe auch Folgendes in der Bootstrap-Aktion versucht, um den Befehl ulimit in /usr/lib/hadoop/hadoop-daemon.sh zu ersetzen:

#!/bin/bash
set -e -x
sudo sed -i -e "/^ulimit /s|.*|ulimit -n 134217728|" /usr/lib/hadoop/hadoop-daemon.sh

Aber selbst dann, wenn wir uns beim Masterknoten anmelden, kann ich sehen, dass ulimit -n zurückgibt: 32768. Ich habe auch bestätigt, dass die gewünschte Änderung in /usr/lib/hadoop/hadoop-daemon.sh vorgenommen wurde und ulimit -n hatte 134217728.

Haben wir dafür Hadoop-Konfigurationen? Oder gibt es eine Problemumgehung dafür?

Mein Hauptziel ist es, Datensätze nach den IDs der einzelnen Datensätze in Dateien aufzuteilen. Derzeit gibt es 1,5 Milliarden Datensätze, die sicherlich zunehmen können.

Gibt es eine Möglichkeit, diese Datei zu bearbeiten, bevor dieser Daemon auf jedem Slave ausgeführt wird?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage