Jaka jest różnica między poleceniami powłoki „hadoop fs” a poleceniami powłoki „hdfs dfs”?


109

Czy mają być równi?

ale dlaczego polecenia „ hadoop fs” pokazują, hdfs filespodczas gdy polecenia „ hdfs dfs” pokazują pliki lokalne?

tutaj jest informacja o wersji hadoopa:

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 Skompilowane przez jenkins w poniedziałek, 22 kwietnia, 10:48:26 PDT 2013


1
To mój błąd, zadając to pytanie. hdfs dfspokazać pliki HDFS też.
Charlie Lin

Odpowiedzi:


140

Poniżej znajdują się trzy polecenia, które wydają się takie same, ale mają niewielkie różnice

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

  hadoop fs <args>

FS odnosi się do ogólnego systemu plików, który może wskazywać na dowolne systemy plików, takie jak lokalny, HDFS itp. Więc może być używany, gdy masz do czynienia z różnymi systemami plików, takimi jak Local FS, (S) FTP, S3 i inne


  hadoop dfs <args>

dfs jest bardzo specyficzny dla HDFS. działałby w przypadku operacji związanych z HDFS. To jest przestarzałe i powinniśmy zamiast tego używać hdfs dfs .


  hdfs dfs <args>

to samo co 2nd ie działałoby dla wszystkich operacji związanych z HDFS i jest zalecaną komendą zamiast hadoop dfs

poniżej znajduje się lista podzielona na hdfspolecenia.

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

Więc nawet jeśli używasz hadoop dfs , będzie wyglądać na zlokalizowanie hdfs i delegowanie tego polecenia do hdfs dfs


5
Ciekawy :-). Tak więc, jeśli hadoop fsodnosi się do dowolnego systemu plików, lokalnego lub hdfs, jak hadoop zdecydował się pokazać zawartość katalogu głównego HDFS, gdy to zrobię hadoop fs -ls /? Ponadto, jak mogę powiedzieć hadoopowi, aby wyświetlał zawartość mojego lokalnego katalogu głównego po uruchomieniu hadoop fs -ls /polecenia?
sgsi

