BT

Presto: O Sistema para consultas SQL distribuídas do Facebook

por Jonathan Allen , traduzido por Diogo Carleto em 10 Jan 2014 |

No final de 2012, o Facebook deu início ao projeto que se tornou o Presto. O objetivo desse projeto era criar uma maneira de realizar análises ad-hoc em centenas de petabytes de dados. Depois de rejeitar alguns projetos externos, o Facebook decidiu criar o seu próprio mecanismo de consulta distribuído.

A interface do Presto é baseada no modelo SQL ANSI. A maioria dos sistemas de consultas distribuídas requerem que o usuário aprenda uma nova sintaxe. Às vezes, a sintaxe é semelhante ao SQL, mas nenhum é tão conhecido e documentado quanto o próprio SQL. A expectativa do Facebook é que essa decisão torne o aprendizado de novos usuários mais fácil e rápido. O fato de se basear no SQL ANSI também deve permitir que o Presto funcione com ferramentas existentes de terceiros.

Internamente, o Presto é baseado em pipelines. Após a consulta ser analisada e as tarefas atribuídas aos nós apropriados, o "cliente recebe os dados do estágio de saída que, por sua vez, recebe de etapas subjacentes." Segundo Martin Traverso:

O modelo de execução do Presto é fundamentalmente diferente do Hive/MapReduce. O Hive traduz as consultas em vários estágios de tarefas MapReduce que executam uma após a outra. Cada tarefa lê a entrada do disco e escreve imediatamente a saída de volta para o disco. Por sua vez, o mecanismo do Presto não usa o MapReduce. Ele emprega consultas customizadas e um mecanismo de execução com operadores destinados a suportar semânticas SQL. Além da otimização no agendamento, todo o processamento é feito em memória e trafegado através da rede entre os estágios. Isso evita operações desnecessárias de I/O e, consequentemente, a latência associada a essas operações. O modelo de execução em pipeline executa vários estágios de uma vez, e direciona os dados de um estágio anterior para o próximo conforme forem se tornando disponíveis. Esse processo reduz significativamente a latência final para vários tipos de consultas.

O Presto foi escrito em Java com um backend plugável. Para cada fonte de dados, como o Hive, HBase ou Scribe, um conector específico é necessário. O conector fornece metadados ao Presto, informação na qual cada nó contém os dados e uma maneira para buscar os dados como uma stream.

De acordo com Martin, o Presto está superando o Hive/MapReduce por um fator de 10 quando se trata de latência e eficiência de CPU para a maioria das consultas no Facebook. Mas eles ainda não terminaram e têm planos para melhorar ainda mais o desempenho. Um desses planos envolve a concepção de um novo formato de dados que reduz a quantidade de transformações necessárias conforme os dados se movem de um estágio para outro.

O Facebook também está trabalhando para remover algumas das limitações do desenho atual.

As principais restrições do estágio atual são relacionadas à limitação de tamanho ao fazer joins com tabelas e cardinalidade de chaves/grupos únicos. O sistema também não tem a capacidade de gravar dados de saída de volta para as tabelas (atualmente, os resultados das consultas são transferidos para o cliente).

O Presto está disponível no GitHub sob a licença Apache 2.

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

Dê sua opinião

Conteúdo educacional

Feedback geral
Bugs
Publicidade
Editorial
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2014 C4Media Inc.
Política de privacidade
BT