含空格与特殊字符的文件复制到HDFS报错,如何解决?
解决带特殊字符的文件上传HDFS问题
这个问题我碰到过好多次啦,核心原因是你的文件名里包含了特殊字符(%和空格)——shell会把这些符号当成语法解析的一部分,而不是文件名的组成部分,导致Hadoop客户端接收到的URI格式混乱,最终抛出URISyntaxException。下面给你几个靠谱的解决方法:
方法1:用引号包裹文件名(最推荐)
把整个文件名用单引号或双引号括起来,让shell将其视为一个完整的字符串,不会解析里面的特殊字符:
- 使用双引号:
hadoop fs -put "DT2516%_date_cdfs 05-feb-2017.csv" /tmp/
- 使用单引号(更稳妥,不会解析字符串内的变量):
hadoop fs -put 'DT2516%_date_cdfs 05-feb-2017.csv' /tmp/
方法2:转义特殊字符
在每个特殊字符(%和空格)前添加反斜杠\,告诉shell这是普通字符而非语法符号:
hadoop fs -put DT2516\%_date_cdfs\ 05-feb-2017.csv /tmp/
方法3:用通配符匹配(适合批量场景)
如果这个文件是当前目录下唯一以DT2516开头的CSV文件,可以用通配符*替代特殊字符部分,简化命令:
hadoop fs -put DT2516*.csv /tmp/
小提示
不光是Hadoop命令,所有shell命令遇到包含空格、%、&、*等特殊字符的文件名时,都可以用上述引号或转义的方式处理,避免解析错误。
内容的提问来源于stack exchange,提问作者sandy kay
相关产品推荐
相关产品推荐

