Muitos arquivos abertos no EMR

Eu estou recebendo a seguinte excpetion em meus redutores:

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)

Por redutor cerca de 10.000 arquivos estão sendo criados. Existe uma maneira que eu possa definir o ulimit de cada caixa.

Eu tentei usar o seguinte comando como um script de bootstrap: ulimit -n 1000000

Mas isso não ajudou em nada.

Eu também tentei o seguinte na ação bootstrap para substituir o comando ulimit em /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

Mas mesmo assim, quando nós logarmos no nó mestre, eu posso ver que ulimit -n retorna: 32768. Eu também confirmei que havia a mudança desejada em /usr/lib/hadoop/hadoop-daemon.sh e ele tinha: ulimit -n 134217728.

Temos alguma configuração de hadoop para isso? Ou existe uma solução para isso?

Meu principal objetivo é dividir os registros em arquivos de acordo com os ids de cada registro, e há 1,5 bilhão de registros no momento, o que certamente pode aumentar.

Qualquer maneira de editar este arquivo antes deste daemon é executado em cada escravo?

questionAnswers(4)

yourAnswerToTheQuestion