it-swarm-id.com

Perbedaan antara hadoop fs -put dan hadoop fs -copyFromLocal

-put dan -copyFromLocal didokumentasikan sebagai identik, sedangkan sebagian besar contoh menggunakan varian verbose -copyFromLocal. Mengapa?

Hal yang sama untuk -get dan -copyToLocal

47
snappy
  • copyFromLocal mirip dengan perintah put, kecuali bahwa sumbernya dibatasi untuk referensi file lokal.

Jadi, pada dasarnya Anda dapat melakukan dengan put, semua yang Anda lakukan dengan copyFromLocal, tetapi tidak sebaliknya.

Demikian pula, 

  • copyToLocal mirip dengan perintah get, kecuali tujuannya adalah dibatasi untuk referensi file lokal.

Karenanya, Anda dapat menggunakan get alih-alih copyToLocal, tetapi tidak sebaliknya.

Referensi: Dokumentasi Hadoop .

Perbarui: Untuk yang terbaru pada Oktober 2015, silakan lihat ini jawab di bawah ini.

57
Ozair Kafray

Mari kita membuat contoh: Jika HDFS Anda berisi path: /tmp/dir/abc.txt Dan jika disk lokal Anda juga berisi path ini maka API hdfs tidak akan tahu yang Anda maksud, kecuali Anda menentukan skema seperti file:// atau hdfs:// . Mungkin ia memilih jalur yang tidak ingin Anda salin.

Karenanya Anda memiliki -copyFromLocal yang mencegah Anda secara tidak sengaja menyalin file yang salah, dengan membatasi parameter yang Anda berikan ke sistem file lokal.

Put adalah untuk pengguna yang lebih mahir yang tahu skema mana yang harus dikedepankan. 

Itu selalu sedikit membingungkan bagi pengguna Hadoop baru di mana sistem file mereka saat ini dan di mana file mereka sebenarnya.

37
Thomas Jungblut

Terlepas dari apa yang diklaim oleh dokumentasi, sampai sekarang (Oktober 2015), -copyFromLocal dan -put sama-sama sama.

Dari bantuan online:

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

Dan ini dikonfirmasi oleh melihat sumber , di mana Anda dapat melihat bahwa kelas CopyFromLocal memperluas kelas Put, tetapi tanpa menambahkan perilaku baru:

  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.";
  }

Seperti yang Anda ketahui, ini persis sama untuk get/copyToLocal.

17
Sylvain Leroux
  • keduanya sama kecuali 
  • copyFromLocal dibatasi untuk menyalin dari lokal sementara put dapat mengambil file dari apa saja (hdfs lain/sistem file lokal/..)
2
Manish Agrawal

Perintah 'put' & 'copyFromLocal' bekerja persis sama. Anda tidak dapat menggunakan perintah 'put' untuk menyalin file dari satu direktori hdfs ke direktori lain. Mari kita lihat ini dengan sebuah contoh: katakanlah root Anda memiliki dua direktori, bernama 'test1' dan 'test2'. Jika 'test1' berisi file 'customer.txt' dan Anda mencoba menyalinnya ke direktori test2
$ hadoop fs -put /test1/customer.txt /test2Ini akan menghasilkan 'tidak ada file atau direktori' kesalahan karena 'put' akan mencari file dalam sistem file lokal dan bukan hdfs. Keduanya dimaksudkan untuk menyalin file (atau direktori) dari sistem file lokal ke hdfs saja.

0
Roney J