为什么Hadoop hftp提供目录而不是文件?

为什么Hadoop hftp提供目录而不是文件?,hadoop,filesystems,Hadoop,Filesystems,我正在尝试使用distcp将文件从一个集群移动到另一个集群,并按照它们的说明使用hftp协议 我可以通过hftp读取目录,但当我尝试获取文件时,会得到一个500(内部服务器错误)。为了消除网络和防火墙问题的可能性,我在源服务器上使用hadoop fs-ls和hadoop fs-cat命令来尝试解决这个问题 这提供了以下文件的目录: hadoop fs -ls logfiles/day_id=19991231/hour_id=1999123123 -rw-r--r-- 3 username s

我正在尝试使用distcp将文件从一个集群移动到另一个集群,并按照它们的说明使用hftp协议

我可以通过hftp读取目录,但当我尝试获取文件时,会得到一个500(内部服务器错误)。为了消除网络和防火墙问题的可能性,我在源服务器上使用hadoop fs-ls和hadoop fs-cat命令来尝试解决这个问题

这提供了以下文件的目录:

hadoop fs -ls logfiles/day_id=19991231/hour_id=1999123123
-rw-r--r--   3 username supergroup        812 2012-12-16 17:21 logfiles/day_id=19991231/hour_id=1999123123/000008_0
这给了我一个“找不到文件”错误,它应该这样做,因为文件不在那里:

hadoop fs -cat hftp://hserver.domain.com:50070/user/username/logfiles/day_id=19991231/hour_id=1999123123/000008_0x
cat: `hftp://hserver.domain.com:50070/user/username/logfiles/day_id=19991231/hour_id=1999123123/000008_0x': No such file or directory
这一行给出了一个500内部服务器错误。该文件已在服务器上确认

hadoop fs -cat hftp://hserver.domain.com:50070/user/username/logfiles/day_id=19991231/hour_id=1999123123/000008_0
cat: HTTP_OK expected, received 500
以下是尝试此操作时distcp记录的堆栈跟踪:

java.io.IOException: HTTP_OK expected, received 500
    at org.apache.hadoop.hdfs.HftpFileSystem$RangeHeaderUrlOpener.connect(HftpFileSystem.java:365)
    at org.apache.hadoop.hdfs.ByteRangeInputStream.openInputStream(ByteRangeInputStream.java:119)
    at org.apache.hadoop.hdfs.ByteRangeInputStream.getInputStream(ByteRangeInputStream.java:103)
    at org.apache.hadoop.hdfs.ByteRangeInputStream.read(ByteRangeInputStream.java:187)
    at java.io.DataInputStream.read(DataInputStream.java:83)
    at org.apache.hadoop.tools.DistCp$CopyFilesMapper.copy(DistCp.java:424)
    at org.apache.hadoop.tools.DistCp$CopyFilesMapper.map(DistCp.java:547)
    at org.apache.hadoop.tools.DistCp$CopyFilesMapper.map(DistCp.java:314)
    at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:50)
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:393)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:327)
    at org.apache.hadoop.mapred.Child$4.run(Child.java:268)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:396)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1332)
    at org.apache.hadoop.mapred.Child.main(Child.java:262)

有人能告诉我为什么hftp无法提供文件吗?

我遇到了同样的问题,并最终找到了解决方案

这里详细解释了一切:

但简而言之,我们可能将NameNode RPC绑定到通配符地址(即dfs.NameNode.RPC-address指向接口的IP,而不是0.0.0.0)

不适用于HFTP:

<property>
    <name>dfs.namenode.rpc-address</name>
    <value>0.0.0.0:8020</value>
</property>
<property>
    <name>dfs.namenode.rpc-address</name>
    <value>10.0.1.2:8020</value>
</property>

dfs.namenode.rpc-address
0.0.0.0:8020
与HFTP合作:

<property>
    <name>dfs.namenode.rpc-address</name>
    <value>0.0.0.0:8020</value>
</property>
<property>
    <name>dfs.namenode.rpc-address</name>
    <value>10.0.1.2:8020</value>
</property>

dfs.namenode.rpc-address
10.0.1.2:8020