Pressギガバイトからペタバイト(100万ギガバイト)まであらゆるサイズのデータをインタラクティブに解析して必要なデータを発見可能となるオープンソースのSQL対応分散クエリエンジンがPrestoです。Facebookのような企業が持つ大量の商業データでも高速に処理可能となるように設計されており、Prestoの出すクエリ(データベース管理システムに対する処理要求を文字列として表したもの)は複数ソースのデータと組み合わせることも可能。このシステムを開発したFacebookでは、約300ペタバイトにも及ぶ企業内部のデータを保管するデータ・ウェアハウスにてPrestoを使用しており、毎日1000人を超えるFacebookの従業員たちが1日当たり3万以上のクエリを走らせ、1ペタバイト以上のデータがスキャンされている、とのことです。Facebookhttps://www.facebook.com/notes/facebook-engineering/presto-interacting-with-petabytes-of-data-at-facebook/10151786197628920◆FacebookがPrestoを開発するに至った経緯Facebookは大量のデータを扱う企業です。アクティブユーザーが10億人以上も存在する、このモンスターソーシャルネットワークサービスにおいて、データの処理と解析は事業の中枢部分を担っています。Facebookのデータ・ウェアハウスは世界最大級ものの1つであり、そこでは300ペタバイト以上のデータを保管しており、そこに保存されるデータたちは従来のバッチ処理からグラフ解析、機械学習およびリアルタイムのインタラクティブ解析など、広範囲のアプリケーションに使われている、とのこと。データを処理し、洞察してFacebookのサービス改善に貢献してくれるアナリストやデータサイエンティスト、エンジニアなどにとって、このデータ・ウェアハウスのパフォーマンスの詳細は重要な情報であり、より多くのクエリを実行できたり結果をより速く導き出せるようになれば、彼らの生産性も改善されることになります。MapReduce(データの分散処理技術)と、Hive(Hadoopの上に構築されるデータ・ウェアハウス構築環境で、データの集約・問い合わせ・分析を行う)に最適化されていました。Facebookのデータ・ウェアハウスはペタバイト規模の非常にスケールの大きなものであり、データも徐々に増えている状況だったそうです。そこで、ペタバイト規模でも素早く動作可能な新しいインタラクティブ・クエリシステムのPrestoを構築することを決めた、とのこと。SQLをサポートしています。Prestoのシステム・アーキテクチャーを簡単に表したのが以下の図で、クライアントがPrestoのコーディネーター(調整者)にSQL(データの操作や定義を行うための問い合わせ言語)を送ります。コーディネーターは分解・分析を行い、クエリの実行計画を立て、実行パイプラインを引き、データに近いノードに仕事を割り当て、データ処理の進捗をモニター。クライアントは出力段階からの各段階でもデータをプルすることが可能です。PrestoのクエリエンジンはMapReduceを使用せず、カスタムクエリとセマンティック検索の実行エンジンをサポート。クエリの実行スケジューリングが改善されており、それに加えて全てのデータ処理はメモリとネットワーク内のパイプライン上で行われ、不必要な入出力なども回避します。PrestoのシステムはJavaで実行されるのですが、これは開発が素早く行え、大きなエコシステムを持ち、Facebookの他データ・インフラストラクチャー・コンポーネントに統合するのが容易になるためです。メモリとデータ構造を慎重に扱うことでJavaコードでよく起こる、メモリ割り当てとガベージコレクションの問題を回避しています。拡張性はPrestoの重要な要素の1つ。大きなデータセット(処理されるデータのまとまり)がHDFSに加えて他の多くのシステム内に保管されている、ということをプロジェクトの初期段階でFacebookのエンジニアたちは発見したそうです。Facebookのデータ・ウェアハウスのデータ保管場所は、HBaseのような有名なデータベースもあればカスタムメイドのものにも保存されていました。いった経緯からPrestoはシンプルかつ異なるデータソースに対しても簡単にSQLクエリを提供できるように設計されたようです。Prestoの開発は2012年秋からスタートし、2013年の初め頃に最初の運用をスタート、2013年の春にはFacebookのデータ・ウェアハウス全体で運用されるようになりました。CPU効率や処理スピードという点でみれば、PrestoはHive/MapReduceを運用するよりも10倍もよい結果を出す、とのこと。SQLの部分集合的のようなもので、表結合・表の外部結合・サブクエリ・共通抽出・スカラ関数・近似値検索などが利用可能ですが、結合テーブルのサイズや基数に制限があります。クエリ結果はクライアントに流されますが、各テーブルにデータを出力することは現在のところ不可能となっています。Prestoはオープンソースのクエリエンジンであり、GitHubにてソースコードを見ることができます。海上保安庁1(ミラー)富士急ハイランド新絶叫マシーン「高飛車」に乗ってみたネタのタレコミその他のお問い合わせ広告掲載についてGIGAZINEについて。