Zbyt wiele otwartych plików w EMR

Dostaję następujący wyjątek w moich reduktorach:

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)

Na reduktora tworzonych jest około 10 000 plików. Czy mogę ustawić ulimit każdego pola?

Próbowałem użyć następującego polecenia jako skryptu ładowania początkowego: ulimit -n 1000000

Ale to wcale nie pomogło.

Próbowałem również wykonać następujące czynności w akcji bootstrap, aby zastąpić komendę ulimit w /usr/lib/hadoop/hadoop-daemon.sh:

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

Ale nawet wtedy, gdy logujemy się do węzła nadrzędnego, widzę, że ulimit -n zwraca: 32768. Potwierdziłem również, że dokonano pożądanej zmiany w /usr/lib/hadoop/hadoop-daemon.sh i miała ona: ulimit -n 134217728.

Czy mamy do tego jakieś konfiguracje hadoop? Czy istnieje obejście tego problemu?

Moim głównym celem jest rozdzielenie rekordów na pliki zgodnie z identyfikatorami każdego rekordu, a teraz jest 1,5 miliarda rekordów, które z pewnością mogą wzrosnąć.

Dowolny sposób edycji tego pliku przed uruchomieniem tego demona na każdym urządzeniu podrzędnym?

questionAnswers(4)

yourAnswerToTheQuestion