O Apache Parquet, formato de armazenamento em colunas de código aberto para Hadoop, recentemente passou de um Apache Software Foundation Incubator para um projeto top-level. Inicialmente, criado pela Cloudera e pelo Twitter em 2012 para acelerar o processamento analítico, o Parquet está agora aberto e disponível para o Apache Spark, Apache Hive, Apache Pig, Impala, MapReduce nativo e outros componentes chaves do ecossistema Hadoop. O Parquet é particularmente utilizado por Cloudera, Twitter, Netflix, Stripe, Criteo e AppNexus.
A idéia por trás do Parquet - e o armazenamento em colunas em geral - é simples e não é novo: armazenar dados por colunas para otimizar o desempenho de consultas analíticas e diminuir o custo de armazenamento. As primeiras menções sobre os arquivos transpostos podem ser encontradas na década de 70 e as soluções comerciais iniciaram a partir dos anos 2000 com o crescimento do big data analytics. O Parquet é, nesse sentido, comparado com ORC (Optimized Row Columnar) e RCFile (Record Columnar File), as duas outras iniciativas de código aberto que tem o intuito de trazer o armazenamento em colunas para o ecossistema Hadoop.
Sobretudo, o armazenamento em colunas permite que os mecanismos de consultas leiam apenas as colunas utilizadas na consulta (projeção push-down). Por exemplo, se os dicionários da coluna codificada não contenham o valor desejado, todo o pedaço pode ser descartado sem precisar ser lido. Uma vantagem adicional é a capacidade de processar grandes blocos de dados e técnicas que ampliam a vetorização para otimizar o pipeline da CPU, como apresentado por Boncz et al em sua apresentação no MonetDB/X100. Finalmente, uma vez que cada coluna contém os mesmos tipos de dados, eles podem agora utilizar códigos adaptados e compressão de esquemas para maximizar a taxa de compressão, reduzindo assim o espaço em disco.
Além da eficiência na consulta e de espaço, o Parquet é também desenhado para prover um alto nível de interoperabilidade. Primeiramente, o próprio formato dos arquivos é independente de linguagem. É definido pela Apache Thrift IDL e pode, portanto, ser serializado ou desserializado por múltiplas linguagens de programação como C++, Java e Python. Além disso, a estrutura interna de dados do Parquet e os algorítimos são independentes de modelo. Eles são destinados a serem utilizados por conversores externos como o parquet-hive, parquet-pig e parquet-avro para aumentar o nível de abstração e facilitar o esforço de integração.
É também importante notar que o Parquet é construído a partir do zero para apoiar a estrutura complexa de dados aninhados e usa a abordagem no nível de repetição e definição descrito no trabalho de pesquisa do Google Dremel.
Três anos depois de sua criação, o Parquet ganhou um papel significante no ecossistema do Hadoop.
Na Netflix, o Parquet é o formato de armazenamento primário para o data warehousing. Mais de 7 petabytes dos nossos 10+ petabytes de armazenamento são no formato de dados Parquet dos quais consultamos com as mais diversas ferramentas incluindo Apache Hive, Apache Pig, Apache Spark, PigPen, Presto e MapReduce nativo. O benefício de desempenho da projeção em colunas e das estatísticas é um divisor de águas para nossa plataforma de Big Data.
- Daniel Weeks, líder técnico da equipe da Plataforma de Big Data da Netflix.
De acordo com o post do blog oficial, a comunidade está atualmente trabalhando em melhorias significativas para versões futuras, como:
- Integração com a nova API do HDFS zero-copy para aumentar a velocidade de leitura;
- Adição de estatística para acelerar filtragem salva;
- Adição de uma API de leitura vetorizada para redução no tempo de processamento;
- Adição de suporte ao POJO para gerar esquemas Parquet em classes existentes em Java.
Doando o Parquet para a Fundação Apache Software, as intenções do Twitter e Cloudera eram atrair desenvolvedores externos e ajudar o Parquet a se tornar uma comunidade dirigida por padrão. Um ano depois, o Parquet já tem mais de 50 contribuidores, entre os quais 18 com mais de 1000 linhas de código. A comunidade mantém regularmente contatos pelo Google Hangout e convidam a todos a se juntar. Encontros são publicados na lista de email da Apache.