我有一个hdfs服务器,我目前正在流式传输。
我还定期使用以下类型命令命中此服务器以检查某些条件:hdfs dfs -find /user/cdh/streameddata/ -name *_processed
然而,在TOP中监视时,我已经开始看到这个命令占用了我的大部分CPU:
cdh 16919 1 99 13:03 ? 00:43:45 /opt/jdk/bin/java -Xmx1000m -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/var/log/hadoop -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=/opt/hadoop -Dhadoop.id.str=cdh -Dhadoop.root.logger=ERROR,DRFA -Djava.library.path=/opt/hadoop/lib/native -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -Xmx512m -Dhadoop.security.logger=INFO,NullAppender org.apache.hadoop.fs.FsShell -find /user/cdh/streameddata/ -name *_processed
这导致其他应用程序停止运行,并且整体上对我的应用程序产生了巨大影响。
我的服务器是一个48核服务器,我没想到这是一个问题。
目前,我没有在hadoop中设置任何额外的堆,因此它使用的是1000MB默认值。
答案 0 :(得分:1)
如果您认为您的堆可能太小,您可以运行:
jstat -gcutil 16919 # process ID of the hdfs dfs find command
查看GCT
(垃圾收集时间)下的值,了解您在垃圾收集中花费的时间相对于总运行时间。
但是,如果目录/ user / cdh / streameddata /包含数十万个文件或数百万个文件,那么您可能会合法地破坏您的系统。