28

我有一个包含 18 个数据节点的 Hadoop 集群。我在两个多小时前重新启动了名称节点,名称节点仍处于安全模式。

我一直在寻找为什么这可能需要很长时间,但我找不到一个好的答案。此处发布: Hadoop 安全模式恢复 - 花费大量时间 是相关的,但我不确定在更改此设置后是否想要/需要重新启动名称节点,正如该文章所述:

<property>
 <name>dfs.namenode.handler.count</name>
 <value>3</value>
 <final>true</final>
</property>

无论如何,这就是我在“hadoop-hadoop-namenode-hadoop-name-node.log”中得到的:

2011-02-11 01:39:55,226 INFO org.apache.hadoop.ipc.Server: IPC Server handler 0 on 8020, call delete(/tmp/hadoop-hadoop/mapred/system, true) from 10.1.206.27:54864: error: org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot delete /tmp/hadoop-hadoop/mapred/system. Name node is in safe mode.
The reported blocks 319128 needs additional 7183 blocks to reach the threshold 0.9990 of total blocks 326638. Safe mode will be turned off automatically.
org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot delete /tmp/hadoop-hadoop/mapred/system. Name node is in safe mode.
The reported blocks 319128 needs additional 7183 blocks to reach the threshold 0.9990 of total blocks 326638. Safe mode will be turned off automatically.
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.deleteInternal(FSNamesystem.java:1711)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.delete(FSNamesystem.java:1691)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.delete(NameNode.java:565)
    at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:508)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:966)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:962)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:416)
    at org.apache.hadoop.ipc.Server$Handler.run(Server.java:960)

任何建议表示赞赏。谢谢!

4

2 回答 2

45

我有过一次,其中一些块从未报告过。我不得不强制让名称节点离开安全模式(hadoop dfsadmin -safemode leave),然后运行 ​​fsck 以删除丢失的文件。

于 2011-02-16T19:04:18.917 回答
0

检查 hdfs-site.xml 中的属性 dfs.namenode.handler.count。

hdfs-site.xml 中的 dfs.namenode.handler.count 指定 Namenode 用于其处理的线程数。它的默认值为 10。此属性的值太低可能会导致指定的问题。

还要检查丢失或损坏的块 hdfs fsck / | egrep -v '^.+$' | grep -v 副本

hdfs fsck /path/to/corrupt/file -locations -blocks -files

如果发现损坏的块,请将其删除。hdfs fs -rm /file-with-missing-corrupt 块。

于 2019-08-15T06:50:30.547 回答