Setting hadoop.tmp.dir on Windows gives error: URI has an authority component

Setting hadoop.tmp.dir on Windows gives error: URI has an authority component

我正在尝试在 Windows 7 下的 hdfs-site.xml 中指定 HDFS 文件的基本目录(我从源代码构建的 Hadoop 2.7.1,使用 Java SDK 1.8 .0_45 和 Windows SDK 7.1)。我不知道如何提供指定驱动器的路径。

我的 hdfs-site.xml 看起来像这样:

<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>hadoop.tmp.dir</name> <value>XXX</value> </property> </configuration>

我尝试了 XXX 的各种值,我用 hdfs namenode -format 测试了这些值,所有这些都会导致以下 2 个错误之一:

出现类似错误的其他变体:file:///D:/tmp/hdp(来自 http://hortonworks.com/community/forums/topic/hadoop-configuration-files-issues/)、file://D:/tmp/hdpD:\tmp\hdp

如果我使用 /D/tmp/hdp 它不会崩溃,但会进入我当前驱动器上的 D 文件夹。

我没有想法,有什么建议吗? (注意:除了使用 Cygwin,这对我来说不是一个选项)

您可以在 core-site.xml 中的 hadoop.tmp.dir 中指定驱动器规格,方法是在绝对路径前添加一个“/”,并使用“/”作为路径分隔符而不是“ \' 用于所有路径元素。例如,如果所需的绝对路径是 D:\tmp\hdp,那么它将如下所示:

<property>
    <name>hadoop.tmp.dir</name>
    <value>/D:/tmp/hdp</value>
</property>

之所以可行,是因为许多 HDFS 目录的默认值配置为 file://${hadoop.tmp.dir}/suffix。请在此处查看 dfs.namenode.name.dirdfs.datanode.data.dirdfs.namenode.checkpoint.dir 的默认定义:

http://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

将上述值替换为 hadoop.tmp.dir 会产生一个有效的 file: URI,该 URI 具有驱动器规格且没有权限,这满足 HDFS 配置的要求。使用“/”而不是“\”很重要,因为未编码的“\”字符在 URL 语法中无效。

http://www.ietf.org/rfc/rfc1738.txt

如果您不想依赖这种替换行为,那么在您的 hdfs-site.xml 文件中覆盖所有使用 hadoop.tmp.dir 的配置属性也是有效的。每个值都必须是完整的 file: URI。例如:

<property>
    <name>dfs.namenode.name.dir</name>
    <value>file:///D:/tmp/hdp/dfs/name</value>
</property>

<property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///D:/tmp/hdp/dfs/data</value>
</property>

<property>
    <name>dfs.namenode.checkpoint.dir</name>
    <value>file:///D:/tmp/hdp/dfs/namesecondary</value>
</property>

您可能会发现这总体上更具可读性。