2014-01-05 10 views
6

ファイルの特定のパターンをhdfs内から同じhdfsクラスタ内の別の場所にコピーしたいとします。 DFSシェルはこれを処理することはできていないようです:ワイルドカードを使用したHadoop HDFSコピー?

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

エラーは返されません。まだ何もファイルがコピーされません。

答えて

8

:私のために働いたこれらの両方

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

好奇心 - どのように機能するのですか?シェルは、hdsが見る前に "*"を展開します。あなたは* single * quoteを意味しましたか? – javadba

+0

両方の引用については関係ありません。引用だけでは、シェルはhdfsコマンドに単一のパラメータを渡すのではなく、ワイルドカードを展開しないように指示します。私はそれが両方の引用符を試して動作します。 – MoreFreeze

+0

はい、あなたは正しいです。私は授与されました。 – javadba

1

まず、ワイルドカードを使用したHDFSコピーがサポートされています。次に、hadoop dfsの使用は推奨されていませんが、代わりにhadoop fsまたはhdfs dfsを使用することをお勧めします。操作が成功しなかったと確信できる場合(成功したように見えますが)、namenodeのログファイルをチェックして何が間違っているかを確認することができます。

+2

OPでは、指定されたワイルドカードパターンを使用してファイルがコピーされません。 「ワイルドカードがサポートされています」と述べる場合は、デモンストレーションしてください。 – javadba

+0

私はクラスタ上であなたと同じコマンドを試したので、2.1と0.23.9の両方で動作します。真剣に、あなたのnamenodeログを確認してください – zhutoulala

0

興味深い。これは、Hadoop 0.18.0を実行しているローカルVMで取得したものです。どのバージョンを使用していますか?私は1.2.1に試すことができますまた、

このようなワイルドカードが含まれていますが、あなたのパスを二重引用符を使用する必要がある
[email protected]:~$ hadoop fs -ls /user/hadoop-user/testcopy 
[email protected]:~$ hadoop dfs -cp /user/hadoop-user/input/*.txt /user/hadoop-user/testcopy/ 
[email protected]:~$ 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 
+0

あなたは非常に古いバージョンのhadoopを実行しています..しかし、この場合でもそれは問題ではありません。私は1.2.1です。 – javadba

+0

Tried 1.2.1と同様に動作します。しかし、私は[link](http://wiki.apache.org/hadoop/FAQ#Wildcard_characters_doesn.27t_work_correctly_in_FsShell)を見つけました。確認してください。 –

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 

ダブル/シングル( "/")引用符を与えない方が良いと思います。

関連する問題