hadoop - 为什么 Hbase 中打开的文件太多

标签 hadoop hbase file-descriptor

我已经使用 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 脚本或类似的东西关闭它们?

谢谢

最佳答案

... I am curious about why there are too many open files?...

HBase 始终保持打开所有文件。这是一些例子。如果您有 10 个表,每个表有 3 个列族,每个列族平均有 3 个文件,每个表的每个区域服务器有 100 个区域,则将打开 10*3*3*100 = 9000 个文件描述符。这个数学没有考虑 JAR 文件、临时文件等。

ulimit 的建议值为 10240,但您可能希望将其设置为更符合您的情况的值。

关于hadoop - 为什么 Hbase 中打开的文件太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41422742/

相关文章:

linux - 如何将输入/输出连接到 SSH session

hadoop - Flink 在 HDFS 上写入产生空文件

java - Hadoop 应用程序的包装器

java - 多线程之间能否复用hbase Java client Connection?

c - open() 如果我打开同一个文件两次会怎样?

java - 如何将进程文件描述符映射到java对象

安全集群中的 Hadoop 用户添加

csv - 使用 beeline 引用 csv 输出

java - HConnectionManager.class(HBase)PowerMock期间出现异常

hbase - 使用 HBase 进行行分页