名称节点处于安全模式。无法离开


122
root# bin/hadoop fs -mkdir t
mkdir: org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create directory /user/root/t. Name node is in safe mode.

无法在HDFS中创建任何内容

我做了

root# bin/hadoop fs -safemode leave

但是显示

safemode: Unknown command

问题是什么?



2
就我而言,它处于安全节点,因为资源不足(在
docker

@BrendenBrown,这里是目前正在联系Hadoop的3.2.0:hadoop.apache.org/docs/r3.2.0/hadoop-project-dist/hadoop-hdfs/...
尤金的Gr。Philippov

而这里的目前正在链接为Hadoop«稳定»(目前2.9.x):hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/...
尤金的Gr。Philippov

Answers:


211

为了强制让namenode离开安全模式,应执行以下命令:

 bin/hadoop dfsadmin -safemode leave

Unknown command的命令出现错误,因为-safemode它不是的子命令hadoop fs,但属于hadoop dfsadmin

同样在上述命令之后,我建议您一次运行hadoop fsck,以使hdfs中爬出的所有不一致问题都可以得到解决。

更新:

对于较新的发行版,请使用hdfscommand而不是hadoopcommand。该hadoop命令已被弃用:

hdfs dfsadmin -safemode leave

hadoop dfsadmin已弃用,hadoop fs命令也已弃用,所有与hdfs相关的任务都移至单独的command hdfs


2
为何实际上显示“ namenode处于安全模式”
Unmesha SreeVeni

1
基本上,namenode在异常情况下(例如在磁盘已满时)也会在启动阶段进入安全模式。在这里阅读更多;hadoop.apache.org/docs/stable/hdfs_user_guide.html#Safemode
Amar

2
我正在使用Hadoop 2.0.0-cdh4.1.1,当我运行hadoop dfsadmin命令时,它给出了以下信息:______ DEPRECATED: Use of this script to execute hdfs command is deprecated. Instead use the hdfs command for it. Safe mode is OFF ______ ...但仍然运行。似乎@ user3316017的建议是建议的语法。
CJBS 2014年

根据新发行版更新了我的答案,如果有人能够帮助我们确定apache hadoop的确切版本,因为这些弃用出现之后,那就太好了。
2014年

1
对于hdfs dfsadmin -safemode leave因集群已满而在命令运行后HDFS再次进入安全模式的情况,有时可以通过立即链接清除内容的命令来摆脱这种情况,例如hdfs dfsadmin -safemode leave; hdfs dfs -rm -skipTrash /path/to/stuff/to/delete
Shadocko

27

试试这个,它将起作用

sudo -u hdfs hdfs dfsadmin -safemode leave

该命令对我有用,因为它可能需要超级用户特权。.thanks@wesam
NikhilP


7

如果您使用上面的Hadoop版本2.6.1,则在该命令运行时,它会抱怨其已贬值。我实际上无法使用,hadoop dfsadmin -safemode leave因为我在Docker容器中运行Hadoop,并且该命令在容器中运行时魔术般失败了,所以我就是这样做的。我检查了文档并dfs.safemode.threshold.pct在说明文件中找到

指定应满足dfs.replication.min定义的最小复制要求的块百分比。小于或等于0的值表示退出安全模式之前,不等待任何特定百分比的块。大于1的值将使安全模式永久生效。

所以我改变了 hdfs-site.xml以下内容(在较早的Hadoop版本中,显然您需要在hdfs-default.xml

<configuration>
    <property>
        <name>dfs.safemode.threshold.pct</name>
        <value>0</value>
    </property>
</configuration>

5

内存不足时,Namenode进入安全模式。结果,HDFS仅变得可读。这意味着不能在HDFS中创建任何其他目录或文件。要退出安全模式,请使用以下命令:

hadoop dfsadmin -safemode leave

如果您正在使用cloudera manager:

go to >>Actions>>Leave Safemode

但这并不总是能解决问题。完整的解决方案在于在内存中留出一些空间。使用以下命令检查您的内存使用情况。

free -m

如果您使用的是cloudera,则还可以检查HDFS是否显示某些不良状况的迹象。它可能必须显示一些与namenode相关的内存问题。按照可用选项分配更多的内存。如果您不使用cloudera Manager,但不确定是否有办法使用相同的命令,我不确定。希望能帮助到你!:)


5

试试这个

sudo -u hdfs hdfs dfsadmin -safemode leave

检查安全模式的状态

sudo -u hdfs hdfs dfsadmin -safemode get

如果它仍然处于安全模式,那么原因之一可能是节点中没有足够的空间,您可以使用以下命令检查节点磁盘的使用情况:

df -h

如果根分区已满,请删除文件或在根分区中添加空间,然后重试第一步。


4

安全模式打开表示(HDFS处于只读模式)
安全模式关闭表示(HDFS处于可写和可读模式)

在中Hadoop 2.6.0,我们可以借助以下命令检查名称节点的状态:

检查名称节点状态

$ hdfs dfsadmin -safemode get

进入安全模式:

$ hdfs dfsadmin -safemode enter

离开安全模式

~$ hdfs dfsadmin -safemode leave

1
强制离开安全模式:〜$ hdfs dfsadmin -safemode forceExit
ammills01 '19


0

使用以下命令关闭安全模式

$> hdfs dfsadmin -safemode离开

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.