apa perbedaan antara perintah shell "hadoop fs" dan perintah shell "hdfs dfs"?


109

Apakah mereka seharusnya setara?

tapi, mengapa perintah " hadoop fs" menampilkan hdfs filessementara perintah " hdfs dfs" menampilkan file lokal?

berikut adalah informasi versi hadoop:

Hadoop 2.0.0-mr1-cdh4.2.1 Subversi git: //ubuntu-slave07.jenkins.cloudera.com/var/lib/jenkins/workspace/CDH4.2.1-Packaging-MR1/build/cdh4/mr1/2.0.0 -mr1-cdh4.2.1 / source -r Disusun oleh jenkins pada Senin 22 April 10:48:26 PDT 2013


1
Itu salahku untuk menanyakan pertanyaan ini. yang hdfs dfsmenunjukkan file HDFS juga.
Charlie Lin

Jawaban:


140

Berikut adalah tiga perintah yang tampak sama tetapi memiliki perbedaan menit

  1. hadoop fs {args}
  2. hadoop dfs {args}
  3. hdfs dfs {args}

  hadoop fs <args>

FS berkaitan dengan sistem file generik yang dapat mengarah ke sistem file apa pun seperti lokal, HDFS, dll. Jadi ini dapat digunakan ketika Anda berurusan dengan sistem file yang berbeda seperti Local FS, (S) FTP, S3, dan lainnya


  hadoop dfs <args>

dfs sangat spesifik untuk HDFS. akan bekerja untuk operasi yang berkaitan dengan HDFS. Ini sudah tidak digunakan lagi dan kita harus menggunakan hdfs dfs sebagai gantinya.


  hdfs dfs <args>

sama seperti 2nd yaitu akan bekerja untuk semua operasi yang terkait dengan HDFS dan merupakan perintah yang direkomendasikan daripada hadoop dfs

di bawah ini adalah daftar yang dikategorikan sebagai hdfsperintah.

  namenode|secondarynamenode|datanode|dfs|dfsadmin|fsck|balancer|fetchdt|oiv|dfsgroups

Jadi bahkan jika Anda menggunakan Hadoop DFS , akan terlihat mencari HDFS dan mendelegasikan bahwa perintah untuk HDFS DFS


5
Menarik :-). Jadi, jika hadoop fsterkait dengan sistem file seperti, lokal atau hdfs, Bagaimana hadoop memilih untuk menampilkan konten direktori root HDFS ketika saya melakukannya hadoop fs -ls /? Juga, Bagaimana cara memberi tahu hadoop untuk menampilkan konten direktori root lokal saya ketika saya menjalankan hadoop fs -ls /perintah?
sgsi

