嗨,我正在学习hadoop,我有一个简单的愚蠢的问题:在我关闭hdfs(通过调用hadoop\u home/sbin/stop dfs.sh)之后,hdfs上的数据是丢失了还是可以取回?
8tntrjer1#
如果停止hdfs,数据不会丢失,前提是将namenode和datanode的数据存储在使用以下属性指定的持久位置: dfs.namenode.name.dir ->确定dfs名称节点应在本地文件系统上的何处存储名称表(fsimage)。如果这是一个以逗号分隔的目录列表,那么名称表将复制到所有目录中,以实现冗余。默认值:file://${hadoop.tmp.dir}/dfs/name dfs.datanode.data.dir ->确定dfs数据节点应在本地文件系统上的何处存储其块。如果这是一个以逗号分隔的目录列表,那么数据将存储在所有命名的目录中,通常存储在不同的设备上。不存在的目录将被忽略。默认值: file://${hadoop.tmp.dir}/dfs/data 如您所见,这两个属性的默认值都指向 ${hadoop.tmp.dir} 默认情况下 /tmp . 您可能已经知道 /tmp 在基于unix的系统中,在重新启动时清除get。所以,如果您指定dir位置 /tmp 然后hadoophdfs守护进程在重启时能够读回数据,因此即使在集群重启时也不会丢失数据。
dfs.namenode.name.dir
dfs.datanode.data.dir
file://${hadoop.tmp.dir}/dfs/data
${hadoop.tmp.dir}
/tmp
6ljaweal2#
请确保您没有删除存储在hdfs中的数据的元数据,如果您保持 dfs.namenode.name.dir 以及 dfs.datanode.data.dir untoucted,表示不删除这些标记中的路径,这些标记在您的 hdfs-site.xml 文件。
hdfs-site.xml
2条答案
按热度按时间8tntrjer1#
如果停止hdfs,数据不会丢失,前提是将namenode和datanode的数据存储在使用以下属性指定的持久位置:
dfs.namenode.name.dir
->确定dfs名称节点应在本地文件系统上的何处存储名称表(fsimage)。如果这是一个以逗号分隔的目录列表,那么名称表将复制到所有目录中,以实现冗余。默认值:file://${hadoop.tmp.dir}/dfs/name
dfs.datanode.data.dir
->确定dfs数据节点应在本地文件系统上的何处存储其块。如果这是一个以逗号分隔的目录列表,那么数据将存储在所有命名的目录中,通常存储在不同的设备上。不存在的目录将被忽略。默认值:file://${hadoop.tmp.dir}/dfs/data
如您所见,这两个属性的默认值都指向${hadoop.tmp.dir}
默认情况下/tmp
. 您可能已经知道/tmp
在基于unix的系统中,在重新启动时清除get。所以,如果您指定dir位置
/tmp
然后hadoophdfs守护进程在重启时能够读回数据,因此即使在集群重启时也不会丢失数据。6ljaweal2#
请确保您没有删除存储在hdfs中的数据的元数据,如果您保持
dfs.namenode.name.dir
以及dfs.datanode.data.dir
untoucted,表示不删除这些标记中的路径,这些标记在您的hdfs-site.xml
文件。