web-dev-qa-db-ja.com

hadoop fs -putとhadoop fs -copyFromLocalの違い

-put-copyFromLocalは同じものとして文書化されていますが、ほとんどの例では冗長コピー-copyFromLocalを使用しています。どうして?

-get-copyToLocalについても同じこと

51
snappy
  • copyFromLocalputコマンドと似ていますが、ソースはlocalファイル参照。

したがって、基本的には、putで実行できます。copyFromLocalで実行できますが、その逆はできません。

同様に、

  • copyToLocalgetコマンドと似ていますが、宛先がローカルファイルに制限されている点が異なります。 参照。

したがって、copyToLocalの代わりにgetを使用できますが、その逆はできません。

リファレンスHadoopのドキュメント .

更新:2015年10月現在の最新情報については、下記の this 回答をご覧ください。

61
Ozair Kafray

例を見てみましょう:HDFSにパスが含まれている場合:/tmp/dir/abc.txtそしてローカルディスクにもこのパスが含まれている場合、file://のようなスキームを指定しない限り、hdfs APIはどちらを意味するかを知りませんまたはhdfs://。たぶん、コピーしたくないパスを選ぶでしょう。

したがって、-copyFromLocalがあり、ローカルファイルシステムに指定するパラメーターを制限することにより、誤って間違ったファイルをコピーすることを防ぎます。

Putは、どのスキームを前面に置くかを知っている、より上級のユーザー向けです。

新しいHadoopユーザーにとって、現在どのファイルシステムにいて、ファイルが実際にどこにあるかは、常に少し混乱します。

38
Thomas Jungblut

ドキュメントで主張されていることにもかかわらず、現在(2015年10月)、両方-copyFromLocalおよび-put 同じだ。

オンラインヘルプから:

[cloudera@quickstart ~]$ hdfs dfs -help copyFromLocal 
-copyFromLocal [-f] [-p] [-l] <localsrc> ... <dst> :
  Identical to the -put command.

そして、これは sourcesを見る によって確認されます。ここでは、CopyFromLocalクラスがPutクラスを拡張していることを確認できますが、新しい動作は追加しません。

  public static class CopyFromLocal extends Put {
    public static final String NAME = "copyFromLocal";
    public static final String USAGE = Put.USAGE;
    public static final String DESCRIPTION = "Identical to the -put command.";
  }

  public static class CopyToLocal extends Get {
    public static final String NAME = "copyToLocal";
    public static final String USAGE = Get.USAGE;
    public static final String DESCRIPTION = "Identical to the -get command.";
  }

お気づきかもしれませんが、これはget/copyToLocalでもまったく同じです。

17
Sylvain Leroux
  • 両方は同じです
  • copyFromLocalはローカルからのコピーに制限されていますが、putは他の(他のhdfs/local filesystem/..)からファイルを取得できます。
2
Manish Agrawal

「put」コマンドと「copyFromLocal」コマンドはまったく同じように機能します。 「put」コマンドを使用して、1つのhdfsディレクトリから別のディレクトリにファイルをコピーすることはできません。例でこれを見てみましょう。ルートに「test1」と「test2」という名前の2つのディレクトリがあるとします。 「test1」に「customer.txt」というファイルが含まれていて、それをtest2ディレクトリにコピーしようとした場合
$ hadoop fs -put /test1/customer.txt/test2「put」はhdfsではなくローカルファイルシステムでファイルを検索するため、「no such file or directory」エラーが発生します。どちらもローカルファイルシステムからhdfsにのみファイル(またはディレクトリ)をコピーするためのものです。

0
Roney J