3

我在日期范围内运行了一堆 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}

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

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

/user/michael/output/TrueListingSellThroughFromLeafCategory/*

但是一次取回它们会很好!我怎样才能做到这一点?

4

1 回答 1

7

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

hadoop fs -ls /user/michael/output/TrueListingSellThroughFromLeafCategory/?20120101,20120102,20120103,20120104,20120105,20120106,20120107? 

我在我的盒子上进行了测试,它似乎有效:

[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

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

于 2013-01-24T06:08:06.810 回答