在core-site.xml中设置fs.default.name将HDFS设置为Safemode

时间:2013-10-16 19:42:37

标签: hadoop hdfs cloudera

我在一台机器上以伪分布式模式安装了Cloudera CDH4发行版并成功测试它是否正常工作(例如,可以运行MapReduce程序,在Hive服务器上插入数据等)但是,如果我偶然{ {1}}文件将core-site.xml设置为机器名而不是fs.default.name并重新启动NameNode服务,HDFS进入安全模式。

在更改localhost之前,我运行以下内容来检查HDFS的状态:

fs.default.name

然后我对$ hadoop dfsadmin -report ... Configured Capacity: 18503614464 (17.23 GB) Present Capacity: 13794557952 (12.85 GB) DFS Remaining: 13790785536 (12.84 GB) DFS Used: 3772416 (3.60 MB) DFS Used%: 0.03% Under replicated blocks: 2 Blocks with corrupt replicas: 0 Missing blocks: 0 进行了修改(机器名称为core-site.xml):

hadoop

我重启了服务并重新报告了。

<property>
  <name>fs.default.name</name>
  <value>hdfs://hadoop:8020</value>
</property>

一个有趣的说明是我仍然可以执行一些HDFS命令。例如,我可以运行

$ sudo service hadoop-hdfs-namenode restart
$ hadoop dfsadmin -report
...
Safe mode is ON
Configured Capacity: 0 (0 B)
Present Capacity: 0 (0 B)
DFS Remaining: 0 (0 B)
DFS Used: 0 (0 B)
DFS Used%: NaN%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0

但是,如果我尝试使用$ hadoop fs -ls /tmp 读取文件或尝试将文件放入HDFS,我会被告知NameNode处于安全模式。

hadoop fs -cat

我需要将$ hadoop fs -put somefile . put: Cannot create file/user/hadinstall/somefile._COPYING_. Name node is in safe mode. 设置为计算机名称的原因是因为我需要在端口8020(默认的NameNode端口)上与此计算机进行通信。如果fs.default.name留给fs.default.name,则NameNode服务将不会侦听外部连接请求。

我不知道为什么会发生这种情况,并希望得到任何帮助。

2 个答案:

答案 0 :(得分:6)

问题源于域名解析。需要修改/etc/hosts文件以指向hadoop机器的localhost机器的IP地址和完全限定的域名。

192.168.0.201 hadoop.fully.qualified.domain.com localhost

答案 1 :(得分:1)

Safemode是一种HDFS状态,其中文件系统以只读方式挂载;不执行复制,也不能创建或删除文件。在您的情况下访问文件系统元数据的文件系统操作(如“ls”)将起作用。

可以使用此命令( $ hadoop dfsadmin -safemode leave)手动强制Namenode离开safemode。使用( $ hadoop dfsadmin -safemode get)验证safemode的状态,然后运行dfsadmin report以查看它是否显示数据。如果退出安全模式报告仍然没有显示任何数据然后我怀疑namenode和datanode之间的通信不是hapenning。在此步骤之后检查namenode和datanode日志。

接下来的步骤可能是尝试重新启动datanode进程,最后的办法是格式化namenode,这会导致数据丢失。