Comprimir dados em hadoop
Os volumes enormes de dados que são realidades em um típico Hadoop implantação make compressão 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.
Conteúdo
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 encurtada de compressor /dezembroompressor, é a tecnologia (software ou hardware, ou ambos) de compressão e descompressão data- é a implementação de um algoritmo de compressão / descompressão.
Você precisa saber que alguns codecs apoiar algo chamado de compressão divisí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.
Video: TecMundo Explica: Como funciona a compressão de arquivos?
compressão divisíveis é um conceito importante em um contexto Hadoop. A maneira Hadoop funciona é que os arquivos são divididos se eles são maiores do que definição do 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 mapeador.
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, eo desempenho pode demorar um enorme sucesso como um trabalho espera por um único mapeador para processar vários dados 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á sendo escrito para seu cluster Hadoop.
Com os computadores, como com a vida, nada é gratuito. Ao comprimir dados, você está trocando ciclos de processamento de espaço em disco. E quando esses 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.
Video: Hints, quando usá-los para otimizar instruções SQL?
Se o arquivo de entrada para um trabalho 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 é descompactado automaticamente quando ele está sendo lido por MapReduce.
A extensão de nome de ficheiro de entrada determina qual suportado codec é usado para descomprimir os dados automaticamente. Por exemplo, a extensão .gz identifica o arquivo como um arquivo compactado pelo gzip.
Ele também pode ser útil para comprimir a saída intermédia da fase mapa no fluxo de processamento de MapReduce. Porque a saída função de mapa é gravado em disco e enviados através da rede para as tarefas reduzir, 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 é comprimido) 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 mais se aproxima as 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 da 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 proporções modestas compressão, mas a compactação rápida e velocidades de descompressão. (Na verdade, ele tem as velocidades de descompressão mais rápidas, o que torna altamente desejável para os conjuntos de dados que são susceptíveis de ser consultado com frequência.)
Video: O que é Hadoop? (Parte 1)
O codec Snappy é integrado 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 Licença Pública GNU (GPL).
LZO suporta compressão divisível, o 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 o mapeador de onde se pode seguramente dividir o arquivo compactado. LZO só é realmente desejável se você precisa compactar arquivos de texto.
codec | Extensão de arquivo | Divisíveis? | Grau de Compressão | velocidade de compressão |
---|---|---|---|---|
gzip | .gz | Não | Médio | Médio |
bzip2 | .bz2 | sim | Alto | Lento |
mal-humorado | .mal-humorado | Não | Médio | Rápido |
LZO | .lzo | Não, a não ser indexado | Médio | Rá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 fornecer-lhe algum controle sobre o que o equilíbrio entre a taxa de compressão ea velocidade deve ser de tempo de compressão.
Por exemplo, Gzip permite regular a velocidade de compressão, especificando um número 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.