Entendendo o Hadoop Distributed File System (HDFS)

Nesta postagem irei explicar e dar exemplos sobre o funcionamento do HDFS .

O hadoop é um framework open-source para realizar o processamento de big data. Por ser um framework que trabalha com big data algumas pessoas acreditam que precisam de máquinas super potentes para conseguirem rodar o hadoop, muito pelo contrário, máquinas com baixos recursos conseguem rodar o hadoop pois ele trabalha com um sistema de cluster.

O cluster hadoop pode funcionar da seguinte forma:
  • Nameode(master) serve para controlar e distribuir os processos solicitados entre todos os datanodes do cluster e receber os heartbeats(batimentos) dos datanodes para saber quantos nodes o cluster tem disponível para realizar processamento.
  • SecondaryNameNode um node igual o namenode que entra em ação caso o namenode para de funcionar ou em um cluster muito grande o SecondaryNameNode ajuda o namenode a controlar os datanodes.
  • Datanodes(slaves) que são os nodes onde é processada todas as informações solicitadas pelo datanodes.


O recurso do cluster é somado pelos recursos de todos os datanodes.

O hadoop possui um sistema de armazenamento de dados chamado de HDFS ou Hadoop Distributed File System, o HDFS trabalha da seguinte forma: Um arquivo de 500MB é divido em 4 blocos (tamanho do bloco padrão 128MB sendo possível realizar a alteração), sendo 3 deles com tamanho de 128MB e o último com 116MB, assim o arquivo é quebrado em 4 blocos e espalhado pelos datanodes, além de realizar essa quebra no tamanho do arquivo o HDFS também possui um fator de replicação de blocos onde o  padrão é 3 ou seja cada bloco é replicado 3 vezes em datanodes diferentes pelo cluster gerando assim grande confiabilidade, pois se um datanode cair com informações de um bloco de arquivo outro datanode possui a mesma informação, assim a informação é mantida e não se perde.
Nesta imagem possuímos 8 datanodes com fator de replicação igual a 3 e o arquivo foi divido em 5 blocos

Começando com o HDFS


Os comandos do HDFS possuem a seguinte estrutura:
hdfs dfs --parametro
Os parâmetros que o HDFS recebe são os seguintes:
Usage: hadoop fs [generic options]
 [-appendToFile <localsrc> ... <dst>]
 [-cat [-ignoreCrc] <src> ...]
 [-checksum <src> ...]
 [-chgrp [-R] GROUP PATH...]
 [-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
 [-chown [-R] [OWNER][:[GROUP]] PATH...]
 [-copyFromLocal [-f] [-p] [-l] <localsrc> ... <dst>]
 [-copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
 [-count [-q] [-h] <path> ...]
 [-cp [-f] [-p | -p[topax]] <src> ... <dst>]
 [-createSnapshot <snapshotDir> [<snapshotName>]]
 [-deleteSnapshot <snapshotDir> <snapshotName>]
 [-df [-h] [<path> ...]]
 [-du [-s] [-h] <path> ...]
 [-expunge]
 [-find <path> ... <expression> ...]
 [-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
 [-getfacl [-R] <path>]
 [-getfattr [-R] {-n name | -d} [-e en] <path>]
 [-getmerge [-nl] <src> <localdst>]
 [-help [cmd ...]]
 [-ls [-d] [-h] [-R] [<path> ...]]
 [-mkdir [-p] <path> ...]
 [-moveFromLocal <localsrc> ... <dst>]
 [-moveToLocal <src> <localdst>]
 [-mv <src> ... <dst>]
 [-put [-f] [-p] [-l] <localsrc> ... <dst>]
 [-renameSnapshot <snapshotDir> <oldName> <newName>]
 [-rm [-f] [-r|-R] [-skipTrash] <src> ...]
 [-rmdir [--ignore-fail-on-non-empty] <dir> ...]
 [-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]]
 [-setfattr {-n name [-v value] | -x name} <path>]
 [-setrep [-R] [-w] <rep> <path> ...]
 [-stat [format] <path> ...]
 [-tail [-f] <file>]
 [-test -[defsz] <path>]
 [-text [-ignoreCrc] <src> ...]
 [-touchz <path> ...]
 [-truncate [-w] <length> <path> ...]
 [-usage [cmd ...]]
A maioria dos parâmetros listados são comandos linux, irei comentar somente alguns comandos que acho interessante

copyFromLocal e put:

Os dois comandos abaixo servem para copiar um arquivo da sua máquina local para dentro do HDFS

hdfs dfs -put /home/colla/arquivo.txt /tmp
hdfs dfs -copyFromLocal /home/colla/arquivo.txt /tmp

Neste exemplo estou pegando o arquivo.txt que está armazenado na minha home e estou jogando dentro da pasta tmp do HDFS

setrep

O comando setrep server para alterar o fator de replicação que foi explicado acima.
hdfs dfs -setrep -w 4 /home/colla/arquivo.txt
Neste caso o fator de replicação do arquivo /home/colla/arquivo.txt passou a ser 4 réplicas.

getmerge

O comando getmerge serve para juntar aquivos no hdfs e mandar para a sua máquina local.

root@colla: hdfs dfs ls /tmp

arquivo1.txt arquivo2.txt arquivo3.txt

root@colla: hdfs dfs -getmerge /tmp/* /home/colla/arquivo_junto.txt
No exemplo acima os arquivos: arquivo1.txt arquivo2.txt e arquivo3.txt do HDFS foram juntados para o arquivo_junto.txt na máquina local no diretório /home/colla/.

Share:

3 comentários: