为什么我们每次重启机器后都需要格式化HDFS?

时间:2013-11-22 10:06:09

标签: hadoop ubuntu-11.04

我在笔记本电脑上以伪分布式模式安装了Hadoop,操作系统是Ubuntu。

我已经更改了hadoop将存储其数据的路径(默认情况下hadoop将数据存储在/tmp文件夹中)

hdfs-site.xml文件如下所示:

<property>
    <name>dfs.data.dir</name>
    <value>/HADOOP_CLUSTER_DATA/data</value>
</property>

现在每当我重新启动机器并尝试使用start-all.sh脚本启动hadoop集群时,数据节点永远不会启动。我确认数据节点不是通过检查日志和使用jps命令来启动的。

然后我

  1. 使用stop-all.sh脚本停止群集。
  2. 使用hadoop namenode -format命令格式化HDFS。
  3. 使用start-all.sh脚本启动群集。
  4. 即使我再次停止并启动集群,现在一切正常。只有在我重新启动计算机并尝试启动集群时才会出现问题。

    • 有没有人遇到过类似的问题?
    • 为什么会这样,
    • 我们如何解决这个问题?

2 个答案:

答案 0 :(得分:7)

通过将dfs.datanode.data.dir更改为远离/tmp,您确实使数据(块)在重新启动后存活。然而,HDFS不仅仅是块。你需要确保所有相关的目标都远离/tmp,最值得注意的是dfs.namenode.name.dir(我不知道你必须改变其他目的,这取决于你的配置,但是namenode dir是强制性,也可以。)

我还建议使用更新的Hadoop发行版。顺便说一句,1.1 namenode dir设置为dfs.name.dir

答案 1 :(得分:3)

对于使用hadoop 2.0或更高版本的用户,配置文件名可能不同。

正如此answer指出的那样,请转到hadoop安装的/etc/hadoop目录。

打开文件 hdfs-site.xml 。这个user configuration will override the default hadoop configurations,由java类加载器加载。

添加dfs.namenode.name.dir属性并设置新的namenode目录(默认为file://${hadoop.tmp.dir}/dfs/name)。

dfs.datanode.data.dir属性执行相同操作(默认为file://${hadoop.tmp.dir}/dfs/data)。

例如:

<property>
    <name>dfs.namenode.name.dir</name>
    <value>/Users/samuel/Documents/hadoop_data/name</value>
</property>
<property>
    <name>dfs.datanode.data.dir</name>
    <value>/Users/samuel/Documents/hadoop_data/data</value>
</property>

出现tmp目录的其他属性为dfs.namenode.checkpoint.dir。其默认值为:file://${hadoop.tmp.dir}/dfs/namesecondary

如果需要,您也可以轻松添加此属性:

<property>
    <name>dfs.namenode.checkpoint.dir</name>
    <value>/Users/samuel/Documents/hadoop_data/namesecondary</value>
</property>