DataBricks, a companhia por trás do Apache Spark, anunciou o acréscimo de uma nova ferramenta no universo do Spark, o Spark SQL. O Spark SQL é independente do Shark e não utiliza o Hive como base.
Com o advento do Hadoop, a construção de um data warehouse para o processamento de enormes volumes de dados tornou-se cada vez mais fácil. Entretanto, a execução de consultas no Hadoop ainda requer o desenvolvimento de programas MapReduce, que serão executados como tarefas, o que requer um desenvolvimento especializado e não trivial. O Hive resolve este problema através de uma engine SQL que faz a tradução de uma consulta SQL para tarefas MapReduce.
O Spark fornece uma engine SQL chamado Shark. O Shark transfere para o Hive a definição de um plano de execução para a consulta, mas usa o Spark em vez do Hadoop durante a fase física de execução. Com o Spark SQL, a DataBricks está investindo em uma alternativa engine SQL separando-se do Hive.
A InfoQ americana, entrevistou Michael Armbrust e Reynold Xin, engenheiros de software da DataBricks, com o objetivo de obter mais informações sobre o Spark SQL.
InfoQ.com: Quando foi iniciado desenvolvimento do Spark SQL?
Armbrust e Xin: Iniciou quando o Michael retornou a Databricks em novembro e liderou todo o desenvolvimento.
InfoQ.com: O que motivou troca do Hive e do Shark por uma implementação nativa do Spark SQL?
Armbrust e Xin: Estamos trocando o engine de execução atual do Shark que é dependente do Hive, por um novo engine chamado Spark SQL. A principal razão para esta mudança tem como objetivo o de melhorar a manutenibilidade do código base, possibilitando assim um rápido desenvolvimento para nossos usuários que poderão se beneficiar das otimizações de desempenho e um melhor conjunto de recursos.
Juntos com a equipe foi escrito cinco ou seis mecanismos de consultas, incluindo consultas para as bases de dados mais importantes atualmente. Esta é a nossa tentativa de "fazer a coisa certa".
O otimizador atual do Hive possui internamente complexas construções endereçadas para resolver as limitações do MapReduce, e muitas destas construções, não se aplicam ao contexto do Spark. Ao projetar nosso próprio otimizador de consulta e uma estrutura de execução, simplificamos substancialmente o design. O Spark SQL apresenta uma abstração clara para a construção de otimizadores de consulta e mecanismos de consulta distribuídos, permitindo uma rápida melhora com o desempenho do engine.
InfoQ.com: Conte-nos mais sobre o Catalyst. É este engine de execução SQL por trás do Spark SQL?
Armbrust e Xin: O Catalyst é na realidade uma implementação independente e não exclusiva de um pacote de optimizações e não um engine de execução. Ele foi desenvolvido como uma parte do Spark SQL, mas consideramos no futuro utilizar outros engines de consultas. O Spark SQL é um completo engine de execução que aproveita o Catalyst.
A construção de um otimizador de consulta, não é uma tarefa fácil. O Calatyst incorpora anos de avançadas pesquisas para a construção de poderosos e simples optimizadores de consultas, tornando tarefas difíceis de serem desenvolvidas em algo fácil. Regras de optimização que em outros sistemas seriam desenvolvidos com milhares de linhas, no Catalyst desenvolvemos com dezenas de linhas. A utilização de regras simples e combináveis tornam mais fácil a racionalização das informações tornando os sistemas mais assertivos. Esta simplicidade também faz com que as manutenções e principalmente as melhorias se tornem fáceis de se fazer.
InfoQ.com: Pode-se criar nativamente no Spark SQL um Spark RDDs. Isso se tornará um dos principais métodos para a criação entradas RDD?
Michael and Reynold: O Spark SQL permite muitas novas maneiras para os desenvolvedores interagirem com seus dados. Em primeiro lugar, ele permite a aplicação de esquemas em seus RDDs existentes. Isso adiciona informações de esquemas e torna possível a execução de consultas SQL sobre RDDs, e completando isso o Spark possui um poderoso repertório de transformações.
Estas funcionalidades são somente uma parte da história. O Spark SQL também permite aos desenvolvedores operações de leitura e escrita de dados em fontes já existentes (Hive e Parquet de agora em diante, Avro, HBase, Cassandra, e outros no futuro próximo).