8
Możesz odwołać się do lokalnego FS, używając fileschematu w identyfikatorach URI przekazanych jako argument do hadoop fspoleceń (np hdoop fs -ls file:///.). Jeśli nic nie jest powiedziane, domyślnie jest to hdfsschemat AFAIK ( hdoop fs -ls /== hadoop fs -ls hdfs:///).
frb

2
Dlaczego miałbym tego potrzebować hadoop fs -ls file:///, skoro istnieją bardziej tradycyjne sposoby wyświetlania plików lokalnych?
srctaha

Dlaczego „hadoop” został wycofany na rzecz „hdfs”? Czy jest jakaś różnica funkcjonalna, czy jest to tylko zmiana składni?
Shuklaswag,

31

wprowadź opis obrazu tutaj

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

Powłoka systemu plików (FS) zawiera różne polecenia podobne do powłoki, które bezpośrednio współdziałają z rozproszonym systemem plików Hadoop (HDFS), a także innymi systemami plików obsługiwanymi przez Hadoop, takimi jak Local FS, WebHDFS, S3 FS i inne.

bin / hadoop fs <args>

Wszystkie polecenia powłoki FS przyjmują jako argumenty identyfikatory URI ścieżek. Format URI to schemat: // urząd / ścieżka. Dla HDFS schematem jest hdfs, a dla lokalnego FS schematem jest plik. Schemat i uprawnienia są opcjonalne. Jeśli nie zostanie określony, używany jest domyślny schemat określony w konfiguracji. Plik lub katalog HDFS, taki jak / parent / child, można określić jako hdfs: // namenodehost / parent / child lub po prostu jako / parent / child (zakładając, że twoja konfiguracja wskazuje na hdfs: // namenodehost).

Większość poleceń w powłoce FS zachowuje się jak odpowiadające im polecenia Uniksa. Różnice są opisane przy każdym z poleceń. Informacje o błędzie są wysyłane na stderr, a dane wyjściowe na stdout.

Jeśli używany jest HDFS,

hdfs dfs

jest synonimem.


5

fs odnosi się do dowolnego systemu plików, może to być lokalny lub HDFS, ale dfs odnosi się tylko do systemu plików HDFS. Więc jeśli potrzebujesz uzyskać dostęp / przesłać dane między różnymi systemami plików, fs jest drogą do zrobienia.


5

Z tego, co wiem, nie ma różnicy między hdfs dfsi hadoop fs. Są to po prostu różne konwencje nazewnictwa oparte na używanej wersji Hadoop. Na przykład notatki w 1.2.1 używają, hdfs dfspodczas gdy 0.19 używa hadoop fs. Zwróć uwagę, że poszczególne polecenia są opisane dosłownie. Są używane identycznie.

Zauważ również, że oba polecenia mogą odnosić się do różnych systemów plików w zależności od tego, co określisz (hdfs, file, s3 itp.). Jeśli na liście nie ma żadnego systemu plików, przywracane są ustawienia domyślne określone w konfiguracji.

Używasz Hadoop 2.0.0 i wygląda na to ( na podstawie dokumentacji 2.0.5 ), że wersje Alpha używają hadoop fsi są ustawione na używanie HDFS jako domyślnego schematu w twojej konfiguracji. hdfs dfsKomenda może być pozostawiony z przed, a ponieważ nie określono w konfiguracji, może być po prostu nie stawili się do lokalnego systemu plików.

Więc po prostu trzymałbym się hadoop fsi nie martwiłbym się zbytnio, ponieważ w dokumentacji są identyczne.


3

FS odnosi się do ogólnego systemu plików, który może wskazywać na dowolne systemy plików, takie jak lokalny, HDFS itp. Jednak dfs jest bardzo specyficzny dla HDFS. Więc kiedy używamy FS , może on wykonywać operacje z / do lokalnego lub rozproszonego systemu plików Hadoop do miejsca docelowego. Ale określenie operacji DFS odnosi się do HDFS.

Poniżej znajdują się fragmenty dokumentacji hadoopa, która opisuje te dwie powłoki jako różne powłoki.

Powłoka FS Powłoka FileSystem (FS) jest wywoływana przez bin / hadoop fs. Wszystkie polecenia powłoki FS przyjmują jako argumenty identyfikatory URI ścieżek. Format URI to schemat: // autority / ścieżka. Dla HDFS schematem jest hdfs, a dla lokalnego systemu plików schematem file. Schemat i uprawnienia są opcjonalne. Jeśli nie zostanie określony, używany jest domyślny schemat określony w konfiguracji. Plik lub katalog HDFS, taki jak / parent / child, można określić jako hdfs: // namenodehost / parent / child lub po prostu jako / parent / child (zakładając, że twoja konfiguracja wskazuje na hdfs: // namenodehost). Większość poleceń w powłoce FS zachowuje się jak odpowiadające im polecenia Uniksa.

DFShell Powłoka HDFS jest wywoływana przez bin / hadoop dfs. Wszystkie polecenia powłoki HDFS przyjmują jako argumenty identyfikatory URI ścieżek. Format URI to schemat: // autority / ścieżka. Dla HDFS schematem jest hdfs, a dla lokalnego systemu plików schematem file. Schemat i uprawnienia są opcjonalne. Jeśli nie zostanie określony, używany jest domyślny schemat określony w konfiguracji. Plik lub katalog HDFS, taki jak / parent / child, można określić jako hdfs: // namenode: namenodeport / parent / child lub po prostu jako / parent / child (zakładając, że twoja konfiguracja wskazuje na namenode: namenodeport). Większość poleceń w powłoce HDFS zachowuje się jak odpowiadające im polecenia systemu Unix.

Z powyższego można więc wywnioskować, że wszystko zależy od konfiguracji schematu. Używając tych dwóch poleceń z absolutnym URI, tj. Schemat: // a / b zachowanie powinno być identyczne. Tylko domyślna skonfigurowana wartość schematu dla pliku i hdfs odpowiednio dla plików fs i dfs jest przyczyną różnicy w zachowaniu.


Dlaczego hdfs dfs wskazuje inną lokalizację niż hdfs dfs /?
mel

byłoby miło, gdyby istniała interaktywna powłoka, taka jak bash dla hadoopa
Chris,

2

fs= system plików
dfs= rozproszony system plików

fs = inne systemy plików + rozproszone systemy plików

FS odnosi się do ogólnego systemu plików, który może wskazywać na dowolne systemy plików, takie jak lokalny, HDFS itp. Jednak dfs jest bardzo specyficzny dla HDFS. Więc kiedy używamy FS, może on wykonywać operacje z / do lokalnego lub rozproszonego systemu plików Hadoop do miejsca docelowego. Ale określenie operacji DFS odnosi się do HDFS.

Wszystko zależy od konfiguracji schematu. W przypadku korzystania z tych dwóch poleceń z bezwzględnym URI, tj scheme://a/b. Zachowanie powinno być identyczne. Tylko domyślna skonfigurowana wartość schematu odpowiednio dla file://i hdfs://dla fsi dfsjest przyczyną różnicy w zachowaniu.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.