Pesquisar este blog

terça-feira, 23 de agosto de 2016

HDFS Hadoop Distributed File System o sistema de arquivos do Hadoop

O HDFS é um tipo de sistema de arquivos distribuídos que foi criado para ser usado em hardware comodity, ou seja máquinas dentro da rede da sua empresa.
Este sistema é altamente tolerante a falhas, uma vez que todo arquivo que é escrito nele, será replicado em pelo menos 3 discos diferentes, lembrando que este número de réplicas é um parâmetro de configuração e pode ser alterado. Ele possui uma velocidade de leitura e escrita muito grande, já que os arquivos podem ser distribuídos e escritos parcialmente em cada máquina, cada parte em uma máquina, para depois ser replicado.
Este sistema de arquivos pode ser utilizado em máquinas de baixo custo e por um sistema que possui uma quantidade de dados bem grande.
O HDFS pode ser acessado através de uma conexão de stream, que enviará para o cliente todas as alterações realizadas no sistema.
Para instalar o HDFS precisa-se de no mínimo 3 máquinas e como este sistema é altamente escalável, pode-se ter uma instância do hdfs com milhares de máquinas.

Falha de Hardware

Em um sistema com muitas máquinas uma falha de hardware certamente acontecerá, o HDFS foi desenvolvido contando com isto. Cada hd armazena uma parte do sistema de arquivos, como são vários componentes, principalmente em um sistema com milhares de máquinas, certamente uma delas irá falhar. Um dos pontos cruciais do HDFS é a rápida detecção de falha e a correção automática delas é um dos pontos principais deste sistema.

Acesso de dados via Streaming

Os aplicativos que rodam no HDFS precisam acessar os dados via streaming, isto permite que você plugue um sistema que fica ouvindo os dados chegarem, ao sistema de arquivos e leia os dados assim que eles forem gravados. Este sistema é focado em uma alta taxa de transferência de arquivos, ao invés de ser um sistema de baixa latência.

Grande quantidade de dados

Um arquivo típico de um sistema de HDFS tem de Gigabytes a Terabytes. O sistema do HDFS foi desenvolvido para suportar grandes arquivos, e foi configurado para performar bem com estes tipos de arquivos. Nele é possível agregar dados a estes arquivos com altas taxas de transferência e ele pode suportar milhões de arquivos em um único sistema.

Modelo de Coerência Simples

Os aplicativos do HDFS trabalham no sistema de escreva uma vez e leia diversas vezes. Depois que um arquivo foi criado, escrito e fechado, ele não mais necessitará ser alterado. Este tipo de restrição simplifica bastante as restrições de coerência dos dados e habilita uma alta taxa de transferência de dados. Aplicativos como crawlers da internet e MapReduce casam bem com este tipo de sistema de arquivos.

Mover a Computação é mais Simples que mover os dados

Em se tratando de uma aplicação onde a quantidade de dados acessados são gigantes, é mais fácil executar o processamento destes dados perto de onde eles estão armazenados, do que transferir grandes quantidades de dados para uma máquina processá-los. Isto minimiza o tráfego na rede e aumenta o desempenho do sistema.

NameNode e DataNode

O HDFS foi desenvolvido em uma arquitetura de mestre/escravo, onde o mestre, também conhecido como NameNode, é quem regula o acesso dos arquivos e a localização dos arquivos. Os DataNodes, que são os clientes, que é quem administra os dados e onde eles estão armazenados dentro das máquinas onde eles estão rodando, geralmente cada instância de DataNode roda em uma máquina.
Quando acessamos um sistema de dados HDFS, vemos uma lista de diretórios, como se fosse um sistema de arquivos comum. Ao escrevermos um arquivo, ele será divido em blocos e cada um destes blocos será armazenado, e replicado, em um DataNode, com isso consegue-se uma alta taxa de transferência de dados, pois ao ler um arquivo, ele estará armazenado em várias máquinas diferentes e a sua leitura será realizada em paralelo.
Os NameNodes são responsáveis por prover as operações de abertura, fechamento e renomeação dos arquivos e diretórios. Já os DataNodes são responsáveis por criar, apagar e replicar os blocos, lembrando que estas operações serão orquestradas pelo NameNode.

Funcionamento do HDFS

O HDFS foi planejado para rodar em sistemas com uma grande quantidade de dados, por isso os seus arquivos são divididos em blocos, os quais são replicados em várias máquinas.
É possível configurar a quantidade de réplicas que terá cada arquivo, este é um dos parâmetros de criação do arquivo.
Ao pensar em um sistema de arquivo que estará presente em milhares de máquinas, deve-se levar em conta como serão alocados cada um dos blocos de cada arquivo.
Nos datacenters as máquinas estão alocadas em Racks, sendo que cada rack contém uma determinada quantidade de máquinas. A comunicação das máquinas entre racks deve passar por um Switch e com isso o HDFS consegue detectar onde está cada DataNode.
Com estes dados, ao gravar um arquivo, geralmente todos os dados de um mesmo arquivo fica armazenado dentro de um mesmo Rack, afim de evitar muita transferência de dados pela rede ao lermos um arquivo. 
Com a informação da localização dos DataNodes, o HDFS também se preocupa em replicar os dados de um mesmo arquivo em diversos Racks diferentes, para evitar que dados sejam perdidos se um rack falhar por completo e também conseguir usar de diversos pontos de rede diferentes ao executar a leitura de um arquivo, fazendo com que a leitura dos dados seja bem rápida.

Apresentação