Qual é o local do HDFS no Hadoop?

Eu estou tentando executar o exemplo do WordCount no Hadoop depois de seguir alguns tutoriais on-line. No entanto, o que não está claro para mim é onde o arquivo é copiado do nosso sistema de arquivos local para o HDFS quando executamos o seguinte comando.

hadoop fs -copyFromLocal /host/tut/python-tutorial.pdf /usr/local/myhadoop-tmp/ 

Quando eu executei o seguinte comando, eu não vejo o meu python-tutorial.pdf listado aqui no HDFS.

 hadoop fs -ls 

Isso está me confundindo. Eu já especifiquei o diretório “myhadoop-tmp” no core-site.xml. Eu pensei que este diretório se tornará diretório HDFS para armazenar todos os arquivos de input.

 core-site.xml =============  hadoop.tmp.dir /usr/local/myhadoop-tmp A base for other temporary directories.  

Se este não for o caso, onde o HDFS está localizado na minha máquina? Que configuração determina o diretório HDFS e para onde o arquivo de input vai quando o copiamos do sistema de arquivos local para o HDFS?

Isso é definido na propriedade dfs.datanode.data.dir , cujo padrão é file://${hadoop.tmp.dir}/dfs/data (veja detalhes aqui ).

No entanto, no seu caso, o problema é que você não está usando o caminho completo dentro do HDFS. Em vez disso, faça:

 hadoop fs -ls /usr/local/myhadoop-tmp/ 

Observe que você também parece estar confundindo o caminho dentro do HDFS para o caminho em seu sistema de arquivos local. Dentro do HDFS, seu arquivo está em /usr/local/myhadoop-tmp/ . Em seu sistema local (e dada sua configuração), ele está em /usr/local/myhadoop-tmp/dfs/data/ ; lá, há uma estrutura de diretórios e uma convenção de nomenclatura definida pelo HDFS, que é independente de qualquer caminho no HDFS que você decida usar. Além disso, não terá o mesmo nome, pois é dividido em blocos e cada bloco recebe um ID exclusivo; o nome de um bloco é algo como blk_1073741826 .

Para concluir: o caminho local usado pelo datanode NÃO é o mesmo que os caminhos que você usa no HDFS. Você pode acessar seu diretório local procurando por arquivos, mas não deve fazer isso, pois você pode atrapalhar o gerenciamento de metadados do HDFS. Basta usar as ferramentas de linha de comando hadoop para copiar / mover / ler arquivos dentro do HDFS, usando qualquer caminho lógico (em HDFS) que você deseja usar. Esses caminhos dentro do HDFS não precisam estar vinculados aos caminhos usados ​​para o armazenamento de datanode local (não há razão para ou vantagem de fazer isso).