qual é a diferença entre os comandos de shell “hadoop fs” e os comandos de shell “hdfs dfs”?

109

Eles deveriam ser iguais?

mas, porque os hadoop fscomandos " " mostram o hdfs filesenquanto os hdfs dfscomandos " " mostram os arquivos locais?

aqui estão as informações da versão do 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 em Seg 22 de abril 10:48:26 PDT 2013

Charlie Lin
fonte
1
É meu erro fazer esta pergunta. o hdfs dfsshow os arquivos hdfs também.
Charlie Lin
2
Possível duplicata de Differnce entre `hadoop dfs` e` hadoop fs`
TechDog

Respostas:

140

A seguir estão os três comandos que parecem iguais, mas têm diferenças mínimas

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

  hadoop fs <args>

FS está relacionado a um sistema de arquivos genérico que pode apontar para qualquer sistema de arquivos, como local, HDFS etc. Portanto, isso pode ser usado quando você estiver lidando com sistemas de arquivos diferentes, como FS local, (S) FTP, S3 e outros


  hadoop dfs <args>

dfs é muito específico para HDFS. funcionaria para operação relacionada ao HDFS. Isso se tornou obsoleto e devemos usar hdfs dfs em seu lugar.


  hdfs dfs <args>

o mesmo que o segundo, isto é, funcionaria para todas as operações relacionadas ao HDFS e é o comando recomendado em vez do hadoop dfs

abaixo está a lista categorizada como hdfscomandos.

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

Portanto, mesmo se você usar hadoop dfs , ele procurará localizar hdfs e delegará esse comando para hdfs dfs

dpsdce
fonte
5
Interessante :-). Portanto, se estiver hadoop fsrelacionado a qualquer sistema de arquivos como local ou hdfs, como o hadoop escolhe mostrar o conteúdo do diretório raiz HDFS quando eu faço hadoop fs -ls /? Além disso, como posso dizer ao hadoop para mostrar o conteúdo do meu diretório raiz local quando executo o hadoop fs -ls /comando?
sgsi
8
Você pode consultar o FS local usando o fileesquema nos URIs passados ​​como argumento para hadoop fscomandos (por exemplo hdoop fs -ls file:///). Se nada for dito, o padrão é hdfsschema, AFAIK ( hdoop fs -ls /== hadoop fs -ls hdfs:///).
frb
2
E por que eu precisaria hadoop fs -ls file:///, embora existam maneiras mais tradicionais de listar arquivos locais?
srctaha
Por que 'hadoop' foi substituído por 'hdfs'? Existe alguma diferença funcional ou é apenas uma mudança na sintaxe?
Shuklaswag
31

insira a descrição da imagem aqui

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

O shell File System (FS) inclui vários comandos semelhantes a shell que interagem diretamente com o Hadoop Distributed File System (HDFS), bem como outros sistemas de arquivos que o Hadoop suporta, como Local FS, WebHDFS, S3 FS e outros.

bin / hadoop fs <args>

Todos os comandos do shell FS usam URIs de caminho como argumentos. O formato URI é scheme: // authority / path. Para HDFS, o esquema é hdfs, e para FS local, o esquema é arquivo. O esquema e a autoridade são opcionais. Se não for especificado, o esquema padrão especificado na configuração será usado. Um arquivo HDFS ou diretório como / pai / filho pode ser especificado como hdfs: // namenodehost / pai / filho ou simplesmente como / pai / filho (considerando que sua configuração está definida para apontar para hdfs: // namenodehost).

A maioria dos comandos no shell FS se comportam como comandos Unix correspondentes. As diferenças são descritas com cada um dos comandos. As informações de erro são enviadas para stderr e a saída é enviada para stdout.

Se HDFS estiver sendo usado,

hdfs dfs

é um sinônimo.

Maniganda Prakash
fonte
5

fs refere-se a qualquer sistema de arquivos, pode ser local ou HDFS, mas dfs refere-se apenas ao sistema de arquivos HDFS. Portanto, se você precisar acessar / transferir dados entre sistemas de arquivos diferentes, fs é o caminho a percorrer.

Ashish Bindal
fonte
5

Pelo que posso dizer, não há diferença entre hdfs dfse hadoop fs. Eles são simplesmente convenções de nomenclatura diferentes com base na versão do Hadoop que você está usando. Por exemplo, as notas em 1.2.1 usam hdfs dfsenquanto 0.19 usa hadoop fs. Observe que os comandos separados são descritos literalmente. Eles são usados ​​de forma idêntica.

Observe também que ambos os comandos podem referir-se a sistemas de arquivos diferentes, dependendo do que você especificar (hdfs, arquivo, s3, etc). Se nenhum sistema de arquivos estiver listado, eles retornam ao padrão que é especificado em sua configuração.

Você está usando o Hadoop 2.0.0 e parece (com base na documentação 2.0.5 ) que as versões Alpha usam hadoop fse estão definidas para usar o HDFS como o esquema padrão em sua configuração. O hdfs dfscomando pode ter sido deixado de antes e, como não foi especificado na configuração, pode estar apenas assumindo o padrão do sistema de arquivos local.

Então, eu apenas continuaria hadoop fse não me preocuparia muito, pois na documentação, eles são idênticos.

Eric Alberson
fonte
3

FS está relacionado a um sistema de arquivo genérico que pode apontar para qualquer sistema de arquivo, como local, HDFS etc. Mas dfs é muito específico para HDFS. Portanto, quando usamos FS, ele pode executar operações com sistema de arquivos de / para local ou hadoop para destino. Mas a especificação da operação DFS está relacionada ao HDFS.

Abaixo estão os trechos da documentação do hadoop que descreve esses dois como shells diferentes.

Shell FS O shell FileSystem (FS) é invocado por bin / hadoop fs. Todos os comandos do shell FS usam URIs de caminho como argumentos. O formato do URI é scheme: // autority / path. Para HDFS, o esquema é hdfs, e para o sistema de arquivos local, o esquema é file. O esquema e a autoridade são opcionais. Se não for especificado, o esquema padrão especificado na configuração será usado. Um arquivo HDFS ou diretório como / pai / filho pode ser especificado como hdfs: // namenodehost / pai / filho ou simplesmente como / pai / filho (considerando que sua configuração está definida para apontar para hdfs: // namenodehost). A maioria dos comandos no shell FS se comportam como comandos Unix correspondentes.

DFShell O shell HDFS é invocado por bin / hadoop dfs. Todos os comandos do shell HDFS usam URIs de caminho como argumentos. O formato do URI é scheme: // autority / path. Para HDFS, o esquema é hdfs, e para o sistema de arquivos local, o esquema é file. O esquema e a autoridade são opcionais. Se não for especificado, o esquema padrão especificado na configuração será usado. Um arquivo HDFS ou diretório como / pai / filho pode ser especificado como hdfs: // namenode: namenodeport / pai / filho ou simplesmente como / pai / filho (considerando que sua configuração está definida para apontar para namenode: namenodeport). A maioria dos comandos no shell HDFS se comportam como comandos Unix correspondentes.

Portanto, pode-se concluir que tudo depende da configuração do esquema. Ao usar esses dois comandos com URI absoluto, ou seja, esquema: // a / b, o comportamento deve ser idêntico. Apenas é o valor do esquema configurado padrão para arquivo e hdfs para fs e dfs, respectivamente, que é a causa da diferença de comportamento.

Isaac Aldana
fonte
Por que hdfs dfs aponta para um local diferente de hdfs dfs /?
mel
seria bom se houvesse um shell interativo como o bash for hadoop
Chris
2

fs= sistema de arquivos
dfs= sistema de arquivos distribuído

fs = outros sistemas de arquivos + sistemas de arquivos distribuídos

FS está relacionado a um sistema de arquivo genérico que pode apontar para qualquer sistema de arquivo, como local, HDFS etc. Mas dfs é muito específico para HDFS. Portanto, quando usamos FS, ele pode executar operações com sistema de arquivos de / para local ou hadoop para destino. Mas a especificação da operação DFS está relacionada ao HDFS.

Tudo depende da configuração do esquema. Ao usar estes dois comandos com URI absoluto, ou seja, scheme://a/bo comportamento deve ser idêntico. Apenas é o valor do esquema configurado padrão para file://e hdfs://para fse, dfsrespectivamente, que é a causa da diferença de comportamento.

user8144911
fonte