Hadoop 在core-site.xml中设置fs.default.name会将HDFS设置为安全模式

Hadoop 在core-site.xml中设置fs.default.name会将HDFS设置为安全模式,hadoop,hdfs,cloudera,Hadoop,Hdfs,Cloudera,我在一台机器上以伪分布式模式安装了Cloudera CDH4分发版,并成功地测试了它是否正常工作(例如,可以运行MapReduce程序,在配置单元服务器上插入数据等),如果我碰巧将core site.xml文件的fs.default.name设置为machine name而不是localhost并重新启动NameNode服务,HDFS将进入安全模式 在更改fs.default.name之前,我运行了以下步骤来检查HDFS的状态: $ hadoop dfsadmin -report ... Con

我在一台机器上以伪分布式模式安装了Cloudera CDH4分发版,并成功地测试了它是否正常工作(例如,可以运行MapReduce程序,在配置单元服务器上插入数据等),如果我碰巧将
core site.xml
文件的
fs.default.name
设置为machine name而不是
localhost
并重新启动NameNode服务,HDFS将进入安全模式

在更改
fs.default.name
之前,我运行了以下步骤来检查HDFS的状态:

$ 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
):

有趣的是,我仍然可以执行一些HDFS命令。例如,我可以跑步

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

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


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

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

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


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

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

192.168.0.201 hadoop.fully.qualified.domain.com localhost

将localhost指向外部IP而不是127.0.0.1可以吗?如果服务仅绑定到127.0.0.1并尝试使用localhost进行连接,该怎么办?
$ hadoop fs -put somefile .
put: Cannot create file/user/hadinstall/somefile._COPYING_. Name node is in safe mode.
192.168.0.201 hadoop.fully.qualified.domain.com localhost