hadoop ulimit打开文件名

时间:2014-05-16 21:43:22

标签: hadoop ulimit

我有一个hadoop集群,我们假设它表现得相当“糟糕”。这些节点非常强大.24核,60 + G RAM ..等等。我们想知道是否有一些基本的linux / hadoop默认配置阻止hadoop充分利用我们的硬件。

这里有post描述了一些我认为可能属实的可能性。

我尝试以root用户身份登录namenode,hdfs以及我自己,并尝试查看lsof的输出以及ulimit的设置。以下是输出,任何人都可以帮助我理解为什么设置与打开的文件编号不匹配。

例如,当我以root身份登录时。 lsof看起来像这样:

[root@box ~]# lsof | awk '{print $3}' | sort | uniq -c | sort -nr
   7256 cloudera-scm
   3910 root
   2173 oracle
   1886 hbase
   1575 hue
   1180 hive
    801 mapred
    470 oozie
    427 yarn
    418 hdfs
    244 oragrid
    241 zookeeper
     94 postfix
     87 httpfs
         ...

但是当我查看ulimit输出时,它看起来像这样:

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 806018
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1024
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

我假设,一个用户打开的文件不应超过1024个,但是,当您查看lsof的输出时,有一个用户打开了7000多个文件,任何人都可以帮忙解释一下在这里? 如果我在理解ulimitlsof之间的关系时犯了错误,请纠正我。

非常感谢!

2 个答案:

答案 0 :(得分:2)

您需要检查流程的限制。它可能与您的shell会话不同:

例如:

[root@ADWEB_HAPROXY3 ~]# cat /proc/$(pidof haproxy)/limits | grep open
Max open files            65536                65536                files     
[root@ADWEB_HAPROXY3 ~]# ulimit -n
4096

在我的情况下,haproxy在其配置文件上有一个指令来更改最大的打开文件,也应该有一些hadoop的东西

答案 1 :(得分:1)

我有一个非常类似的问题,导致其中一个claster的YARN TimeLine服务器由于达到神奇的1024个文件限制而停止,并且因“太多打开文件”错误而崩溃。

经过一番调查后发现,在TimeLine的LevelDB中处理太多文件时遇到了一些严重的问题。出于某种原因,YARN忽略了yarn.timeline-service.entity-group-fs-store.retain-seconds设置(默认设置为7天,604800ms)。我们有LevelDB文件可追溯到一个多月。

应用此处描述的修补程序有什么重要帮助:https://community.hortonworks.com/articles/48735/application-timeline-server-manage-the-size-of-the.html

基本上,我尝试过几种选择:

缩小TTL(生存时间)设置首先启用TTL:

<property>
 <description>Enable age off of timeline store data.</description>
 <name>yarn.timeline-service.ttl-enable</name>
 <value>true</value>
</property>

然后设置yarn.timeline-service.ttl-ms(在一段时间内将其设置为某些低设置): \

<property>
 <description>Time to live for timeline store data in milliseconds.</description>
 <name>yarn.timeline-service.ttl-ms</name>
 <value>604800000</value>
</property>

如上所述,第二个选项是停止TimeLine服务器,删除整个LevelDB并重启服务器。这将从头开始ATS数据库。如果您因任何其他选项而失败,则可以正常工作。

要执行此操作,请从yarn.timeline-service.leveldb-timeline-store.path中查找数据库位置,对其进行备份并从中删除所有子文件夹。此操作将要求对TimeLine所在的服务器进行root访问。

希望它有所帮助。