¿Cuál es la diferencia entre los comandos de shell "hadoop fs" y los comandos de shell "hdfs dfs"?

109

¿Se supone que son iguales?

pero, ¿por qué los hadoop fscomandos " " muestran el hdfs filesmientras que los hdfs dfscomandos " " muestran los archivos locales?

aquí está la información de la versión 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 Compilado por jenkins el lunes 22 de abril a las 10:48:26 PDT de 2013

Charlie Lin
fuente
1
Me equivoco al hacer esta pregunta. también hdfs dfsmuestran los archivos hdfs.
Charlie Lin
2
Posible duplicado de la diferencia entre `hadoop dfs` y` hadoop fs`
TechDog

Respuestas:

140

Los siguientes son los tres comandos que parecen iguales pero tienen pequeñas diferencias

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

  hadoop fs <args>

FS se relaciona con un sistema de archivos genérico que puede apuntar a cualquier sistema de archivos como local, HDFS, etc. Por lo tanto, esto se puede usar cuando se trata de diferentes sistemas de archivos como Local FS, (S) FTP, S3 y otros.


  hadoop dfs <args>

dfs es muy específico de HDFS. funcionaría para la operación se relaciona con HDFS. Esto ha quedado obsoleto y deberíamos usar hdfs dfs en su lugar.


  hdfs dfs <args>

Igual que 2nd, es decir, funcionaría para todas las operaciones relacionadas con HDFS y es el comando recomendado en lugar de hadoop dfs

a continuación se muestra la lista categorizada como hdfscomandos.

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

Entonces, incluso si usa hadoop dfs , buscará ubicar hdfs y delegará ese comando a hdfs dfs

