qual è la differenza tra i comandi della shell "hadoop fs" e i comandi della shell "hdfs dfs"?


109

Dovrebbero essere uguali?

ma perché i hadoop fscomandi " " mostrano hdfs filesmentre i hdfs dfscomandi " " mostrano i file locali?

ecco le informazioni sulla versione di hadoop:

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 Compilato da jenkins il lunedì 22 aprile 10:48:26 PDT 2013


1
È sbagliato fare questa domanda. la hdfs dfsmostrano i file HDFS troppo.
Charlie Lin

Risposte:


140

Di seguito sono riportati i tre comandi che appaiono uguali ma presentano differenze minime

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

  hadoop fs <args>

FS si riferisce a un file system generico che può puntare a qualsiasi file system come local, HDFS ecc. Quindi può essere utilizzato quando si ha a che fare con diversi file system come Local FS, (S) FTP, S3 e altri


  hadoop dfs <args>

dfs è molto specifico per HDFS. funzionerebbe per il funzionamento relativo a HDFS. Questo è stato deprecato e dovremmo usare invece hdfs dfs .


  hdfs dfs <args>

uguale a 2nd, vale a dire funzionerebbe per tutte le operazioni relative a HDFS ed è il comando consigliato al posto di hadoop dfs

di seguito è riportato l'elenco classificato come hdfscomandi.

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

Quindi, anche se usi hadoop dfs , cercherà di individuare hdfs e delegherà quel comando a hdfs dfs


5
Interessante :-). Quindi, se si hadoop fsriferisce a qualsiasi filesystem come, locale o hdf, come hadoop sceglie di mostrare il contenuto della directory principale HDFS quando lo faccio hadoop fs -ls /? Inoltre, come posso dire ad hadoop di mostrare il contenuto della mia directory principale locale quando eseguo il hadoop fs -ls /comando?
sgsi

8
È possibile fare riferimento all'FS locale utilizzando lo fileschema negli URI passati come argomento ai hadoop fscomandi (ad esempio hdoop fs -ls file:///). Se non viene detto nulla, il valore predefinito è hdfsschema, AFAIK ( hdoop fs -ls /== hadoop fs -ls hdfs:///).
dal

2
E perché dovrei aver bisogno hadoop fs -ls file:///, mentre ci sono modi più tradizionali per elencare i file locali?
srctaha

perché "hadoop" è stato sconsigliato a favore di "hdfs"? C'è qualche differenza funzionale o è solo un cambiamento nella sintassi?
Shuklaswag

31

inserisci qui la descrizione dell'immagine

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

La shell File System (FS) include vari comandi simili a shell che interagiscono direttamente con Hadoop Distributed File System (HDFS) e altri file system supportati da Hadoop, come Local FS, WebHDFS, S3 FS e altri.

bin / hadoop fs <args>

Tutti i comandi della shell di FS accettano gli URI del percorso come argomenti. Il formato dell'URI è schema: // autorità / percorso. Per HDFS lo schema è hdfs e per FS locale lo schema è file. Lo schema e l'autorità sono opzionali. Se non specificato, viene utilizzato lo schema predefinito specificato nella configurazione. Un file o una directory HDFS come / parent / child può essere specificato come hdfs: // namenodehost / parent / child o semplicemente come / parent / child (dato che la tua configurazione è impostata per puntare a hdfs: // namenodehost).

La maggior parte dei comandi nella shell di FS si comportano come i corrispondenti comandi Unix. Le differenze sono descritte con ciascuno dei comandi. Le informazioni sull'errore vengono inviate a stderr e l'output viene inviato a stdout.

Se viene utilizzato HDFS,

hdfs dfs

è un sinonimo.


5

fs si riferisce a qualsiasi file system, potrebbe essere locale o HDFS ma dfs si riferisce solo al file system HDFS. Quindi, se è necessario eseguire l'accesso / trasferire dati tra diversi filesystem, fs è la strada da percorrere.


5

