我试图了解hadoop在HDFS中存储数据的位置。我指的是配置文件,即core-site.xml
和hdfs-site.xml
我设置的属性是:
在core-site.xml
:
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop/tmp</value>
</property>
在hdfs-site.xml
:
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/hadoop/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/hadoop/hdfs/datanode</value>
</property>
通过上述安排,如dfs.datanode.data.dir
,数据块应存储在此目录中。这是对的吗?
我提到了apache hadoop链接,从中我看到了这个:
core-default.xml
:hadoop.tmp.dir
- &gt;其他临时目录的基础。
hdfs-default.xml
dfs.datanode.data.dir
- &gt;确定本地文件系统上DFS数据节点应存储其块的位置。
此属性的默认值为 - &gt; file://${hadoop.tmp.dir}/dfs/data
由于我明确提供了dfs.datanode.data.dir
(hdfs-site.xml
)的值,是否意味着数据将存储在该位置?如果是这样,dfs / data会被添加到目录${dfs.datanode.data.dir}
,特别是它会变成 - &gt; /hadoop/hdfs/datanode/dfs/data
?
但是我没有看到这个目录结构被创建。
我在环境中看到的一个观察结果:
我在运行一些 MapReduce 程序后看到了这个目录,即:
/hadoop/tmp/dfs/data
正在创建。
因此,不确定数据是否存储在dfs.datanode.data.dir属性所建议的目录中。
有没有人有类似的经历?
答案 0 :(得分:14)
hdfs文件的数据将存储在dfs.datanode.data.dir
中指定的目录中,并且不会附加您在默认值中看到的/dfs/data
后缀。
如果您修改hdfs-site.xml
,则必须重新启动 DataNode 服务才能使更改生效。另请记住,更改该值将消除 DataNode 服务提供存储在先前位置的块的能力。
最后,您可以在上方使用file:/...
而不是file://...
指定您的值。文件URI确实需要额外的斜杠,因此可能导致这些值恢复为默认值。