【发布时间】:2017-01-02 07:15:51
【问题描述】:
我已经用 hadoop 配置了一个 2 节点集群并安装了 hbase。它工作正常,我在 hadoop 中运行了一些基本的 map reduce 作业,我也能够在 hbase 中创建和列出一些表。但是,我在 hdfs/hbase 中的数据很少,并且没有工作正在运行。过了一会儿,我开始在 hbase 日志中收到 "Java.net.Socket: Too many open files" 错误。
我已经寻找了一些解决方案,但主要是关于增加限制的答案。 但是我很好奇为什么打开的文件太多。这个集群没有被任何其他程序使用,除了教程中的简单 map reduce 任务之外,我没有运行任何作业。
为什么会这样?
编辑
在 Andrzej 建议之后,我运行了这个命令 (lsof | grep java),我观察到不同端口中有很多连接等待关闭。这只是命令输出的几行
java 29872 hadoop 151u IPv6 158476883 0t0 TCP os231.myIP:44712->os231.myIP:50010 (CLOSE_WAIT)
java 29872 hadoop 152u IPv6 158476885 0t0 TCP os231.myIP:35214->os233.myIP:50010 (CLOSE_WAIT)
java 29872 hadoop 153u IPv6 158476886 0t0 TCP os231.myIP:39899->os232.myIP:50010 (CLOSE_WAIT)
java 29872 hadoop 155u IPv6 158476892 0t0 TCP os231.myIP:44717->os231.myIP:50010 (CLOSE_WAIT)
java 29872 hadoop 156u IPv6 158476895 0t0 TCP os231.myIP:44718->os231.myIP:50010 (CLOSE_WAIT)
现在问题变成了,如果现在连接无用,为什么它们不自动关闭?如果它们没有自动中止,有没有办法用 crontab 脚本或类似的东西来关闭它们?
谢谢
【问题讨论】:
-
您在内核中有限制,在 SELinux 中有限制,并限制打开的服务文件。请参阅 cyberciti.biz/faq/… 或 naveensnayak.wordpress.com/2015/09/17/… 这取决于您的操作系统。
-
我知道极限。但我想知道为什么会有这么多打开的文件。增加限制可能是一个临时解决方案。是否有一些应该关闭的打开文件等?
-
如果你使用linux调用
lsof | grep java. -
这可能是进一步调查的指针。萨米:请通过@andrzej-jozwik 粘贴上述命令的结果
-
你使用的hbase是什么版本的?不是HBASE-9393
标签: hadoop hbase file-descriptor