バージョンアップ情報
Presto情報
Prestoとは
Prestoは、ペタバイトクラスまでのあらゆるサイズのデータソースに対して、インタラクティブ(対話的)な分析クエリを実行するためのオープンソースの高性能分散型SQLクエリエンジンです。
Prestoは元々、Facebookが自社の大規模なデータセットに対して、インタラクティブに結果を返すことを目的に2012年に開発され、2013年にオープンソースとなったものです。例えばFacebookではPrestoを利用して、300PBのデータウェアハウスを含む複数のデータストアに対して1000人を超えるスタッフが毎日3万件を超えるクエリを実行し、1日当たり合計1PBをスキャンしています。
これを可能にするためにPrestoでは、クエリを実行する際に、ジョブをタスクに分割し、そのタスクが並列で動くような計算モデルが採用されています。また、中間データをメモリ上に持つことでタスク間のデータのやり取りを高速化し、素早いレスポンスを得ることが可能となっています。
またPrestoは複数データソース(HBase, Cassandra, MySQL, etc...)に対して一度に集計を実行することができる機能を持っています。これにより、クエリ毎に毎回データソースを切り替える必要がなくなり、一つのクエリで複数のデータソースからデータを参照することが可能となっています。
このようにメモリ上で中間データをやり取りするため、高速で実行できる反面、JOIN結果が数十~数百万行となるようなクエリで文字列型のキーを使うなど、メモリを著しく逼迫させると処理が失敗する可能性もあることになります。
そのためPrestoは主に「一秒~数分程度で終わる集計」や「コンパクトな処理を素早く実行したい場合」などに利用されるアーキテクチャとなります。
なお、Prestoは、2019年1月に、Presto Foundationが管理するPrestoDBと、Presto Software Foundation(現Trino Software Foundation)が管理するPrestoSQLに分岐しています。PrestoSQLは、2020年12月に商標の問題からTrinoと名称変更されています。
主な特徴
大規模向け高速分析用データベース |
Prestoはデータウェアハウス、または分析用に設計および最適化されているデータベースです。1秒から数分の応答時間を期待するアナリストを対象としています。 |
---|---|
分散システム |
Prestoは、1つのCoordinatorと複数のWorkerを持っています。クエリは Presto CLI のようなクライアントから送信され、Coordinatorがクエリのパース、アナライズ、クエリ実行計画を行い、Workerへ分配します。 またPrestoは、Connectorプラグインで、複数のデータソースにアクセスしてクエリを実行するこが可能です。 |
低学習コスト |
PrestoはANSI標準SQLに従って作られているため、書籍やWeb上の情報が多く、低い学習コストで運用することが可能です。 |
類似プロダクト
Prestoと類似する機能を提供している分散型SQLクエリエンジンとしては、HiveやImpala、Apache Drillなどがあります。また、Prestoの流れをくむ製品であるTrinoは、元々Prestoを開発していた主要メンバーが参加しているため、こちらが主流になる可能性もあります。
ユースケース
PrestoはFacebookをはじめとして、AirbnbやDropboxなど多くの大手インターネット企業で採用されています。
動作環境
Prestoはオンプレミスやクラウド環境などの様々なプラットフォーム上でインストールすることができます。
Prestoのライセンス
Prestoのライセンスは、 「Apacheライセンスバージョン2」(Apache License version2)というライセンスに基づいて公開され、営利、非営利を問わず、 誰でも自由かつ無償で利用・改変・再配布できるようになっています
参考情報
オープンソース年間サポートサービス
OpenStandiaではOSSを安心してご利用いただけるように、オープンソース年間サポートサービスをご提供しております。
サポートしているOSSは下記ページをご参照ください。
関連OSS
-
サポート対象
Apache Spark
アパッチ スパーク。Hadoopの後発として期待されるビッグデータ処理基盤です。
-
サポート対象
Apache Kafka
アパッチ カフカ。分散ストリーミングプラットフォームです。
-
サポート対象
Apache Hadoop
アパッチ ハドゥープ。Java言語で実装された大規模データの蓄積、分析を分散して処理するフレームワークです。