名称节点处于安全模式.不能离开

Unm*_*eni 115 hadoop hdfs

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.
Run Code Online (Sandbox Code Playgroud)

无法在hdfs中创建任何内容

我做到了

root# bin/hadoop fs -safemode leave
Run Code Online (Sandbox Code Playgroud)

但显示

safemode: Unknown command
Run Code Online (Sandbox Code Playgroud)

问题是什么?

Ama*_*mar 203

为了强制让namenode离开safemode,应该执行以下命令:

 bin/hadoop dfsadmin -safemode leave
Run Code Online (Sandbox Code Playgroud)

Unknown command的命令会收到错误,因为-safemode它不是子命令hadoop fs,但它是hadoop dfsadmin.

在上面的命令之后,我建议你一旦运行,hadoop fsck以便hdfs中任何不一致的地方可能会被整理出来.

更新:

对于较新的分发,请使用hdfs命令而不是hadoop命令.该hadoop命令已被弃用:

hdfs dfsadmin -safemode leave
Run Code Online (Sandbox Code Playgroud)

hadoop dfsadmin已被弃用,hadoop fs命令也是如此,所有与hdfs相关的任务都被移动到单独的命令中hdfs.

  • 实际上为什么会显示“namenode 处于安全模式” (2认同)
  • 基本上namenode在异常情况下进入安全模式,例如当磁盘已满时,也在启动阶段。在这里阅读更多;http://hadoop.apache.org/docs/stable/hdfs_user_guide.html#Safemode (2认同)
  • 我正在使用Hadoop 2.0.0-cdh4.1.1当我运行`hadoop dfsadmin`命令时,它给了我:`______ DEPRECATED:不推荐使用此脚本执行hdfs命令.而是使用hdfs命令.安全模式关闭`______ ...但仍然运行.似乎以下@ user3316017的建议是推荐的语法. (2认同)

Wes*_* Na 27

试试这个,它会奏效

sudo -u hdfs hdfs dfsadmin -safemode leave
Run Code Online (Sandbox Code Playgroud)


Kis*_*n B 21

该命令对我不起作用,但以下情况确实如此

hdfs dfsadmin -safemode leave
Run Code Online (Sandbox Code Playgroud)

我使用hdfs命令而不是hadoop命令.

查看http://ask.gopivotal.com/hc/en-us/articles/200933026-HDFS-goes-into-readonly-mode-and-errors-out-with-Name-node-is-in-safe-模式 -链接


小智 9

安全模式开启意味着(HDFS 处于只读模式)
安全模式关闭意味着(HDFS 处于可写和可读模式)

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

检查名称节点状态

$ hdfs dfsadmin -safemode get
Run Code Online (Sandbox Code Playgroud)

进入安全模式:

$ hdfs dfsadmin -safemode enter
Run Code Online (Sandbox Code Playgroud)

离开安全模式

~$ hdfs dfsadmin -safemode leave
Run Code Online (Sandbox Code Playgroud)

  • 强制离开安全模式:~$ hdfs dfsadmin -safemode forceExit (2认同)

amb*_*odi 6

如果你使用上面的Hadoop版本2.6.1,当命令工作时,它会抱怨它的折旧.我实际上无法使用,hadoop dfsadmin -safemode leave因为我在Docker容器中运行Hadoop,并且该命令在容器中运行时神奇地失败,所以我所做的就是这个.我检查了doc并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>
Run Code Online (Sandbox Code Playgroud)


Ami*_*jan 5

Namenode 在内存不足时进入安全模式。因此,HDFS 变为只读。这意味着不能在 HDFS 中创建任何额外的目录或文件。要退出安全模式,请使用以下命令:

hadoop dfsadmin -safemode leave
Run Code Online (Sandbox Code Playgroud)

如果您使用的是 cloudera 管理器:

go to >>Actions>>Leave Safemode
Run Code Online (Sandbox Code Playgroud)

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

free -m
Run Code Online (Sandbox Code Playgroud)

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


Tar*_*ddy 5

尝试这个

sudo -u hdfs hdfs dfsadmin -safemode leave
Run Code Online (Sandbox Code Playgroud)

检查安全模式的状态

sudo -u hdfs hdfs dfsadmin -safemode get
Run Code Online (Sandbox Code Playgroud)

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

df -h
Run Code Online (Sandbox Code Playgroud)

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