我在为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
但是仍然会抛出相同的错误。
有人知道解决方法吗?
感谢您的任何帮助。
用%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。
Hadoop不支持空格。
在目录路径中用_或首选分隔符替换空格。
尝试使用set(“ path”,“ / abc / xyz / folder \\ name / abc.txt”)进行设置;请注意双反斜杠。
inputDir = "/abc/xyz/folder name/"
必须工作
hadoop fs -ls "/abc/xyz/folder name/"
工作正常