我在为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
但仍然会给我带来同样的错误。
有人知道解决方法吗?
感谢任何帮助。
答案 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/"
工作正常