Hadoop 具有配置参数hadoop.tmp.dir
,根据文档,它是“其他临时目录的基础”。我想,这个路径是指本地文件系统。
我将此值设置为/mnt/hadoop-tmp/hadoop-${user.name}
. 格式化名称节点并启动所有服务后,我看到在 HDFS 上创建的路径完全相同。
这是否意味着, hadoop.tmp.dir
指的是HDFS上的临时位置?
它令人困惑,但hadoop.tmp.dir
用作本地临时目录的基础,也用于HDFS。该文档不是很好,但mapred.system.dir
默认设置为"${hadoop.tmp.dir}/mapred/system"
,它定义了HDFS上 Map/Reduce 框架存储系统文件的路径。
如果您希望这些不被捆绑在一起,您可以编辑您的mapred-site.xml
这样 mapred.system.dir 的定义是不相关的东西${hadoop.tmp.dir}
让我在 kkrugler 的回答中添加更多内容:
三个 HDFS 属性包含hadoop.tmp.dir
在它们的值中
dfs.name.dir
: namenode 存储其元数据的目录,默认值为${hadoop.tmp.dir}/dfs/name
。dfs.data.dir
:存储HDFS数据块的目录,默认值为${hadoop.tmp.dir}/dfs/data
。fs.checkpoint.dir
: 二级名称节点存储其检查点的目录,默认值为${hadoop.tmp.dir}/dfs/namesecondary
.这就是为什么您/mnt/hadoop-tmp/hadoop-${user.name}
在格式化 namenode 后在 HDFS 中看到 的原因。
环顾四周以获取有关此信息的信息。我唯一能想到的就是Amazon Elastic MapReduce 开发指南上的这篇文章:
在 hadoop-site.xml 中,我们将 hadoop.tmp.dir 设置为 /mnt/var/lib/hadoop/tmp。/mnt 是我们挂载“额外”EC2 卷的位置,它可以包含比默认卷更多的数据。(具体数量取决于实例类型。)Hadoop 的 RunJar.java(解压输入 JAR 的模块)将 hadoop.tmp.dir 解释为 Hadoop 文件系统路径而不是本地路径,因此它改为写入 HDFS 中的路径的本地路径。HDFS 挂载在 /mnt 下(特别是 /mnt/var/lib/hadoop/dfs/。因此,您可以向其写入大量数据。