我的减速器出现以下异常:
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)
每个 reducer 正在创建大约 10,000 个文件。有没有办法可以设置每个盒子的ulimit。
我尝试使用以下命令作为引导脚本: ulimit -n 1000000
但这根本没有帮助。
我还在引导操作中尝试了以下操作来替换 /usr/lib/hadoop/hadoop-daemon.sh 中的 ulimit 命令:
#!/bin/bash
set -e -x
sudo sed -i -e "/^ulimit /s|.*|ulimit -n 134217728|" /usr/lib/hadoop/hadoop-daemon.sh
但即便如此,当我们登录到主节点时,我仍可以看到 ulimit -n 返回:32768。我还确认在 /usr/lib/hadoop/hadoop-daemon.sh 中进行了所需的更改,并且它具有:ulimit -n 134217728。
我们对此有任何 hadoop 配置吗?或者有解决方法吗?
我的主要目的是根据每条记录的id将记录拆分成文件,现在有15亿条记录,肯定会增加。
在每个从属服务器上运行此守护程序之前,有什么方法可以编辑此文件?