Se você ainda não decidiu, eu iria em frente e escreveria esquemas Avro para seus dados. Feito isso, escolher entre arquivos de contêiner Avro e arquivos Parquet é tão simples quanto trocar, por exemplo,
job.setOutputFormatClass(AvroKeyOutputFormat.class);
AvroJob.setOutputKeySchema(MyAvroType.getClassSchema());
para
job.setOutputFormatClass(AvroParquetOutputFormat.class);
AvroParquetOutputFormat.setSchema(job, MyAvroType.getClassSchema());
O formato Parquet parece ser um pouco mais computacionalmente intensivo no lado da gravação - por exemplo, exigindo RAM para armazenamento em buffer e CPU para solicitar os dados, etc., mas deve reduzir os custos de E / S, armazenamento e transferência, além de ser eficiente lê especialmente com consultas semelhantes a SQL (por exemplo, Hive ou SparkSQL) que abordam apenas uma parte das colunas.
Em um projeto, acabei revertendo de contêineres Parquet para Avro porque o esquema era muito extenso e aninhado (sendo derivado de algumas classes orientadas a objetos razoavelmente hierárquicas) e resultou em milhares de colunas Parquet. Por sua vez, nossos grupos de linhas eram realmente largos e rasos, o que significa que demorou uma eternidade antes que pudéssemos processar um pequeno número de linhas na última coluna de cada grupo.
Ainda não tive muita chance de usar o Parquet para dados mais normalizados / sãos, mas entendo que, se bem usado, permite melhorias significativas de desempenho.
Avro é um formato baseado em linha. Se você deseja recuperar os dados como um todo, você pode usar o Avro
Parquet é um formato baseado em coluna. Se seus dados consistirem em muitas colunas, mas você estiver interessado em um subconjunto de colunas, você pode usar Parquet
O HBase é útil quando há atualização frequente de dados. Avro é rápido na recuperação, Parquet é muito mais rápido.
fonte
Avro
Parquet
Da escolha de um formato de armazenamento de dados HDFS - Avro vs. Parquet e mais
fonte
Tanto Avro quanto Parquet são formatos de armazenamento "autodescritivos", o que significa que ambos incorporam dados, informações de metadados e esquema ao armazenar dados em um arquivo. O uso de qualquer um dos formatos de armazenamento depende do caso de uso. Três aspectos constituem a base sobre a qual você pode escolher qual formato será o ideal para o seu caso:
Operação de leitura / gravação : Parquet é um formato de arquivo baseado em coluna. Suporta indexação. Por isso, ele é adequado para consultas de dados de baixa latência, consultas complexas ou analíticas com gravação única e leitura intensiva. Isso geralmente é usado por usuários finais / cientistas de dados.
Enquanto isso, Avro, sendo um formato de arquivo baseado em linha, é melhor usado para operação de gravação intensiva. Isso geralmente é usado por engenheiros de dados. Ambos suportam formatos de serialização e compactação, embora o façam de maneiras diferentes.
Ferramentas : Parquet é um bom ajuste para Impala. (Impala é um mecanismo de consulta RDBM SQL de processamento paralelo maciço (MPP) que sabe como operar em dados que residem em um ou alguns mecanismos de armazenamento externo.) Mais uma vez, o Parquet se presta bem a consultas complexas / interativas e rápido (baixa latência ) emite dados em HDFS. Isso é suportado pelo CDH (Cloudera Distribution Hadoop). O Hadoop suporta os formatos Optimized Row Columnar (ORC) do Apache (as seleções dependem da distribuição do Hadoop), enquanto o Avro é mais adequado para o processamento do Spark.
Evolução do esquema : a evolução de um esquema de banco de dados significa mudar a estrutura do banco de dados, portanto seus dados e, portanto, seu processamento de consultas.
Tanto Parquet quanto Avro oferecem suporte à evolução do esquema, mas em graus variáveis.
Parquet é bom para operações de 'anexação', por exemplo, adicionar colunas, mas não para renomear colunas, a menos que 'ler' seja feito pelo índice.
Avro é mais adequado para anexar, excluir e transformar colunas em geral do que Parquet. Historicamente, Avro forneceu um conjunto mais rico de possibilidades de evolução de esquema do que Parquet e, embora suas capacidades de evolução de esquema tendam a se confundir, Avro ainda brilha nessa área, quando comparado ao Parquet.
fonte
Seu entendimento está certo. Na verdade, passamos por uma situação semelhante durante a migração de dados em nosso DWH. Escolhemos Parquet em vez de Avro porque a economia de disco que obtivemos foi quase o dobro do que obtivemos com AVro. Além disso, o tempo de processamento da consulta foi muito melhor do que Avro. Mas sim, nossas consultas foram baseadas em agregação, operações baseadas em colunas, etc., portanto, Parquet foi previsivelmente um vencedor claro.
Estamos usando o Hive 0.12 da distro CDH. Você mencionou que está tendo problemas com o Hive + Parquet, quais são? Não encontramos nenhum.
fonte
Silver Blaze colocou uma descrição bem com um caso de uso de exemplo e descreveu como Parquet foi a melhor escolha para ele. Faz sentido considerar um sobre o outro, dependendo de seus requisitos. Estou colocando uma breve descrição de diferentes outros formatos de arquivo, juntamente com a comparação da complexidade do espaço de tempo. Espero que ajude.
Existem vários formatos de arquivo que você pode usar no Hive. As menções notáveis são AVRO, Parquet. RCFile e ORC. Existem alguns bons documentos disponíveis online que você pode consultar se quiser comparar o desempenho e a utilização do espaço desses formatos de arquivo. Segue alguns links úteis que o ajudarão.
Esta postagem do blog
Este link do MapR [Eles não discutem Parquet, no entanto]
Este link da Inquidia
Os links fornecidos acima irão ajudá-lo. Espero que isso responda a sua consulta.
Obrigado!
fonte
Apenas para obter uma descrição do Parquet, você pode consultar aqui: http://bigdata.devcodenote.com/2015/04/parquet-file-format.html
Pretendo escrever muito em breve no Avro e uma comparação entre os 2 também. Vou postar aqui quando terminar.
fonte