我想将HDFS中的某个文件模式复制到同一HDFS集群中的另一个位置。然而,dfs shell似乎无法处理此操作:
hadoop dfs -cp /tables/weblog/server=jeckle/webapp.log.1* /tables/tinylog/server=jeckle/
没有错误返回,但也没有文件被复制。
您需要在包含通配符的路径中使用双引号,就像这样:
hdfs fs -cp "/path/to/foo*" /path/to/bar/
hadoop dfs
的使用已被弃用,最好使用hadoop fs
或hdfs dfs
代替。如果您确定操作未成功(尽管似乎成功了),可以查看namenode的日志文件以查看问题所在。有趣。这是我在本地运行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
hdfs dfs -put ./
这两个对我都有效:
~]$ 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
我认为更好的方式是不要使用双引号或单引号。