Onde no sistema de arquivos linux posso ver arquivos do Hadoop HDFS?

3

Eu sou um analista de dados apenas vem de fundo non cs (não um programador de sistema hardcore) trabalhando no sistema operacional Linux. Ao explorar a análise usando o hadoop, uma pergunta me veio à mente que ... / é uma raiz sob a qual todos os arquivos do seu sistema existem de maneira hierárquica. No ambiente de hadoop, existe um sistema de arquivos especial chamado HDFS, que na verdade serve para armazenar arquivos enormes para serem processados por frameworks de programação hadoop.

hadoop -fs put localfile.txt 

No entanto, esses arquivos devem estar acessíveis em /. então onde posso ver esses arquivos usando cat, menos ou mais comandos linux sem prefixar o hadoop -fs

Se, infelizmente, eu recebo algum erro no ambiente hadoop / HDFS, então como posso acessar meus dados que ainda residem na minha máquina linux?

    
por bioinformatician 15.10.2013 / 18:52

5 respostas

2

Você não pode navegar diretamente pelo HDFS a partir do terminal usando cat ou comandos similares. O HDFS é um sistema de arquivos lógico e não mapeia diretamente para o sistema de arquivos Unix. Você deve ter um cliente HDFS e seu cluster do Hadoop deve estar em execução. Quando você navega no HDFS, você obtém sua estrutura de diretórios a partir do namenode e dos dados reais dos datanodes.

Embora não seja possível navegar, os dados são armazenados pelo daemon datanode. Seu caminho é especificado pela propriedade dfs.data.dir no hdfs-site.xml.

A estrutura de diretórios é armazenada pelo daemon namenode e seu caminho é especificado pela propriedade dfs.name.dir em hdfs-site.xml

    
por isaolmez 14.05.2014 / 22:51
1

O Hadoop armazena os dados localmente em formas de bloqueio em cada datanode e essa propriedade é configurável no arquivo hdfs-site.xml na propriedade dfs.data.dir

Na maior parte do caso, é

$HADOOP_HOME/data/dfs/data/hadoop-${user.name}/current
    
por Vikas Hardia 03.02.2014 / 14:10
1

Você pode usar o utilitário hdfs fsck para localizar o nome do bloco e, em seguida, pode localizá-lo manualmente no sistema de arquivos local:

$ echo "Hello world" >> test.txt
$ hdfs dfs -put test.txt /tmp/
$ hdfs fsck /tmp/test.txt -files -blocks
/tmp/test.txt 12 bytes, 1 block(s):  OK
    0. BP-1186293916-10.25.5.169-1427746975858:blk_1075191146_1451047 len=12 repl=1

Observe a string blk_.... . Use isso para localizar o arquivo:

$ find /hadoop/hdfs/data/current/BP-1186293916-10.25.5.169-1427746975858/current/finalized -name 'blk_1075191146*'
/hadoop/hdfs/data/current/BP-1186293916-10.25.5.169-1427746975858/current/finalized/subdir22/subdir29/blk_1075191146_1451047.meta
/hadoop/hdfs/data/current/BP-1186293916-10.25.5.169-1427746975858/current/finalized/subdir22/subdir29/blk_1075191146

$ cat /hadoop/hdfs/data/current/BP-1186293916-10.25.5.169-1427746975858/current/finalized/subdir22/subdir29/blk_1075191146
Hello world

Você pode ver o exemplo completo com a explicação aqui

    
por Alex 20.03.2017 / 13:40
0

Você pode navegar para todos os arquivos gerenciados pelo hadoop simplesmente escrevendo o seguinte comando:

O comando mais apropriado é hdfs dfs -ls

O comando dado no terminal linux mostrará uma saída do diretório / no qual a primeira coluna mostra as permissões do arquivo, a segunda coluna mostra o usuário do arquivo e a terceira coluna mostra nome do arquivo

    
por Samhash 08.09.2015 / 09:33
0

Na verdade, você pode catar o conteúdo do seu arquivo usando;

hdfs dfs -cat /user/test/somefile.txt

No Hadoop Namenode contém todas as informações sobre arquivos como nome do arquivo, metadados, diretório, permissão, os blocos que formam o arquivo e locais de blocos. Em caso de falha no namenode, você perderá os arquivos, pois você não sabe quais blocos formam o arquivo, embora você tenha todo o conteúdo em datanodes.

Como os arquivos são armazenados como blocos no Hadoop, se você souber o bloco e os datanodes dos arquivos, poderá ver o conteúdo deles. Aqui estamos assumindo que os arquivos são arquivos de texto.

Finalmente, o HDFS suporta o mapeamento de um diretório HDFS para um compartilhamento NFS local. Desta forma, você pode acessar hdfs sem usar comandos específicos do hdfs.

    
por devrimbaris 26.12.2016 / 17:11