Was ist der Unterschied zwischen den Shell-Befehlen "hadoop fs" und den Shell-Befehlen "hdfs dfs"?

109

Sollen sie gleich sein?

Aber warum hadoop fszeigen die Befehle " " die, hdfs fileswährend die hdfs dfsBefehle " " die lokalen Dateien anzeigen?

Hier sind die Informationen zur Hadoop-Version:

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 Zusammengestellt von Jenkins am Montag, 22. April, 10:48:26 PDT 2013

Charlie Lin
quelle
1
Es ist falsch, diese Frage zu stellen. Das hdfs dfszeigt auch die HDFS-Dateien.
Charlie Lin
2
Mögliches Duplikat des Unterschieds zwischen "hadoop dfs" und "hadoop fs"
TechDog

Antworten:

140

Es folgen die drei Befehle, die gleich aussehen, aber winzige Unterschiede aufweisen

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

  hadoop fs <args>

FS bezieht sich auf ein generisches Dateisystem, das auf beliebige Dateisysteme wie Local, HDFS usw. verweisen kann. Dies kann also verwendet werden, wenn Sie mit verschiedenen Dateisystemen wie Local FS, (S) FTP, S3 und anderen arbeiten


  hadoop dfs <args>

dfs ist sehr spezifisch für HDFS. würde für den Betrieb arbeiten bezieht sich auf HDFS. Dies ist veraltet und wir sollten stattdessen hdfs dfs verwenden.


  hdfs dfs <args>

Das gleiche wie 2nd, dh es würde für alle Operationen im Zusammenhang mit HDFS funktionieren und ist der empfohlene Befehl anstelle von hadoop dfs

Unten ist die Liste als hdfsBefehle kategorisiert .

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

Selbst wenn Sie hadoop dfs verwenden , wird hdfs suchen und diesen Befehl an hdfs dfs delegieren

