1

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

这里有一篇文章描述了一些我认为可能是真的可能性。

我尝试以 root、hdfs 和我自己的身份登录 namenode,并尝试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 多个文件,谁能帮忙解释这里发生了什么?ulimit如果我在理解和之间的关系时犯了任何错误,请纠正我lsof

非常感谢!

4

2 回答 2

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 也应该有一些东西

于 2014-05-16T22:53:29.177 回答
1

我遇到了一个非常相似的问题,导致 claster 的 YARN TimeLine 服务器之一由于达到神奇的 1024 个文件限制并因“打开的文件过多”错误而崩溃。

经过一番调查,发现它在处理 TimeLine 的 LevelDB 中的太多文件时遇到了一些严重的问题。由于某种原因,YARN 忽略了 yarn.timeline-service.entity-group-fs-store.retain-seconds 设置(默认设置为 7 天,604800 毫秒)。我们有一个多月前的 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 访问权限。

希望能帮助到你。

于 2016-10-20T06:58:16.470 回答