带空格的Hadoop目录

时间:2013-12-04 11:41:46

标签: java hadoop hdfs urlencode filenotfoundexception

我在为Hadoop提供包含空格的目录时遇到了问题。

例如

inputDir = /abc/xyz/folder name/abc.txt

Hadoop以某种方式不知道“文件夹名称”是文件夹的名称,文字之间有空格。

在执行此操作时出现以下错误

java.io.FileNotFoundException: File does not exist: /abc/xyz/folder

另外,我尝试提供URL编码。

java.io.FileNotFoundException: File does not exist: /abc/xyz/folder%20name/abc.txt

但仍然会给我带来同样的错误。

有人知道解决方法吗?

感谢任何帮助。

4 个答案:

答案 0 :(得分:2)

用%20替换空格适用于Hadoop shell。如在

sed 's/ /\%20/g'

在实际的put命令中

hadoop fs -put "$inputDir" $putDest

如果没有%20,您会收到URI异常。 (这给了我使用%20而不是转义字符的线索。)

我意识到你是通过Java做的。您获取java.io.FileNotFoundException这一事实让我想知道代码是否正在使用inputDir执行其他操作,而不仅仅是hadoop put的参数,或者是put的等效命令。如果它在Hadoop命令之外进行任何类型的inputDir检查,它将失败。 Java将其视为一种路径。 Hadoop将其视为URI。

答案 1 :(得分:2)

Hadoop在输入目录路径中不支持空格

空格替换为目录路径中的 _ 首选分隔符

答案 2 :(得分:0)

尝试使用set(“path”,“/ abc / xyz / folder \\ name / abc.txt”)进行设置; 请注意双背斜杠。

答案 3 :(得分:0)

inputDir = "/abc/xyz/folder name/" 

必须工作

hadoop fs -ls "/abc/xyz/folder name/"

工作正常