Quelle est la différence entre les commandes shell «hadoop fs» et les commandes shell «hdfs dfs»?


109

Sont-ils censés être égaux?

mais, pourquoi les hadoop fscommandes " " affichent les commandes hdfs filestandis que les hdfs dfscommandes " " affichent les fichiers locaux?

voici les informations de version de 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 Compilé par jenkins le lundi 22 avril 10:48:26 PDT 2013


1
J'ai tort de poser cette question. le hdfs dfsspectacle les fichiers hdfs aussi.
Charlie Lin

Réponses:


140

Voici les trois commandes qui semblent identiques mais ont des différences minimes

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

  hadoop fs <args>

FS se rapporte à un système de fichiers générique qui peut pointer vers n'importe quel système de fichiers comme local, HDFS etc. Cela peut donc être utilisé lorsque vous traitez avec différents systèmes de fichiers tels que Local FS, (S) FTP, S3 et autres


  hadoop dfs <args>

dfs est très spécifique à HDFS. fonctionnerait pour le fonctionnement concerne HDFS. Cela est obsolète et nous devrions utiliser hdfs dfs à la place.


  hdfs dfs <args>

idem 2nd ie fonctionnerait pour toutes les opérations liées à HDFS et est la commande recommandée au lieu de hadoop dfs

ci-dessous se trouve la liste classée comme hdfscommandes.

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

Donc, même si vous utilisez hadoop dfs , il cherchera à localiser hdfs et à déléguer cette commande à hdfs dfs


5
Intéressant :-). Donc, si cela hadoop fsconcerne un système de fichiers comme, local ou hdfs, comment hadoop choisit d'afficher le contenu du répertoire racine HDFS lorsque je le fais hadoop fs -ls /? Aussi, comment puis-je dire à hadoop d'afficher le contenu de mon répertoire racine local lorsque j'exécute la hadoop fs -ls /commande?
sgsi

