A compactação de dados no Hadoop

Os volumes de dados enormes que são realidades em um típico Hadoop implantação make compressão de uma necessidade. A compressão de dados definitivamente poupa-lhe uma grande quantidade de espaço de armazenamento e é certo para acelerar o movimento de que os dados em todo o cluster. Não surpreendentemente, uma série de esquemas de compressão disponíveis, chamados codecs, estão lá fora para você considerar.

Em uma implantação Hadoop, você está lidando (potencialmente) com um grande número de nós escravos individuais, cada um dos quais tem um número de unidades de disco de grandes dimensões. Não é incomum para um nó escravo indivíduo a ter mais de 45 TB de espaço de armazenamento bruto disponíveis para HDFS.

Mesmo que nós escravos Hadoop são projetados para ser barato, eles não são livres, e com grandes volumes de dados que têm uma tendência a crescer a taxas crescentes, a compressão é uma ferramenta óbvia para controlar volumes de dados extremos.

Primeiro, alguns termos básicos: A codec, que é uma forma abreviada de compressor /dezembroompressor, é a tecnologia (software ou hardware, ou ambos) de compressão e descompressão de dados é a implementação de um algoritmo de compressão / descompressão.

Você precisa saber que alguns codecs apoiar algo chamado de compressão separável e que codecs diferem tanto a velocidade com que eles podem comprimir e descomprimir dados e o grau em que eles podem comprimi-lo.

compressão separável é um conceito importante em um contexto Hadoop. A maneira Hadoop funciona é que os arquivos são divididos se eles são maiores do que ajuste o tamanho do bloco do arquivo, e splits de arquivos individuais podem ser processados ​​em paralelo por diferentes cartógrafos.

Com a maioria dos codecs, splits de arquivo de texto não pode ser descomprimido independentemente de outras divisões do mesmo arquivo, para que esses codecs são disse a ser não-separável, então o processamento MapReduce é limitado a um único recurso de mapeamento.

Como o arquivo pode ser descompactado apenas como um todo, e não como partes individuais com base em divisões, não pode haver processamento paralelo de tal arquivo, e desempenho pode demorar um enorme sucesso como um trabalho em espera por um único recurso de mapeamento para processar dados múltiplos blocos que não pode ser descomprimido independentemente.

compressão divisíveis só é um fator para arquivos de texto. Para arquivos binários, Hadoop codecs de compressão comprimir dados dentro de um recipiente codificado em binário, dependendo do tipo de arquivo (por exemplo, um SequenceFile, Avro, ou ProtocolBuffer).

Falando de desempenho, há um custo (em termos de recursos de processamento e tempo) associados a comprimir os dados que estão sendo gravados em seu cluster Hadoop.

Com os computadores, como com vida, nada é gratuito. Ao comprimir dados, você está trocando ciclos de processamento de espaço em disco. E quando esse dados estão sendo lidos, há um custo associado a descomprimir os dados também. Certifique-se de pesar as vantagens de economia de armazenamento contra a sobrecarga de desempenho adicional.

Se o arquivo de entrada para um trabalho de MapReduce contém dados compactados, o tempo que é necessário para ler esses dados de HDFS é reduzido e desempenho no trabalho é reforçada. Os dados de entrada é descomprimido automaticamente quando está a ser lido por MapReduce.

A extensão de entrada filename determina que apoiou codec é usado para descomprimir os dados automaticamente. Por exemplo, a extensão .gz identifica o arquivo como um arquivo compactado pelo gzip.

Também pode ser útil para comprimir a saída intermédia da fase mapa no fluxo de processamento de MapReduce. Porque saída função de mapa é gravado no disco e enviados através da rede para as tarefas de redução, comprimindo a saída pode resultar em melhorias significativas de desempenho.

E se você deseja armazenar a saída MapReduce como arquivos de histórico para uso futuro, comprimindo esses dados pode reduzir significativamente a quantidade de espaço necessário no HDFS.

Há muitos diferentes algoritmos de compressão e ferramentas, e as suas características e pontos fortes variar. O mais comum trade-off é entre taxas de compressão (o grau em que um arquivo é compactado) e comprimir velocidades / descomprimir. O quadro Hadoop suporta vários codecs. O quadro transparente compacta e descompacta a maioria dos formatos de entrada e saída de arquivo.

A lista a seguir identifica alguns codecs comuns que são suportados pela estrutura Hadoop. Certifique-se de escolher o codec que melhor corresponda às demandas de seu caso de uso particular (por exemplo, com as cargas de trabalho, onde a velocidade de processamento é importante, escolheu um codec com altas velocidades de descompressão):

  • gzip: Um utilitário de compressão que foi adotada pelo projeto GNU, Gzip (abreviação de GNU zip) gera arquivos compactados que têm uma extensão .gz. Você pode usar o comando gunzip para descompactar arquivos que foram criados por um número de utilitários de compressão, incluindo Gzip.

  • bzip2: Do ponto de vista de usabilidade, Bzip2 e Gzip são semelhantes. Bzip2 gera uma taxa de compressão melhor do que faz Gzip, mas é muito mais lento. Na verdade, de todos os codecs de compressão disponíveis em Hadoop, Bzip2 é de longe o mais lento.

    Se você estiver configurando um arquivo que você raramente terá que consultar e o espaço é um prêmio elevado, então talvez seria Bzip2 valer a pena considerar.

  • Snappy: O codec Snappy do Google fornece índices modestos compressão, mas a compactação rápida e velocidades de descompressão. (Na verdade, tem as velocidades de descompressão mais rápidos, o que faz com que seja altamente desejável para os conjuntos de dados que são susceptíveis de ser interrogado muitas vezes).

    O codec Snappy está integrado no Hadoop Common, um conjunto de utilitários comuns que suporta outros subprojetos Hadoop. Você pode usar Snappy como um add-on para o versões mais recentes do Hadoop que ainda não fornecem suporte Snappy codec.

  • LZO: Semelhante a Snappy, LZO (abreviação de Lempel-Ziv-Oberhumer, o trio de cientistas da computação, que surgiu com o algoritmo) fornece proporções modestas compressão, mas a compactação rápida e velocidades de descompressão. LZO está licenciado sob a GNU Public License (GPL).

    LZO suporta compressão separável, que permite o processamento paralelo de splits de arquivo de texto compactados por seus trabalhos de MapReduce. LZO precisa criar um índice quando se comprime um arquivo, porque com blocos de compressão de comprimento variável, um índice é necessário para dizer ao mapeador de onde se pode seguramente dividir o arquivo compactado. LZO só é realmente desejável se você precisa compactar arquivos de texto.

Hadoop Codecs
codecExtensão de arquivoDivisíveis?Grau de compressãovelocidade de compressão
gzip.gzNãoMédioMédio
bzip2.bz2simAltoLento
mal-humorado.mal-humoradoNãoMédioRápido
LZO.lzoNenhuma, a não ser indexadoMédioRápido

Todos os algoritmos de compressão deve fazer trade-offs entre o grau de compressão e a velocidade de compressão que eles podem alcançar. Os codecs listados fornecê-lo com algum controle sobre o que o equilíbrio entre a taxa de compressão e velocidade deve ser em tempo de compressão.

Por exemplo, Gzip permite regular a velocidade da compressão, especificando um inteiro negativo (ou palavra-chave), onde -1 indica o nível de compressão mais rápido, e -9 indica o nível de compactação mais lenta. O nível de compressão padrão é -6.

menu