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?