Da quello che posso dire, non c'è differenza tra hdfs dfse hadoop fs. Sono semplicemente convenzioni di denominazione diverse in base alla versione di Hadoop che stai utilizzando. Ad esempio, le note in 1.2.1 usano hdfs dfsmentre 0.19 usa hadoop fs. Si noti che i comandi separati sono descritti alla lettera. Sono usati in modo identico.

Si noti inoltre che entrambi i comandi possono fare riferimento a diversi file system a seconda di ciò che si specifica (hdfs, file, s3, ecc.). Se non è elencato alcun file system, tornano al valore predefinito specificato nella configurazione.

Stai utilizzando Hadoop 2.0.0 e sembra (in base alla documentazione 2.0.5 ) che le versioni Alpha utilizzino hadoop fsed è impostato per utilizzare HDFS come schema predefinito nella tua configurazione. Il hdfs dfscomando potrebbe essere lasciato da prima e, poiché non specificato nella configurazione, potrebbe essere impostato per impostazione predefinita sul file system locale.

Quindi mi limiterò a restare hadoop fse non mi preoccuperei troppo poiché nella documentazione sono identici.


3

FS si riferisce a un file system generico che può puntare a qualsiasi file system come locale, HDFS ecc. Ma dfs è molto specifico per HDFS. Quindi quando usiamo FS può eseguire operazioni con da / a file system distribuito locale o hadoop fino alla destinazione. Ma la specifica dell'operazione DFS si riferisce a HDFS.

Di seguito sono riportati gli estratti dalla documentazione di hadoop che descrive questi due come shell differenti.

Shell FS La shell FileSystem (FS) è invocata da bin / hadoop fs. Tutti i comandi della shell FS accettano gli URI del percorso come argomenti. Il formato dell'URI è schema: // autority / path. Per HDFS lo schema è hdfs e per il filesystem locale lo schema è file. Lo schema e l'autorità sono opzionali. Se non specificato, viene utilizzato lo schema predefinito specificato nella configurazione. Un file o una directory HDFS come / parent / child può essere specificato come hdfs: // namenodehost / parent / child o semplicemente come / parent / child (dato che la tua configurazione è impostata per puntare a hdfs: // namenodehost). La maggior parte dei comandi nella shell di FS si comportano come i corrispondenti comandi Unix.

DFShell La shell HDFS viene richiamata da bin / hadoop dfs. Tutti i comandi della shell HDFS accettano gli URI del percorso come argomenti. Il formato dell'URI è schema: // autority / path. Per HDFS lo schema è hdfs e per il filesystem locale lo schema è file. Lo schema e l'autorità sono opzionali. Se non specificato, viene utilizzato lo schema predefinito specificato nella configurazione. Un file o una directory HDFS come / parent / child può essere specificato come hdfs: // namenode: namenodeport / parent / child o semplicemente come / parent / child (dato che la configurazione è impostata per puntare a namenode: namenodeport). La maggior parte dei comandi nella shell HDFS si comportano come i corrispondenti comandi Unix.

Quindi da quanto sopra si può concludere che tutto dipende dallo schema configurato. Quando si usano questi due comandi con URI assoluto, ad esempio schema: // a / b, il comportamento deve essere identico. Solo il valore dello schema configurato di default per file e hdfs rispettivamente per fs e dfs è la causa della differenza di comportamento.


Perché hdfs dfs punta a una posizione diversa da hdfs dfs /?
mel

sarebbe bello se ci fosse una shell interattiva come bash per hadoop
Chris

2

fs= file system
dfs= file system distribuito

fs = altri file system + file system distribuiti

FS si riferisce a un file system generico che può puntare a qualsiasi file system come locale, HDFS ecc. Ma dfs è molto specifico per HDFS. Quindi, quando usiamo FS, può eseguire operazioni con da / a file system distribuito locale o hadoop fino alla destinazione. Ma la specifica dell'operazione DFS si riferisce a HDFS.

Tutto dipende dallo schema configurato. Quando si utilizzano questi due comandi con URI assoluto, scheme://a/bil comportamento deve essere identico. Solo il valore dello schema configurato di default per file://e hdfs://per fse dfsrispettivamente è la causa della differenza di comportamento.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.