我有一个hadoop集群,我们假设它的性能相当“糟糕”。节点很结实。。24芯,60+g ram…等。我们想知道是否有一些基本的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
.
非常感谢!
2条答案
按热度按时间kmbjn2e31#
我有一个非常类似的问题,这导致了一个碎屑的Yarn时间线服务器停止,由于达到神奇的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:
然后设置yarn.timeline-service.ttl-ms(在一段时间内将其设置为一些较低的设置):\
如前所述,第二个选项是停止timeline服务器,删除整个leveldb并重新启动服务器。这将从头开始ats数据库。如果你在其他选项上失败了,效果很好。
为此,请从yarn.timeline-service.leveldb-timeline-store.path中找到数据库位置,对其进行备份并从中删除所有子文件夹。此操作需要根用户访问timeline所在的服务器。
希望有帮助。
huwehgph2#
您需要检查流程的限制。它可能与shell会话不同:
前任:
在我的例子中,haproxy在它的配置文件上有一个改变最大打开文件的指令,hadoop也应该有一些东西