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.

Avalie esse artigo

Relevância
Estilo/Redação

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
Feedback geral
Bugs
Publicidade
Editorial
Marketing
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2016 C4Media Inc.
Política de privacidade
BT

We notice you’re using an ad blocker

We understand why you use ad blockers. However to keep InfoQ free we need your support. InfoQ will not provide your data to third parties without individual opt-in consent. We only work with advertisers relevant to our readers. Please consider whitelisting us.