dpsdce
fuente
5
Interesante :-). Entonces, si se hadoop fsrelaciona con cualquier sistema de archivos como, local o hdfs, ¿cómo hadoop elegir mostrar el contenido del directorio raíz de HDFS cuando lo hago hadoop fs -ls /? Además, ¿cómo puedo decirle a hadoop que muestre el contenido de mi directorio raíz local cuando ejecuto el hadoop fs -ls /comando?
sgsi
8
Puede hacer referencia al FS local utilizando el fileesquema en los URI pasados ​​como argumento a los hadoop fscomandos (p hdoop fs -ls file:///. Ej .). Si no se dice nada, el hdfsesquema predeterminado es AFAIK ( hdoop fs -ls /== hadoop fs -ls hdfs:///).
viernes
2
¿Y por qué necesitaría hadoop fs -ls file:///, si bien existen formas más tradicionales de enumerar archivos locales?
srctaha
¿Por qué se desaprobó 'hadoop' en favor de 'hdfs'? ¿Existe alguna diferencia funcional o es solo un cambio en la sintaxis?
Shuklaswag
31

ingrese la descripción de la imagen aquí

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

El shell del sistema de archivos (FS) incluye varios comandos similares a los de un shell que interactúan directamente con el sistema de archivos distribuido de Hadoop (HDFS), así como con otros sistemas de archivos compatibles con Hadoop, como Local FS, WebHDFS, S3 FS y otros.

bin / hadoop fs <args>

Todos los comandos del shell FS toman URI de ruta como argumentos. El formato de URI es esquema: // autoridad / ruta. Para HDFS, el esquema es hdfs y para Local FS, el esquema es archivo. El esquema y la autoridad son opcionales. Si no se especifica, se utiliza el esquema predeterminado especificado en la configuración. Un archivo o directorio HDFS como / parent / child se puede especificar como hdfs: // namenodehost / parent / child o simplemente como / parent / child (dado que su configuración está configurada para apuntar a hdfs: // namenodehost).

La mayoría de los comandos del shell FS se comportan como los correspondientes comandos de Unix. Las diferencias se describen con cada uno de los comandos. La información de error se envía a stderr y la salida se envía a stdout.

Si se utiliza HDFS,

hdfs dfs

es un sinónimo.

Maniganda Prakash
fuente
5

fs se refiere a cualquier sistema de archivos, podría ser local o HDFS, pero dfs se refiere solo al sistema de archivos HDFS. Entonces, si necesita acceder / transferir datos entre diferentes sistemas de archivos, fs es el camino a seguir.

Ashish Bindal
fuente
5

Por lo que puedo decir, no hay diferencia entre hdfs dfsy hadoop fs. Son simplemente diferentes convenciones de nomenclatura según la versión de Hadoop que esté utilizando. Por ejemplo, las notas en 1.2.1 usan hdfs dfsmientras que 0.19 usan hadoop fs. Observe que los comandos separados se describen literalmente. Se utilizan de forma idéntica.

También tenga en cuenta que ambos comandos pueden hacer referencia a diferentes sistemas de archivos según lo que especifique (hdfs, archivo, s3, etc.). Si no aparece ningún sistema de archivos, vuelven al valor predeterminado que se especifica en su configuración.

Estás usando Hadoop 2.0.0 y parece ( basado en la documentación 2.0.5 ) que usan las versiones Alpha hadoop fsy está configurado para usar HDFS como el esquema predeterminado en tu configuración. Es hdfs dfsposible que el comando se haya dejado desde antes y, dado que no se especificó en la configuración, podría estar predeterminado en el sistema de archivos local.

Así que me quedaría hadoop fsy no me preocuparía demasiado, ya que en la documentación son idénticos.

Eric Alberson
fuente
3

FS se relaciona con un sistema de archivos genérico que puede apuntar a cualquier sistema de archivos como local, HDFS, etc. Pero dfs es muy específico para HDFS. Entonces, cuando usamos FS , puede realizar operaciones con desde / hacia local o sistema de archivos distribuido hadoop al destino. Pero especificar la operación DFS se relaciona con HDFS.

A continuación se muestran los extractos de la documentación de hadoop que describe estos dos como shells diferentes.

Shell FS El shell FileSystem (FS) es invocado por bin / hadoop fs. Todos los comandos del shell FS toman URI de ruta como argumentos. El formato de URI es el esquema: // autoridad / ruta. Para HDFS, el esquema es hdfs, y para el sistema de archivos local, el esquema es file. El esquema y la autoridad son opcionales. Si no se especifica, se utiliza el esquema predeterminado especificado en la configuración. Un archivo o directorio HDFS como / parent / child se puede especificar como hdfs: // namenodehost / parent / child o simplemente como / parent / child (dado que su configuración está configurada para apuntar a hdfs: // namenodehost). La mayoría de los comandos del shell FS se comportan como los correspondientes comandos de Unix.

DFShell El shell HDFS es invocado por bin / hadoop dfs. Todos los comandos de shell de HDFS toman URI de ruta como argumentos. El formato de URI es el esquema: // autoridad / ruta. Para HDFS, el esquema es hdfs, y para el sistema de archivos local, el esquema es file. El esquema y la autoridad son opcionales. Si no se especifica, se utiliza el esquema predeterminado especificado en la configuración. Un archivo o directorio HDFS como / parent / child se puede especificar como hdfs: // namenode: namenodeport / parent / child o simplemente como / parent / child (dado que su configuración está configurada para apuntar a namenode: namenodeport). La mayoría de los comandos del shell HDFS se comportan como los correspondientes comandos de Unix.

Entonces, de lo anterior se puede concluir que todo depende de la configuración del esquema. Cuando se utilizan estos dos comandos con URI absoluto, es decir, esquema: // a / b, el comportamiento será idéntico. Solo es el valor de esquema configurado predeterminado para el archivo y hdfs para fs y dfs, respectivamente, lo que es la causa de la diferencia de comportamiento.

Isaac Aldana
fuente
¿Por qué hdfs dfs apunta a una ubicación diferente a hdfs dfs /?
mel
Sería bueno si hubiera un shell interactivo como bash para hadoop
Chris
2

fs= sistema de archivos
dfs= sistema de archivos distribuido

fs = otros sistemas de archivos + sistemas de archivos distribuidos

FS se relaciona con un sistema de archivos genérico que puede apuntar a cualquier sistema de archivos como local, HDFS, etc. Pero dfs es muy específico para HDFS. Entonces, cuando usamos FS, puede realizar operaciones con desde / hacia local o sistema de archivos distribuido hadoop al destino. Pero especificar la operación DFS se relaciona con HDFS.

Todo depende de la configuración del esquema. Cuando se utilizan estos dos comandos con URI absoluto, es decir, scheme://a/bel comportamiento será idéntico. Solo es el valor del esquema configurado por defecto para file://y hdfs://para fsy, dfsrespectivamente, que es la causa de la diferencia de comportamiento.

usuario8144911
fuente