Hadoop HDFS通配符复制?

14

我想将HDFS中的某个文件模式复制到同一HDFS集群中的另一个位置。然而,dfs shell似乎无法处理此操作:

hadoop dfs -cp /tables/weblog/server=jeckle/webapp.log.1* /tables/tinylog/server=jeckle/

没有错误返回,但也没有文件被复制。

5个回答

20

您需要在包含通配符的路径中使用双引号,就像这样:

hdfs fs -cp "/path/to/foo*" /path/to/bar/

好奇 - 这怎么可能?Shell在hds看到它之前就会扩展"*"。你是不是指单引号? - WestCoastProjects
不论引号是什么,重要的是Shell不会展开通配符,而是将其作为单个参数传递给hdfs命令。我尝试了两种引号,都可以正常工作。 - MoreFreeze
这个在文档中有描述吗? - Marek
@Marek 这是关于shell变量的知识。将"/foo/bar/"视为一个参数,否则shell会尝试展开通配符(例如:''、'?')。 - MoreFreeze
好的,我应该仔细阅读你之前的评论。如果你有时间,你可以将这个解释从评论移到答案中。 - Marek
在Bash中,双引号会保留字符的字面值,除了$~/和!(根据设置可能会有变化)。单引号则保留所有内容。因此,如果*导致扩展问题(可能取决于当前工作目录中的内容),则单引号或双引号都应该可以解决。更多信息请参见:[https://www.gnu.org/software/bash/manual/html_node/Double-Quotes.html] - Clark Updike

1
首先,支持使用通配符进行HDFS复制。其次,hadoop dfs的使用已被弃用,最好使用hadoop fshdfs dfs代替。如果您确定操作未成功(尽管似乎成功了),可以查看namenode的日志文件以查看问题所在。

2
如OP所述,使用给定的通配符模式不会复制任何文件。如果您要声明“支持通配符”,请进行演示。 - WestCoastProjects
因为我在我的集群上尝试了与你相同的命令,它适用于2.1和0.23.9版本。请认真检查你的namenode日志。 - zhutoulala

1

有趣。这是我在本地运行Hadoop 0.18.0时得到的结果。你使用的是哪个版本?我也可以尝试1.2.1版本。

hadoop-user@hadoop-desk:~$ hadoop fs -ls /user/hadoop-user/testcopy
hadoop-user@hadoop-desk:~$ hadoop dfs -cp /user/hadoop-user/input/*.txt /user/hadoop-user/testcopy/
hadoop-user@hadoop-desk:~$ hadoop fs -ls /user/hadoop-user/testcopy
Found 2 items
-rw-r--r--   1 hadoop-user supergroup         79 2014-01-06 04:35 /user/hadoop-user/testcopy/HelloWorld.txt
-rw-r--r--   1 hadoop-user supergroup        140 2014-01-06 04:35 /user/hadoop-user/testcopy/SampleData.txt

你正在使用非常旧的Hadoop版本..但即使在这种情况下,这可能并不重要。我使用的是1.2.1版本。 - WestCoastProjects
尝试了1.2.1版本,也可以正常工作。但是,我发现了这个链接(http://wiki.apache.org/hadoop/FAQ#Wildcard_characters_doesn.27t_work_correctly_in_FsShell.),请检查一下。 - Jerry Ragland

0
如果有人想要从终端所在的当前目录复制文件和文件夹,那么:
hdfs dfs -put ./

0

这两个对我都有效:

~]$ hadoop fs -cp -f /user/cloudera/Dec_17_2017/cric* /user/cloudera/Dec_17_2017/Dec_18 
~]$ hadoop fs -cp -f "/user/cloudera/Dec_17_2017/cric*" /user/cloudera/Dec_17_2017/Dec_18 

我认为更好的方式是不要使用双引号或单引号。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接