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

4xrmg8kj  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(431)

我在一台机器上以伪分布式模式安装了cloudera cdh4发行版,并成功地测试了它是否正常工作(例如,可以运行mapreduce程序、在hive服务器上插入数据等) core-site.xml 要拥有的文件 fs.default.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 ):

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

我重新启动了服务并重新运行了报告。

$ 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

有趣的是,我仍然可以执行一些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服务将不侦听外部连接请求。
我不知道为什么会发生这种情况,如果有任何帮助,我将不胜感激。

ztmd8pv5

ztmd8pv51#

这个问题源于域名解析。这个 /etc/hosts 需要修改文件以指向 hadoop 两台机器 localhost 以及完全限定的域名。

192.168.0.201 hadoop.fully.qualified.domain.com localhost
gmxoilav

gmxoilav2#

safemode是一种hdfs状态,其中文件系统以只读方式挂载;不执行复制,也不能创建或删除文件。访问文件系统元数据(如“ls”)的文件系统操作将起作用。
可以使用此命令手动强制namenode离开safemode ( $ hadoop dfsadmin -safemode leave) 。使用验证安全模式的状态 ( $ hadoop dfsadmin -safemode get) 然后运行dfsadmin报告以查看它是否显示数据。如果在退出安全模式后,该报告仍然不显示任何数据,则我怀疑namenode和datanode之间的通信没有出现。在此步骤之后检查namenode和datanode日志。
接下来的步骤可能是尝试重新启动datanode进程,最后的手段是格式化namenode,这将导致数据丢失。

相关问题