8
Vous pouvez faire référence au FS local en utilisant le fileschéma au niveau des URI passés comme argument aux hadoop fscommandes (par exemple hdoop fs -ls file:///). Si rien n'est dit, la valeur par défaut est hdfsschema, AFAIK ( hdoop fs -ls /== hadoop fs -ls hdfs:///).
frb

2
Et pourquoi aurais-je besoin hadoop fs -ls file:///, alors qu'il existe des méthodes plus traditionnelles pour répertorier les fichiers locaux?
srctaha

pourquoi «hadoop» a-t-il été déconseillé au profit de «hdfs»? Y a-t-il une différence fonctionnelle ou s'agit-il simplement d'un changement de syntaxe?
Shuklaswag

31

entrez la description de l'image ici

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

Le shell du système de fichiers (FS) comprend diverses commandes de type shell qui interagissent directement avec le système de fichiers distribués Hadoop (HDFS) ainsi qu'avec d'autres systèmes de fichiers pris en charge par Hadoop, tels que Local FS, WebHDFS, S3 FS et autres.

bin / hadoop fs <args>

Toutes les commandes shell FS prennent les URI de chemin comme arguments. Le format URI est schéma: // autorité / chemin. Pour HDFS, le schéma est hdfs, et pour le FS local, le schéma est fichier. Le schéma et l'autorité sont facultatifs. S'il n'est pas spécifié, le schéma par défaut spécifié dans la configuration est utilisé. Un fichier ou un répertoire HDFS tel que / parent / child peut être spécifié comme hdfs: // namenodehost / parent / child ou simplement comme / parent / child (étant donné que votre configuration est définie pour pointer vers hdfs: // namenodehost).

La plupart des commandes du shell FS se comportent comme des commandes Unix correspondantes. Les différences sont décrites avec chacune des commandes. Les informations d'erreur sont envoyées à stderr et la sortie est envoyée à stdout.

Si HDFS est utilisé,

hdfs dfs

est un synonyme.


5

fs fait référence à n'importe quel système de fichiers, il peut être local ou HDFS mais dfs se réfère uniquement au système de fichiers HDFS. Donc, si vous devez effectuer un accès / transfert de données entre différents systèmes de fichiers, fs est la voie à suivre.


5

D'après ce que je peux dire, il n'y a aucune différence entre hdfs dfset hadoop fs. Ce sont simplement des conventions de dénomination différentes en fonction de la version de Hadoop que vous utilisez. Par exemple, les notes de 1.2.1 utilisent hdfs dfstandis que 0.19 utilise hadoop fs. Notez que les commandes séparées sont décrites textuellement. Ils sont utilisés à l'identique.

Notez également que les deux commandes peuvent faire référence à différents systèmes de fichiers en fonction de ce que vous spécifiez (hdfs, file, s3, etc.). Si aucun système de fichiers n'est répertorié, ils reviennent à la valeur par défaut spécifiée dans votre configuration.

Vous utilisez Hadoop 2.0.0 et il semble ( basé sur la documentation 2.0.5 ) que les versions Alpha utilisent hadoop fset sont configurées pour utiliser le HDFS comme schéma par défaut dans votre configuration. La hdfs dfscommande peut être laissée depuis avant, et comme elle n'est pas spécifiée dans la configuration, elle pourrait simplement être utilisée par défaut sur le système de fichiers local.

Donc je m'en tiens simplement hadoop fset ne m'inquiète pas trop car dans la documentation, ils sont identiques.


3

FS se rapporte à un système de fichiers générique qui peut pointer vers n'importe quel système de fichiers comme local, HDFS, etc. Mais dfs est très spécifique à HDFS. Ainsi, lorsque nous utilisons FS, il peut effectuer des opérations avec le système de fichiers distribué from / to local ou hadoop vers la destination. Mais la spécification du fonctionnement DFS concerne HDFS.

Vous trouverez ci-dessous des extraits de la documentation hadoop qui décrit ces deux shells différents.

Shell FS Le shell FileSystem (FS) est appelé par bin / hadoop fs. Toutes les commandes du shell FS prennent les URI de chemin comme arguments. Le format de l'URI est schéma: // autorité / chemin. Pour HDFS, le schéma est hdfs et pour le système de fichiers local, le schéma est file. Le schéma et l'autorité sont facultatifs. S'il n'est pas spécifié, le schéma par défaut spécifié dans la configuration est utilisé. Un fichier ou un répertoire HDFS tel que / parent / child peut être spécifié comme hdfs: // namenodehost / parent / child ou simplement comme / parent / child (étant donné que votre configuration est définie pour pointer vers hdfs: // namenodehost). La plupart des commandes du shell FS se comportent comme des commandes Unix correspondantes.

DFShell Le shell HDFS est appelé par bin / hadoop dfs. Toutes les commandes shell HDFS prennent les URI de chemin comme arguments. Le format de l'URI est schéma: // autorité / chemin. Pour HDFS, le schéma est hdfs et pour le système de fichiers local, le schéma est file. Le schéma et l'autorité sont facultatifs. S'il n'est pas spécifié, le schéma par défaut spécifié dans la configuration est utilisé. Un fichier ou un répertoire HDFS tel que / parent / child peut être spécifié comme hdfs: // namenode: namenodeport / parent / child ou simplement comme / parent / child (étant donné que votre configuration est définie pour pointer vers namenode: namenodeport). La plupart des commandes du shell HDFS se comportent comme des commandes Unix correspondantes.

Donc, à partir de ce qui précède, on peut conclure que tout dépend du schéma configuré. Lors de l'utilisation de ces deux commandes avec un URI absolu, c'est-à-dire schéma: // a / b, le comportement doit être identique. Seule sa valeur de schéma configurée par défaut pour file et hdfs pour fs et dfs respectivement, ce qui est la cause de la différence de comportement.


Pourquoi hdfs dfs pointe vers un emplacement différent de hdfs dfs /?
mel

ce serait bien s'il y avait un shell interactif comme bash pour hadoop
Chris

2

fs= système de fichiers
dfs= système de fichiers distribué

fs = autres systèmes de fichiers + systèmes de fichiers distribués

FS se rapporte à un système de fichiers générique qui peut pointer vers n'importe quel système de fichiers comme local, HDFS, etc. Mais dfs est très spécifique à HDFS. Ainsi, lorsque nous utilisons FS, il peut effectuer des opérations avec le système de fichiers distribué from / to local ou hadoop vers la destination. Mais la spécification du fonctionnement DFS concerne HDFS.

Tout dépend du schéma configuré. Lors de l'utilisation de ces deux commandes avec URI absolu, c'est scheme://a/b-à- dire que le comportement doit être identique. Seule sa valeur de schéma configurée par défaut pour file://et hdfs://pour fset dfsrespectivement, qui est la cause de la différence de comportement.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.