将文件放在名称中有空格的 HDFS 上

Put file on HDFS with spaces in name

我有一个名为 file name(1).zip 的文件(其中包含 space 和括号),我想将此文件放在 HDFS 上。但是每次我尝试通过 hadoop fs -put ... 放置它时,都会出现异常。

我什至尝试在文件周围添加引号,甚至尝试转义 space 和括号,但它不起作用。

hduser@localhost:/tmp$ hadoop fs -put file\ name\(1\).zip /tmp/one
15/06/05 15:57:46 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
put: unexpected URISyntaxException

hduser@localhost:/tmp$ hadoop fs -put "file\ name\(1\).zip" /tmp/one/
15/06/05 15:59:19 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
put: unexpected URISyntaxException

hduser@localhost:/tmp$ hadoop fs -put "file name(1).zip" /tmp/one/
15/06/05 16:00:36 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
put: unexpected URISyntaxException

是否有任何解决方法可以将此类文件放在 HDFS 上,或者我在这里遗漏了什么。

尝试

fs -put 'file name(1).zip' tmp/one

最明显的解决方法是在将文件存储到 HDFS 之前重命名文件,你不觉得吗?

将 space 替换为 %20。

space 的百分比编码是 %20

使用

hadoop fs -put first%20name.zip /tmp/one

而不是

hadoop fs -put first name.zip /tmp/one

HDFS 完全可以在文件或目录名称中使用空格。

hdfs不支持从本地磁盘上传文件名中有空格的文件。但是有一个技巧可以实现这一点( reference ):

cat file\ name\(1\).zip | hadoop fs -put - "/tmp/one/file name(1).zip"

希望对有需要的人有所帮助。

hadoop fs -get /landing/novdata/'2017-01-05 - abc def 5H.csv'

查看文件名周围的单引号