"hadoop fs" kabuk komutları ile "hdfs dfs" kabuk komutları arasındaki fark nedir?


109

Eşit olmaları mı gerekiyor?

ama, neden " hadoop fs" komutları göstermek hdfs filesise " hdfs dfs" komutları yerel dosyaları göstermek?

hadoop sürüm bilgisi:

Hadoop 2.0.0-mr1-cdh4.2.1 Subversion 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 Derleyen jenkins, Pzt 22:48:26 PDT 2013


1
Bu soruyu sormak benim hatam. hdfs dfsÇok HDF'ler dosyaları gösterecek.
Charlie Lin

Yanıtlar:


140

Aşağıdakiler aynı görünen ancak küçük farkları olan üç komuttur.

  1. hadoop fs {args}
  2. hadoop dfs {değiştirgeler}
  3. hdfs dfs {değiştirgeler}

  hadoop fs <args>

FS, yerel, HDFS vb. Gibi herhangi bir dosya sistemine işaret edebilen genel bir dosya sistemi ile ilgilidir. Bu nedenle, Yerel FS, (S) FTP, S3 ve diğerleri gibi farklı dosya sistemleriyle uğraşırken bu kullanılabilir.


  hadoop dfs <args>

dfs, HDFS'ye çok özeldir. operasyon için işe yarayacaktı, HDFS ile ilgilidir. Bu kullanımdan kaldırıldı ve bunun yerine hdfs dfs kullanmalıyız.


  hdfs dfs <args>

2. ie ile aynıdır, HDFS ile ilgili tüm işlemler için çalışır ve hadoop dfs yerine önerilen komuttur

aşağıdaki liste hdfskomutlar olarak sınıflandırılmıştır .

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

Yani hadoop dfs kullansanız bile , hdf'leri bulmaya ve bu komutu hdfs dfs'ye devredecektir.


5
İlginç :-). Öyleyse, hadoop fsyerel veya hdfs gibi herhangi bir dosya sistemiyle ilgiliyse, hadoop bunu yaptığımda HDFS kök dizin içeriğini göstermeyi nasıl seçer hadoop fs -ls /? Ayrıca, hadoop'a hadoop fs -ls /komutu çalıştırdığımda yerel kök dizin içeriğimi göstermesini nasıl söyleyebilirim ?
sgsi

8
Sen kullanarak yerel FS başvurabilir fileiçin argüman olarak geçirilen URI'ler de şemayı hadoop fskomutları (örneğin hdoop fs -ls file:///). Hiçbir şey söylenmezse, varsayılan olarak hdfsşema, AFAIK ( hdoop fs -ls /== hadoop fs -ls hdfs:///) olur.
frb

2
hadoop fs -ls file:///Yerel dosyaları listelemenin daha geleneksel yolları varken neden ihtiyacım olsun ki?
srctaha

'hadoop' neden 'hdfs' lehine kullanımdan kaldırıldı? Herhangi bir işlevsel fark var mı yoksa sadece sözdiziminde bir değişiklik mi?
Shuklaswag

31

görüntü açıklamasını buraya girin

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

Dosya Sistemi (FS) kabuğu, Hadoop Dağıtılmış Dosya Sistemi (HDFS) ve Hadoop'un desteklediği Yerel FS, WebHDFS, S3 FS ve diğerleri gibi diğer dosya sistemleriyle doğrudan etkileşime giren çeşitli kabuk benzeri komutları içerir.

bin / hadoop fs <args>

Tüm FS kabuk komutları, yol URI'lerini bağımsız değişken olarak alır. URI biçimi şema: // yetki / yol şeklindedir. HDFS için şema hdfs'dir ve Yerel FS için şema dosyadır. Program ve yetki isteğe bağlıdır. Belirtilmezse, konfigürasyonda belirtilen varsayılan şema kullanılır. / Parent / child gibi bir HDFS dosyası veya dizini hdfs: // namenodehost / parent / child veya basitçe / parent / child olarak belirtilebilir (yapılandırmanızın hdfs: // namenodehost'u gösterecek şekilde ayarlanması koşuluyla).

FS kabuğundaki komutların çoğu karşılık gelen Unix komutları gibi davranır. Komutların her birinde farklılıklar açıklanmıştır. Hata bilgisi stderr'e gönderilir ve çıktı stdout'a gönderilir.

HDFS kullanılıyorsa,

hdfs dfs

eşanlamlıdır.


5

fs herhangi bir dosya sistemini ifade eder, yerel veya HDFS olabilir ancak dfs yalnızca HDFS dosya sistemini ifade eder. Dolayısıyla, farklı dosya sistemleri arasında veri erişimi / aktarımı yapmanız gerekiyorsa, gitmenin yolu fs'dir.


5

Anlayabildiğim kadarıyla, hdfs dfsve arasında hiçbir fark yok hadoop fs. Bunlar, kullandığınız Hadoop'un hangi sürümünü kullandığınıza bağlı olarak sadece farklı adlandırma kurallarıdır. Örneğin, notlar 1.2.1 kullanıma hdfs dfsiken 0.19 kullanımları hadoop fs. Ayrı komutların kelimesi kelimesine açıklandığına dikkat edin. Aynı şekilde kullanılırlar.

