在路径中检索具有特殊字符的文件时遇到麻烦

Ili*_*ion 3 hadoop hdfs

我在日期范围内运行了一堆m/r报告,现在有一系列目录,如:

/user/michael/output/TrueListingSellThroughFromLeafCategory/{20120101,20120102,20120103,20120104,20120105,20120106,20120107}
/user/michael/output/TrueListingSellThroughFromLeafCategory/{20120108,20120109,20120110,20120111,20120112,20120113,20120114}
/user/michael/output/TrueListingSellThroughFromLeafCategory/{20120115,20120116,20120117,20120118,20120119,20120120,20120121}
Run Code Online (Sandbox Code Playgroud)

我在浏览这些目录时遇到了很多困难.如果我尝试ls其中一个,它会将日期作为列表,并为每个目录查找不同的目录.如果我逃避括号,我得到一个没有这样的文件或目录错误.如果我用%7B和%7D替换大括号,它就类似了.

如果我通配那个级别,那么我可以浏览更低:

/user/michael/output/TrueListingSellThroughFromLeafCategory/*
Run Code Online (Sandbox Code Playgroud)

但是一次检索一个就好了!我怎样才能做到这一点?

Cha*_*guy 5

看起来您应该能够使用正则表达式运算符来修复它 ?

hadoop fs -ls /user/michael/output/TrueListingSellThroughFromLeafCategory/?20120101,20120102,20120103,20120104,20120105,20120106,20120107? 
Run Code Online (Sandbox Code Playgroud)

我在我的盒子上测试了它似乎工作:

[cmenguy@localhost ~]$ hadoop fs -mkdir /tmp/{TEST}
[cmenguy@localhost ~]$ hadoop fs -put <(echo foo) /tmp/{TEST}/
[cmenguy@localhost ~]$ hadoop fs -ls /tmp/{TEST}
ls: Cannot access /tmp/{TEST}: No such file or directory.
[cmenguy@localhost ~]$ hadoop fs -ls '/tmp/\{TEST\}'
ls: Illegal file pattern: Expecting set closure character or end of range, or } for glob {TEST at 5
[cmenguy@localhost ~]$ hadoop fs -ls /tmp/?TEST?
Found 1 items
-rw-r--r--   3 cmenguy supergroup        4 2013-01-24 05:59 /tmp/{TEST}/63
Run Code Online (Sandbox Code Playgroud)

看起来像HDFS-3557中描述的那样仍在进行中,它似乎特定于0.20.2(如果你使用Cloudera,这仍然会影响cdh3u*版本,所以你可能需要使用cdh4)