8
Anda bisa merujuk ke FS lokal dengan menggunakan fileskema di URI yang diteruskan sebagai argumen ke hadoop fsperintah (misalnya hdoop fs -ls file:///). Jika tidak ada yang dikatakan, defaultnya adalah hdfsskema, AFAIK ( hdoop fs -ls /== hadoop fs -ls hdfs:///).
frb

2
Dan mengapa saya perlu hadoop fs -ls file:///, sementara ada cara yang lebih tradisional untuk membuat daftar file lokal?
srctaha

mengapa 'hadoop' tidak digunakan lagi dan mendukung 'hdfs'? Apakah ada perbedaan fungsional atau hanya perubahan sintaks?
Shuklaswag

31

masukkan deskripsi gambar di sini

https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/FileSystemShell.html

Shell Sistem File (FS) menyertakan berbagai perintah mirip shell yang berinteraksi langsung dengan Hadoop Distributed File System (HDFS) serta sistem file lain yang didukung Hadoop, seperti Local FS, WebHDFS, S3 FS, dan lainnya.

bin / hadoop fs <args>

Semua perintah shell FS menggunakan URI jalur sebagai argumen. Format URI adalah skema: // otoritas / jalur. Untuk HDFS skemanya adalah hdfs, dan untuk FS Lokal skemanya adalah file. Skema dan kewenangan bersifat opsional. Jika tidak ditentukan, skema default yang ditentukan dalam konfigurasi akan digunakan. File atau direktori HDFS seperti / parent / child dapat ditentukan sebagai hdfs: // namenodehost / parent / child atau hanya sebagai / parent / child (asalkan konfigurasi Anda disetel ke hdfs: // namenodehost).

Sebagian besar perintah di shell FS berperilaku seperti perintah Unix yang sesuai. Perbedaan dijelaskan dengan masing-masing perintah. Informasi kesalahan dikirim ke stderr dan output dikirim ke stdout.

Jika HDFS digunakan,

hdfs dfs

adalah sinonim.


5

fs mengacu pada sistem file apa pun, bisa jadi lokal atau HDFS tetapi dfs hanya mengacu pada sistem file HDFS. Jadi jika Anda perlu melakukan akses / transfer data antara filesystem yang berbeda, fs adalah cara yang tepat.


5

Dari apa yang saya tahu, tidak ada perbedaan antara hdfs dfsdan hadoop fs. Mereka hanyalah konvensi penamaan yang berbeda berdasarkan versi Hadoop yang Anda gunakan. Misalnya, catatan dalam 1.2.1 digunakan hdfs dfssementara 0.19 digunakan hadoop fs. Perhatikan bahwa perintah terpisah dijelaskan secara verbatim. Mereka digunakan secara identik.

Perhatikan juga bahwa kedua perintah dapat merujuk ke sistem file yang berbeda tergantung pada apa yang Anda tentukan (hdfs, file, s3, dll). Jika tidak ada sistem file yang terdaftar, mereka kembali ke default yang ditentukan dalam konfigurasi Anda.

Anda menggunakan Hadoop 2.0.0 dan sepertinya ( berdasarkan dokumentasi 2.0.5 ) versi Alpha digunakan hadoop fsdan diatur untuk menggunakan HDFS sebagai skema default dalam konfigurasi Anda. The hdfs dfsperintah mungkin tersisa di dari sebelumnya, dan karena tidak ditentukan dalam konfigurasi, bisa saja akan default ke sistem file lokal.

Jadi saya hanya akan bertahan hadoop fsdan tidak terlalu khawatir karena dalam dokumentasi, mereka identik.


3

FS berhubungan dengan sistem file generik yang dapat menunjuk ke sistem file apapun seperti lokal, HDFS dll. Tetapi dfs sangat spesifik untuk HDFS. Jadi ketika kita menggunakan FS dapat melakukan operasi dengan dari / ke lokal atau sistem file terdistribusi hadoop ke tujuan. Tetapi menentukan operasi DFS berkaitan dengan HDFS.

Di bawah ini adalah kutipan dari dokumentasi hadoop yang menggambarkan keduanya sebagai cangkang yang berbeda.

FS Shell Shell FileSystem (FS) dipanggil oleh bin / hadoop fs. Semua perintah shell FS menggunakan URI jalur sebagai argumen. Format URI adalah skema: // autority / path. Untuk HDFS skemanya adalah hdfs, dan untuk sistem berkas lokal skemanya adalah file. Skema dan kewenangan bersifat opsional. Jika tidak ditentukan, skema default yang ditentukan dalam konfigurasi akan digunakan. File atau direktori HDFS seperti / parent / child dapat ditentukan sebagai hdfs: // namenodehost / parent / child atau hanya sebagai / parent / child (asalkan konfigurasi Anda disetel ke hdfs: // namenodehost). Sebagian besar perintah di shell FS berperilaku seperti perintah Unix yang sesuai.

DFShell Shell HDFS dipanggil oleh bin / hadoop dfs. Semua perintah shell HDFS menggunakan URI jalur sebagai argumen. Format URI adalah skema: // autority / path. Untuk HDFS skemanya adalah hdfs, dan untuk sistem berkas lokal skemanya adalah file. Skema dan kewenangan bersifat opsional. Jika tidak ditentukan, skema default yang ditentukan dalam konfigurasi akan digunakan. File atau direktori HDFS seperti / parent / child dapat ditentukan sebagai hdfs: // namenode: namenodeport / parent / child atau hanya sebagai / parent / child (asalkan konfigurasi Anda disetel ke namenode: namenodeport). Sebagian besar perintah di shell HDFS berperilaku seperti perintah Unix yang sesuai.

Jadi dari penjelasan di atas dapat disimpulkan bahwa semuanya tergantung dari skema konfigurasi. Saat menggunakan dua perintah ini dengan URI absolut, yaitu skema: // a / b, perilakunya harus identik. Hanya nilai skema yang dikonfigurasi default untuk file dan hdfs untuk masing-masing fs dan dfs yang merupakan penyebab perbedaan perilaku.


Mengapa hdfs dfs menunjuk ke lokasi yang berbeda dari hdfs dfs /?
mel

alangkah baiknya jika ada shell interaktif seperti bash untuk hadoop
Chris

2

fs= sistem file
dfs= sistem file terdistribusi

fs = sistem file lain + sistem file terdistribusi

FS berhubungan dengan sistem file generik yang dapat menunjuk ke sistem file apapun seperti lokal, HDFS dll. Tetapi dfs sangat spesifik untuk HDFS. Jadi ketika kita menggunakan FS dapat melakukan operasi dengan dari / ke lokal atau sistem file terdistribusi hadoop ke tujuan. Tetapi menentukan operasi DFS berkaitan dengan HDFS.

Itu semua tergantung pada konfigurasi skema. Saat menggunakan dua perintah ini dengan URI absolut, yaitu scheme://a/bperilaku harus identik. Hanya nilai skema yang dikonfigurasi default untuk file://dan hdfs://untuk fsdan dfsmasing - masing yang merupakan penyebab perbedaan perilaku.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.