Ayrıca, her iki komutun da belirttiğiniz şeye (hdfs, dosya, s3 vb.) Bağlı olarak farklı dosya sistemlerine başvurabileceğini unutmayın. Listelenen dosya sistemi yoksa, yapılandırmanızda belirtilen varsayılana geri dönerler.

Hadoop 2.0.0 kullanıyorsunuz ve görünüşe göre ( 2.0.5 belgelerine göre ) Alpha sürümleri hadoop fsHDFS'yi yapılandırmanızda varsayılan şema olarak kullanıyor ve kullanmak üzere ayarlanmış. hdfs dfsKomut önce gelen bırakılmış olabilir ve konfigürasyonda belirtilmemiş beri, sadece yerel dosya sistemine varsaymak mümkündür.

Bu yüzden sadece bağlı kalırdım hadoop fsve çok fazla endişelenmem çünkü dokümantasyonda aynılar.


3

FS , yerel, HDFS vb. Gibi herhangi bir dosya sistemine işaret edebilen genel bir dosya sistemi ile ilgilidir. Ancak dfs , HDFS'ye çok özeldir. Bu yüzden FS kullandığımızda , yerelden / yerel veya hadoop dağıtılmış dosya sistemiyle hedefe işlem gerçekleştirebilir. Ancak DFS işleminin belirtilmesi HDFS ile ilgilidir.

Aşağıda, bu ikisini farklı mermiler olarak tanımlayan hadoop belgelerinden alıntılar bulunmaktadır.

FS Kabuğu FileSystem (FS) kabuğu, bin / hadoop fs tarafından çağrılır. Tüm FS kabuk komutları, yol URI'lerini argüman olarak alır. URI biçimi, şema: // otomatik kimlik / yol şeklindedir. HDFS için şema hdfs'dir ve yerel dosya sistemi için şema dosyadır. Program ve yetki isteğe bağlıdır. Belirtilmezse, konfigürasyonda belirtilen varsayılan şema kullanılır. / Parent / child gibi bir HDFS dosyası veya dizini, hdfs: // namenodehost / parent / child veya yalnızca / parent / child olarak belirtilebilir (yapılandırmanızın hdfs: // namenodehost'u gösterecek şekilde ayarlanması koşuluyla). FS kabuğundaki komutların çoğu karşılık gelen Unix komutları gibi davranır.

DFShell HDFS kabuğu, bin / hadoop dfs tarafından çağrılır. Tüm HDFS kabuk komutları, yol URI'lerini bağımsız değişken olarak alır. URI biçimi, şema: // otomatik kimlik / yol şeklindedir. HDFS için şema hdfs'dir ve yerel dosya sistemi için şema dosyadır. Program ve yetki isteğe bağlıdır. Belirtilmezse, konfigürasyonda belirtilen varsayılan şema kullanılır. Bir HDFS dosyası veya / parent / child gibi bir dizin, hdfs: // namenode: namenodeport / parent / child veya basitçe / parent / child olarak belirtilebilir (yapılandırmanızın namenode: namenodeport'u gösterecek şekilde ayarlanması koşuluyla). HDFS kabuğundaki komutların çoğu, karşılık gelen Unix komutları gibi davranır.

Dolayısıyla yukarıdakilerden, hepsinin yapılandırılan şemaya bağlı olduğu sonucuna varılabilir. Bu iki komutu mutlak URI ile kullanırken, yani şema: // a / b davranış aynı olacaktır. Yalnızca dosya için varsayılan yapılandırılmış şema değeri ve sırasıyla fs ve dfs için hdfs, bu da davranıştaki farklılığın nedenidir.


Hdfs dfs neden hdfs dfs / 'den farklı bir yere işaret ediyor?
Mel

hadoop için bash gibi etkileşimli bir kabuk olsaydı iyi olurdu
Chris

2

fs= dosya sistemi
dfs= dağıtılmış dosya sistemi

fs = diğer dosya sistemleri + dağıtılmış dosya sistemleri

FS, yerel, HDFS vb. Gibi herhangi bir dosya sistemine işaret edebilen genel bir dosya sistemi ile ilgilidir. Ancak dfs, HDFS'ye çok özeldir. Bu yüzden FS kullandığımızda, yerelden / yerel veya hadoop dağıtılmış dosya sistemiyle hedefe işlem gerçekleştirebilir. Ancak DFS işleminin belirtilmesi HDFS ile ilgilidir.

Her şey yapılandırılan şemaya bağlıdır. Bu iki komutu mutlak URI ile kullanırken, yani scheme://a/bdavranış aynı olacaktır. Davranıştaki farklılığın nedeni yalnızca için file://ve hdfs://için fsve dfssırasıyla varsayılan yapılandırılmış şema değeridir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.