Database
 sql >> Base de Dados >  >> RDS >> Database

Entendendo o sistema de entrada e saída do Hadoop


Ao contrário de qualquer subsistema de E/S, o Hadoop também vem com um conjunto de primitivos. Essas considerações primitivas, embora de natureza genérica, também acompanham o sistema Hadoop IO com alguma conotação especial, é claro. O Hadoop lida com vários terabytes de conjuntos de dados; uma consideração especial sobre essas primitivas dará uma idéia de como o Hadoop trata a entrada e saída de dados. Este artigo examina rapidamente essas primitivas para fornecer uma perspectiva sobre o sistema de entrada e saída do Hadoop.

Integridade dos dados


Integridade de dados significa que os dados devem permanecer precisos e consistentes em todas as operações de armazenamento, processamento e recuperação. Para garantir que nenhum dado seja perdido ou corrompido durante a persistência e o processamento, o Hadoop mantém restrições rigorosas de integridade de dados. Toda operação de leitura/gravação ocorre em discos, mais ainda através da rede é propensa a erros. E o volume de dados que o Hadoop lida apenas agrava a situação. A maneira usual de detectar dados corrompidos é por meio de somas de verificação. Uma soma de verificação é calculado quando os dados entram pela primeira vez no sistema e são enviados através do canal durante o processo de recuperação. A extremidade de recuperação calcula a soma de verificação novamente e combina com as recebidas. Se corresponder exatamente, os dados considerados livres de erros, caso contrário, contém erro. Mas o problema é – e se a soma de verificação enviada estiver corrompida? Isso é altamente improvável porque é um dado pequeno, mas não uma possibilidade inegável. Usar o tipo certo de hardware, como memória ECC, pode ser usado para aliviar a situação.

Isso é mera detecção. Portanto, para corrigir o erro, é utilizada outra técnica, chamada CRC (Cyclic Redundancy Check).

O Hadoop vai além e cria uma soma de verificação distinta para cada 512 bytes (padrão) de dados. Como o CRC-32 tem apenas 4 bytes, a sobrecarga de armazenamento não é um problema. Todos os dados que entram no sistema são verificados pelos datanodes antes de serem encaminhados para armazenamento ou processamento posterior. Os dados enviados para o pipeline do datanode são verificados por meio de somas de verificação e qualquer corrupção encontrada é imediatamente notificada ao cliente com ChecksumException . O cliente lido do datanode também passa pelo mesmo drill. Os datanodes mantêm um log de verificação de soma de verificação para acompanhar o bloco verificado. O log é atualizado pelo datanode ao receber um sinal de sucesso de verificação de bloco do cliente. Esse tipo de estatística ajuda a manter os discos defeituosos afastados.

Além disso, é feita uma verificação periódica no armazenamento de blocos com a ajuda do DataBlockScanner executando junto com o thread do datanode em segundo plano. Isso protege os dados contra corrupção na mídia de armazenamento físico.

O Hadoop mantém uma cópia ou réplicas dos dados. Isso é usado especificamente para recuperar dados de corrupção maciça. Uma vez que o cliente detecta um erro ao ler um bloco, ele imediatamente reporta ao datanode sobre o bloco defeituoso do namenode antes de lançar ChecksumException . O namenode então o marca como um bloco inválido e agenda qualquer referência adicional ao bloco para suas réplicas. Dessa forma, a réplica é mantida com outras réplicas e o bloco defeituoso marcado é removido do sistema.

Para cada arquivo criado no Hadoop LocalFileSystem , um arquivo oculto com o mesmo nome no mesmo diretório com a extensão ..crc é criado. Este arquivo mantém a soma de verificação de cada bloco de dados (512 bytes) no arquivo. A manutenção de metadados ajuda a detectar erros de leitura antes de lançar ChecksumException pelo LocalFileSystem .

Compressão


Tendo em mente o volume de dados com o qual o Hadoop lida, a compactação não é um luxo, mas um requisito. Há muitos benefícios óbvios da compactação de arquivos usada corretamente pelo Hadoop. Ele economiza os requisitos de armazenamento e é um recurso obrigatório para acelerar a transmissão de dados pela rede e pelos discos. Existem muitas ferramentas, técnicas e algoritmos comumente usados ​​pelo Hadoop. Muitos deles são bastante populares e têm sido usados ​​na compactação de arquivos ao longo dos tempos. Por exemplo, gzip, bzip2, LZO, zip e assim por diante são frequentemente usados.

Serialização


O processo que transforma objetos estruturados em fluxo de bytes é chamado de serialização . Isso é especificamente necessário para transmissão de dados pela rede ou persistência de dados brutos em discos. Desserialização é apenas o processo inverso, onde um fluxo de bytes é transformado em um objeto estruturado. Isso é particularmente necessário para a implementação de objetos dos bytes brutos. Portanto, não é surpreendente que a computação distribuída use isso em algumas áreas distintas:comunicação entre processos e persistência de dados.

O Hadoop usa RPC (Remote Procedure Call) para decretar a comunicação entre processos entre os nós. Portanto, o protocolo RPC utiliza o processo de serialização e desserialização para renderizar uma mensagem para o fluxo de bytes e vice-versa e enviá-la pela rede. No entanto, o processo deve ser compacto o suficiente para melhor usar a largura de banda da rede, bem como rápido, interoperável e flexível para acomodar atualizações de protocolo ao longo do tempo.

O Hadoop tem seu próprio formato de serialização compacto e rápido, Writables , que os programas MapReduce usam para gerar chaves e tipos de valor.

Estrutura de dados de arquivos


Existem alguns contêineres de alto nível que elaboram a estrutura de dados especializada no Hadoop para armazenar tipos especiais de dados. Por exemplo, para manter um log binário, o SequenceFile container fornece a estrutura de dados para persistir pares de valores-chave binários. Podemos então usar a chave, como um carimbo de data/hora representado por LongWritable e valor por Gravável , que se refere à quantidade registrada.

Existe outro contêiner, uma derivação ordenada de SequenceFile , chamado MapFile . Ele fornece um índice para pesquisas convenientes por chave.

Esses dois contêineres são interoperáveis ​​e podem ser convertidos entre si.

Conclusão


Esta é apenas uma visão geral rápida do sistema de entrada/saída do Hadoop. Vamos nos aprofundar em muitos detalhes intrincados em artigos subsequentes. Não é muito difícil entender o sistema de entrada/saída do Hadoop se tiver um conhecimento básico dos sistemas de E/S em geral. O Hadoop simplesmente colocou um pouco de suco extra nele para acompanhar sua natureza distribuída que funciona em grande escala de dados. Isso é tudo.

Referência


Branco, Tom. Hadoop, O Guia Definitivo, 2009 . Publicações O'Reilly.