Facebook は、SQL のスケーラビリティの水準を引き上げる可能性を秘め、ペタバイト規模のデータ ウェアハウスで動作するように開発された Presto という SQL クエリ エンジンをオープン ソースとしてリリースしました。
Facebookのソフトウェアエンジニア、マーティン・トラヴェルソ氏の投稿によると、現在、1,000人以上のFacebook従業員がPrestoを毎日使用し、3万件のインタラクティブクエリを実行しており、処理量は1ペタバイトを超えています。同社はPrestoを1,000ノードのクラスタで実行できるように拡張しました。
Facebookは現在、他のデータドリブン組織にPrestoを利用してもらい、改良を進めたいと考えています。同社はソフトウェアのソースコードを公開し、他者からの貢献を奨励しています。このソフトウェアは既に、AirBnBやDropboxといった大手インターネットサービスでテストされています。
FacebookでのPrestoの経歴
Facebookのエンジニアによると、Facebookが収集するデータ量を考えると、標準的なデータウェアハウスではPrestoのような応答性を提供するのは困難だという。Facebookのデータウェアハウスには、ユーザーから提供された300ペタバイト以上のデータがHadoopクラスタに保存されている。Prestoは、インタラクティブな分析に加え、機械学習アルゴリズムと標準的なバッチ処理を通じてこれらのデータとやり取りする。
Facebookは当初、このデータを分析するためにHiveとHadoop MapReduceを使用していました。しかし、データウェアハウスが拡大するにつれて、このアプローチでは速度が遅すぎることが判明しました。
Facebookデータインフラストラクチャグループは当初、より高速なクエリを実行するための他のソフトウェアを探しましたが、十分に成熟しており、必要なレベルまで拡張可能なものは見つかりませんでした。そこで、グループはJavaを使用して独自の分散SQLクエリエンジンを構築しました。

Prestoは、複雑なクエリ、集計、左/右外部結合、サブクエリ、そして一般的な集計関数とスカラー関数のほとんどなど、標準SQLエンジンが実行できる多くのタスクを実行できます。ただし、結果をデータテーブルに書き戻す機能はなく、一定サイズを超えるテーブル結合を作成することはできません。
Hiveとは異なり、Prestoは結果をディスクに書き戻すMapReduceを使用しません。代わりに、Prestoはクエリの一部をオンザフライでコンパイルし、すべての処理をメモリ内で行います。その結果、FacebookはPrestoはCPU効率とレイテンシの点でHiveとMapReduceの組み合わせよりも10倍優れていると主張しています。
Prestoは、大規模なHadoopデータセットに対するクエリ実行時に高速な結果を提供するという課題に取り組む、新興のSQLクエリエンジンの一つです。HadoopディストリビューターのPivotalは、この目的のためにHawqを開発しており、同じくHadoopディストリビューターのClouderaはImpalaという独自のソフトウェアを開発中です。
FacebookがPrestoに組み込んだもう一つの利点は、Hadoop以外のデータソースを扱えることです。例えば、Facebookはニュースフィード用のカスタムデータストアを運用しており、Prestoもこれにアクセスできます。FacebookはHBaseとScribe用のコネクタも構築しています。トラヴェルソ氏によると、Prestoは他のソースにも拡張可能です。