Presto または Presto DB とは?
Presto (または PrestoDB) は、オープンソースの分散型 SQL クエリエンジンで、どのようなサイズのデータにも高速な分析クエリを実行できるようゼロから設計されました。Hadoop 分散ファイルシステム (HDFS)、Amazon S3、Cassandra、MongoDB、HBase などの非リレーショナルソースと、MySQL、PostgreSQL、Amazon Redshift、Microsoft SQL Server、Teradata などのリレーショナルデータソースの両方をサポートしています。
Presto は、データを別の分析システムに移動することなく、保存されているデータをクエリできます。クエリの実行は、純粋なメモリベースのアーキテクチャ上で並行して実行され、ほとんどの結果は数秒で返されます。Facebook、Airbnb、Netflix、Atlassian、Nasdaq など、多くの有名企業で使用されています。
Presto の歴史は?
Presto は、大規模な Hadoop/HDFS ベースのクラスターで構築された 300 PB のデータウェアハウスに対してインタラクティブな分析クエリを実行するために、Facebook のプロジェクトとしてスタートしました。Presto を構築する前、Facebook は 2008 年に作成して公開した Apache Hive を使用して、SQL 構文の親しみやすさが Hadoop エコシステムにもたらされました。Hive は Hadoop エコシステムに大きな影響を与えました。複雑な Java MapReduce ジョブを SQL ライクなクエリに簡略化すると同時に、ジョブを大規模に実行できるようになりました。ただし、インタラクティブクエリに必要な高速パフォーマンスには最適化されていませんでした。
2012 年、Facebook データインフラストラクチャグループは、ペタバイト規模で迅速に運用できるインタラクティブなクエリシステムである Presto を構築しました。2013 年春に全社的に導入されました。2013 年 11 月、Facebook は Presto を Apache ソフトウェアライセンスの下でオープンソース化し、誰でも Github からダウンロードできるようにしました。現在、Presto は Hadoop でインタラクティブなクエリを行うための選択肢として人気があり、Facebook や他の組織から多くの貢献を受けています 。Facebook の Presto の実装は、1000 人以上の従業員によって使用されており、毎日 3 万件以上のクエリを実行し、1 ペタバイトのデータを処理しています。
Presto はどのように機能しますか?
Presto は Hadoop 上で稼働する分散システムで、従来の超並列処理 (MPP) データベース管理システムと同様のアーキテクチャを採用しています。1 つのコーディネーターノードが複数のワーカーノードと同期して動作します。ユーザーは SQL クエリをコーディネーターに送信します。コーディネーターは、カスタムクエリと実行エンジンを使用して、ワーカーノード全体に分散されたクエリプランを解析、計画、およびスケジュールします。複雑なクエリ、集計、結合、左右の外部結合、サブクエリ、ウィンドウ関数、個別カウント、おおよそのパーセンタイルなど、標準の ANSI SQL セマンティクスをサポートするように設計されています。
クエリがコンパイルされると、Presto はリクエストをワーカーノード全体で複数のステージに分けて処理します。すべての処理はメモリ内で行われ、ステージ間でネットワーク上でパイプライン化されるため、不要な I/O オーバーヘッドを回避できます。ワーカーノードを追加すると、より多くの並列処理が可能になり、処理が速くなります。
Presto をあらゆるデータソースに拡張できるように、ストレージを抽象化してプラグイン可能なコネクタを簡単に構築できるように設計されています。そのため、Presto には、Hadoop 分散ファイルシステム (HDFS)、Amazon S3、Cassandra、MongoDB、HBase などの非リレーショナルソースと、MySQL、PostgreSQL、Amazon Redshift、Microsoft SQL Server、Teradata などのリレーショナルデータソースを含む多数のコネクタがあります。データは、別の分析システムに移動することなく、保存されている場所でクエリされます。
Presto と Hadoop にはどのような違いがありますか?
Presto はオープンソースの分散型 SQL クエリエンジンで、HDFS などのデータに対して高速でインタラクティブなクエリを実行できるように設計されています。Hadoop/HDFS とは異なり、独自のストレージシステムはありません。このように、Presto は Hadoop を補完するものであり、組織はより広範なビジネス上の課題を解決するために両方を採用しています。Presto は Hadoop のどの実装にもインストールでき、Amazon EMR Hadoop ディストリビューションにパッケージされています。
Presto のユーザーは誰ですか?
Presto は、多くの著名な組織で非常に大規模な本番環境で使用されています。Facebook、Airbnb、Netflix、Atlassian、Nasdaq などで使用されています。Facebook の Presto の実装は、1000 人以上の従業員によって使用されており、毎日 3 万件以上のクエリを実行し、1 ペタバイトのデータを処理しています。Netflix は、Presto クラスターで平均して 1 日あたり約 3,500 件のクエリを実行しています。Airbnb は、Presto 上で動作するウェブベースのクエリ実行ツールである Airpal を構築し 、オープンソース化しています。このフォーラムと Facebook の Presto ページには、より幅広い Presto コミュニティがあります。
Presto をクラウドにデプロイするにはどうすればいいですか?
Presto はクラウド内の理想的なワークロードです。クラウドには、パフォーマンス、スケーラビリティ、信頼性、可用性、および圧倒的なスケールメリットがあるためです。Presto クラスターは数分で起動できます。ノードのプロビジョニング、クラスターのセットアップ、Presto の設定、クラスターのチューニングなど、わずらわしい作業は不要です。
AWS はどのようにして Presto の実装をクラウドに構築できるでしょうか?
Amazon EMR と Amazon Athena は、Presto をクラウドにデプロイするのに最適な場所です。これは、Presto の統合と厳密なテストを、AWS のスケール、シンプルさ、費用対効果をもって行うことができるためです。Amazon EMR なら、Presto クラスターを数分で起動でき、ノードのプロビジョニング、クラスターのセットアップ、Presto の設定、クラスターのチューニングはいずれも不要です。EMR により、単体から数百あるいは数千におよぶコンピューティングインスタンスを、数分の内にプロビジョニングできるようになります。Amazon Athena では、AWS サーバーレスプラットフォームを使用して Presto をデプロイできます。サーバー、仮想マシン、クラスターのセットアップ、管理、チューニングは必要ありません。Amazon S3 にあるデータを参照してスキーマを定義し、組み込みのクエリエディタまたは既存のビジネスインテリジェンス (BI) ツールを使用してクエリを開始するだけです。Athena はクエリを自動的に並列化し、クエリを迅速に実行できるようにリソースを動的にスケーリングします。料金は実行したクエリの分のみ発生します。