dpsdce
quelle
5
Interessant :-). Also, wenn es hadoop fssich um ein Dateisystem wie "local" oder "hdfs" handelt, wie hat hadoop dann den Inhalt des HDFS-Stammverzeichnisses angezeigt, wenn ich dies tue hadoop fs -ls /? Wie kann ich hadoop anweisen, meinen lokalen Stammverzeichnisinhalt anzuzeigen, wenn ich den hadoop fs -ls /Befehl ausführe ?
SGSI
8
Sie können auf den lokalen FS verweisen, indem Sie das fileSchema an den URIs verwenden, die als Argument an hadoop fsBefehle übergeben werden (z hdoop fs -ls file:///. B. ). Wenn nichts gesagt wird, wird standardmäßig das hdfsSchema AFAIK ( hdoop fs -ls /== hadoop fs -ls hdfs:///) verwendet.
Fr
2
Und warum sollte ich brauchen hadoop fs -ls file:///, während es traditionellere Möglichkeiten gibt, lokale Dateien aufzulisten?
Srctaha
warum wurde 'hadoop' zugunsten von 'hdfs' abgelehnt? Gibt es funktionale Unterschiede oder handelt es sich nur um eine Änderung der Syntax?
Shuklaswag
31

Geben Sie hier die Bildbeschreibung ein

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

Die Dateisystem-Shell (FS) enthält verschiedene Shell-ähnliche Befehle, die direkt mit dem Hadoop Distributed File System (HDFS) sowie anderen von Hadoop unterstützten Dateisystemen wie Local FS, WebHDFS, S3 FS und anderen interagieren.

bin / hadoop fs <args>

Alle FS-Shell-Befehle verwenden Pfad-URIs als Argumente. Das URI-Format lautet Schema: // Autorität / Pfad. Für HDFS ist das Schema hdfs und für das lokale FS ist das Schema eine Datei. Das Schema und die Autorität sind optional. Wenn nicht angegeben, wird das in der Konfiguration angegebene Standardschema verwendet. Eine HDFS-Datei oder ein HDFS-Verzeichnis wie / parent / child kann als hdfs: // namenodehost / parent / child oder einfach als / parent / child angegeben werden (vorausgesetzt, Ihre Konfiguration zeigt auf hdfs: // namenodehost).

Die meisten Befehle in der FS-Shell verhalten sich wie entsprechende Unix-Befehle. Unterschiede werden mit jedem der Befehle beschrieben. Fehlerinformationen werden an stderr gesendet und die Ausgabe wird an stdout gesendet.

Wenn HDFS verwendet wird,

hdfs dfs

ist ein Synonym.

Maniganda Prakash
quelle
5

fs bezieht sich auf ein beliebiges Dateisystem, es kann lokal oder HDFS sein, aber dfs bezieht sich nur auf das HDFS-Dateisystem. Wenn Sie also Zugriffs- / Übertragungsdaten zwischen verschiedenen Dateisystemen ausführen müssen, ist fs der richtige Weg.

Ashish Bindal
quelle
5

Soweit ich das beurteilen kann, gibt es keinen Unterschied zwischen hdfs dfsund hadoop fs. Es handelt sich lediglich um unterschiedliche Namenskonventionen, je nachdem, welche Version von Hadoop Sie verwenden. Zum Beispiel werden die Notizen in 1.2.1 verwendet, hdfs dfswährend 0.19 verwendet wird hadoop fs. Beachten Sie, dass die einzelnen Befehle wörtlich beschrieben werden. Sie werden identisch verwendet.

Beachten Sie auch, dass beide Befehle je nach Ihren Angaben (hdfs, file, s3 usw.) auf unterschiedliche Dateisysteme verweisen können. Wenn kein Dateisystem aufgeführt ist, wird auf den in Ihrer Konfiguration angegebenen Standard zurückgegriffen.

Sie verwenden Hadoop 2.0.0 und es sieht so aus , als würden Alpha-Versionen ( basierend auf der 2.0.5-Dokumentation ) hadoop fsHDFS als Standardschema in Ihrer Konfiguration verwenden. Der hdfs dfsBefehl wird möglicherweise von zuvor belassen und kann, da er nicht in der Konfiguration angegeben ist, standardmäßig das lokale Dateisystem verwenden.

Ich würde mich also einfach daran halten hadoop fsund mir keine Sorgen machen, da sie in der Dokumentation identisch sind.

Eric Alberson
quelle
3

FS bezieht sich auf ein generisches Dateisystem, das auf alle Dateisysteme wie lokal, HDFS usw. verweisen kann. Dfs ist jedoch sehr spezifisch für HDFS. Wenn wir also FS verwenden , kann es Operationen mit von / zu lokalem oder Hadoop-verteiltem Dateisystem zum Ziel ausführen. Die Angabe der DFS- Operation bezieht sich jedoch auf HDFS.

Nachfolgend finden Sie die Auszüge aus der Hadoop-Dokumentation, in der diese beiden als unterschiedliche Shells beschrieben werden.

FS-Shell Die FileSystem (FS) -Shell wird von bin / hadoop fs aufgerufen. Alle FS-Shell-Befehle verwenden Pfad-URIs als Argumente. Das URI-Format lautet Schema: // Autorität / Pfad. Für HDFS ist das Schema hdfs, und für das lokale Dateisystem ist das Schema Datei. Das Schema und die Autorität sind optional. Wenn nicht angegeben, wird das in der Konfiguration angegebene Standardschema verwendet. Eine HDFS-Datei oder ein HDFS-Verzeichnis wie / parent / child kann als hdfs: // namenodehost / parent / child oder einfach als / parent / child angegeben werden (vorausgesetzt, Ihre Konfiguration zeigt auf hdfs: // namenodehost). Die meisten Befehle in der FS-Shell verhalten sich wie entsprechende Unix-Befehle.

DFShell Die HDFS-Shell wird von bin / hadoop dfs aufgerufen. Alle HDFS-Shell-Befehle verwenden Pfad-URIs als Argumente. Das URI-Format lautet Schema: // Autorität / Pfad. Für HDFS ist das Schema hdfs, und für das lokale Dateisystem ist das Schema Datei. Das Schema und die Autorität sind optional. Wenn nicht angegeben, wird das in der Konfiguration angegebene Standardschema verwendet. Eine HDFS-Datei oder ein HDFS-Verzeichnis wie / parent / child kann als hdfs: // namenode: namenodeport / parent / child oder einfach als / parent / child angegeben werden (vorausgesetzt, Ihre Konfiguration zeigt auf namenode: namenodeport). Die meisten Befehle in der HDFS-Shell verhalten sich wie entsprechende Unix-Befehle.

Aus dem Obigen kann also geschlossen werden, dass alles von der Konfiguration des Schemas abhängt. Bei Verwendung dieser beiden Befehle mit absolutem URI, dh Schema: // a / b, muss das Verhalten identisch sein. Nur der standardmäßig konfigurierte Schemawert für file und hdfs für fs bzw. dfs ist die Ursache für unterschiedliche Verhaltensweisen.

Isaac Aldana
quelle
Warum zeigt hdfs dfs auf den anderen Speicherort als hdfs dfs /?
Mel
Es wäre schön, wenn es eine interaktive Shell wie Bash für Hadoop gäbe
Chris
2

fs= Dateisystem
dfs= verteiltes Dateisystem

fs = andere Dateisysteme + verteilte Dateisysteme

FS bezieht sich auf ein generisches Dateisystem, das auf alle Dateisysteme wie lokal, HDFS usw. verweisen kann. Dfs ist jedoch sehr spezifisch für HDFS. Wenn wir also FS verwenden, kann es Operationen mit von / zu lokalem oder Hadoop-verteiltem Dateisystem zum Ziel ausführen. Die Angabe der DFS-Operation bezieht sich jedoch auf HDFS.

Es hängt alles vom konfigurierten Schema ab. Bei Verwendung dieser beiden Befehle mit absolutem URI muss scheme://a/bdas Verhalten identisch sein. Nur sein Der Standardwert für Schema konfigurierte file://und hdfs://für fsund dfsjeweils die die Ursache für den Unterschied im Verhalten ist.

user8144911
quelle