我在笔记本电脑上以伪分布式模式安装了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
命令来启动的。
然后我
stop-all.sh
脚本停止群集。hadoop namenode -format
命令格式化HDFS。start-all.sh
脚本启动群集。即使我再次停止并启动集群,现在一切正常。只有在我重新启动计算机并尝试启动集群时才会出现问题。
答案 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>