ビッグデータ プラットフォーム比較 : 精彩放つ BigQuery と Dataproc
2016年5月31日火曜日
* この投稿は米国時間 5 月 17 日、Google Cloud Platform の Developer Advocate である Felipe Hoffa によって投稿されたもの(投稿はこちら)の抄訳です。
私は、Mark Litwintschik 氏が執筆しているブログ ポスト シリーズの大ファンです。彼は、NYC TLC がオープン データとして公開している 10 億回のタクシー運行記録を使用して、周りにあるすべてのビッグデータ プラットフォームで計測を行っています。
ネタバレ注意 : この計測で Google BigQuery と Google Cloud Dataproc が優れた結果を残しているのは喜ばしいことです。それを詳しく紹介する前に、Mark が明らかにした結果をわかりやすく視覚化すると、次のようになります。
Mark が早い段階で明らかにしたことを振り返ってみましょう。
すべての結果は、ごく普通の感じに見えます。しかし、その後(2016 年 4 月 6 日)、Mark は BigQuery を試してみようと思いたちます。
えっ、その理由は?
上述のとおり、他よりもずっと高速で単純なプラットフォームが見つかったので、Mark の探究はここで終わってもよかったのですが、彼にはもっと大きな目標がありました。彼はあらゆるプラットフォームのあらゆる可能な構成を試したいと思っていたのです。その後に起きたことをまとめてみましょう。
間違いありません。Mark の最初の Dataproc でのテストは、同等の構成の AWS EMR よりもクエリが遅かったのです。
しかし、話はここで終わりません。私が Mark のブログ ポスト シリーズを気に入った理由の 1 つは、業界のビッグデータ プレーヤーたちが彼のツイートに引き付けられている点です。
今までに私がツイートで見かけた人物は、AWS の EMR 責任者 Rahul Pathak 氏、AWS のヘッド エバンジェリスト Jeff Barr 氏、Elasticsearch のエンジニア Zachary Tong 氏など、そうそうたる顔ぶれです。
私たちはエンジニアであり、それゆえベンチマークを見つけると、数字を上げようとしてそれに飛びつくのです。Google からも、ビッグデータのテック リーダーで OSS ソフトウェア エンジニアの Dennis Huo が参戦しました。レースはますます面白くなっているのです。
このように、クエリが 10 秒以下まで短縮されたのです。他の構成やサービスでこれに匹敵するパフォーマンスは、今のところ見たことがありません。
Mark は何度も試行錯誤を繰り返した結果、BigQuery のちょうど半分のスピードでこれらのクエリを Presto 上で実行するのに最適な構成を見つけました。今のところ、Google Cloud 上の Presto だけではありますが。
先ほども触れたように、このレースで最も興味がそそられるのは、どれだけのプレーヤーとプラットフォームが、BigQuery に匹敵するスピードをたたき出す最良の構成を見つけ出し、名乗りを上げるかということです。
結果をまとめると、「Presto 構成レース」を制したのは、4 秒のクエリを記録した Google Cloud Dataproc です。将来は、さらに処理効率を高めた構成が現れることでしょう。
とはいえ、Mark のテスト結果を見れば、価格からも性能からもベスト チョイスが BigQuery だということは明らかであり、Presto を使いたいなら Google Cloud Platform が実行場所として最良です。
この種の競争は実にすばらしいものです。もっと速く、もっと費用対効果の高い結果を示すために皆が競争すると、誰もが勝者になります。もちろん、最も得をするのは皆さんなのですが。
私は、Mark Litwintschik 氏が執筆しているブログ ポスト シリーズの大ファンです。彼は、NYC TLC がオープン データとして公開している 10 億回のタクシー運行記録を使用して、周りにあるすべてのビッグデータ プラットフォームで計測を行っています。
ネタバレ注意 : この計測で Google BigQuery と Google Cloud Dataproc が優れた結果を残しているのは喜ばしいことです。それを詳しく紹介する前に、Mark が明らかにした結果をわかりやすく視覚化すると、次のようになります。
Mark が早い段階で明らかにしたことを振り返ってみましょう。
PostgreSQL
- (COUNT+GROUP BY) という単純なクエリに対する最初の結果 : 1 時間超
- カラムナ ストレージ エクステンションを使った同じクエリ : 2 分超
- COUNT+AVG クエリ : 3 分以下
Elasticsearch
- 最初の試行ではすべてのデータをロードできなかった( “1,711 GB のインデックス データを格納し、ハイ ウォーターマークに引っかからないだけのスペースを確保できるほど大きい 1 台の 2 TB SSD ドライブは存在しない” )
- データを読み込んでインデックスを作るのに、“70 時間よりもほんのちょっと短い時間” がかかる
- COUNT+GROUP BY クエリ : 18 秒以下
- COUNT+AVG クエリ : 8 秒以下
- 1 か月後、Mark は Elasticsearch にデータセットを全部ロードする方法を見つけたものの、結果はより遅くなった
AWS EMR 上の Spark
- Amazon EMR “クラスタ(上の Spark)は、プロビジョニングとすべてのノードのブートストラップまで 20~30 分かかることがある”(それに対して Dataproc クラスタの場合は 90 秒以内に準備完了)
- Parquet へのデータの移動に “約 2 時間かかる” 場合あり
- クエリは AWS 上の Presto よりも 4 倍から 40 倍遅い
AWS EMR 上の Presto(5 ノード)
- AWS EMR 上でクラスタを起動するのに 20 分以上が必要(なぜ 90 秒ではないのか)
- データのロードは “完了まで 3 時間 45 分かかった”
- COUNT(*)、AVG() クエリに最長 70 秒
ローカル マシンでの Hive と Presto の比較
- クエリは 2 分から 5 分。Presto は Hive よりも最高で 4 倍高速
無料使用枠内での AWS Redshift
- 計測されたスピードでのロード : “データセット全体では約 6~8 時間でロードされるはず”
- 無料使用枠を維持すると、データの 20 % しかロードされない。“200 M のレコードのロードには 1 時間 4 分 25 秒かかった”
- この投稿ではクエリのベンチマークには言及していないが、Redshift のスピードを保つために VACUUM、ANALYZE コマンドを実行し続けることの重要性について言及(これらはデータベースの速度を下げ、ユーザーはデータベースを使えなくなるにもかかわらず、これらのタスクのために使ったサーバー / 時間は課金対象)
大規模クラスタでの AWS Redshift
- あるエキスパートが Twitter で最良のアドバイスを提供くれたものの、Redshift にデータセット全体をロードするのに約 10 時間
- クエリは 1 秒前後
すべての結果は、ごく普通の感じに見えます。しかし、その後(2016 年 4 月 6 日)、Mark は BigQuery を試してみようと思いたちます。
Google BigQuery
- 25 分で 10 億行をロード
- クエリは 2 秒以下
えっ、その理由は?
- クラスタのデプロイがなく、サイズに関する意思決定は不要
- BigQuery へのデータのロードは高速(さらに高速に)で無料(課金はロード後のストレージのみ)。他プラットフォームの場合はデータ ロードの CPU 時間に課金
- クエリは、それまでにテストしたどの環境より何倍も高速
- 最適化不要。BigQuery はデフォルトで効率が良く、高速
- 実際に試してみるときは、オープン データとして 10 億行が BigQuery にロードされているため、25 分待つ必要はなく、月々の無料クォータでこれをはじめとするオープン データセットを利用可能
上述のとおり、他よりもずっと高速で単純なプラットフォームが見つかったので、Mark の探究はここで終わってもよかったのですが、彼にはもっと大きな目標がありました。彼はあらゆるプラットフォームのあらゆる可能な構成を試したいと思っていたのです。その後に起きたことをまとめてみましょう。
AWS EMR 上の Presto(50 ノード)
- AWS EMR の場合、クラスタを実行可能な状態にするために、またも 20 分前後の時間が必要(Google Cloud Platform なら同じタスクに 90 秒以下)
- データはすでに S3 の ORC ファイルとしてロード済みなので、再度のロードは不要
- 10 倍のノード(以前、EMR 上で Presto を実行したときと比べて)で、クエリのスピードアップは 1.3 倍~3 倍(40 秒以下)
Google Cloud Dataproc 上の Presto
- クラスタの立ち上げに要した時間に関する言及はないものの、以前の結果から考えると、90 秒プラス Presto のインストール時間(30 秒以内)
- CSV から ORC への変換は 3 時間以内
- 最初のクエリは AWS EMR の 4 倍遅い
間違いありません。Mark の最初の Dataproc でのテストは、同等の構成の AWS EMR よりもクエリが遅かったのです。
しかし、話はここで終わりません。私が Mark のブログ ポスト シリーズを気に入った理由の 1 つは、業界のビッグデータ プレーヤーたちが彼のツイートに引き付けられている点です。
今までに私がツイートで見かけた人物は、AWS の EMR 責任者 Rahul Pathak 氏、AWS のヘッド エバンジェリスト Jeff Barr 氏、Elasticsearch のエンジニア Zachary Tong 氏など、そうそうたる顔ぶれです。
私たちはエンジニアであり、それゆえベンチマークを見つけると、数字を上げようとしてそれに飛びつくのです。Google からも、ビッグデータのテック リーダーで OSS ソフトウェア エンジニアの Dennis Huo が参戦しました。レースはますます面白くなっているのです。
S3 と HDFS(AWS 上)の比較
- S3(または同等の GCS)でのデータ管理にはさまざまな利点があるものの、HDFS にデータのコピーをロードしておくと 1.5 倍までパフォーマンスが向上することを Mark が発見(一部のクエリは 40 秒以下に)
Google Cloud Dataproc 再調査 : 33 倍高速に
- 10 ノードで、立ち上げに 2 分以下(以前 90 秒以下という数字を示したが、今回は Presto のインストールも行っており、それを全部含めて 120 秒以下)
- 別の圧縮手段(Zlib、Snappy)、インデックスのストライド サイズ、インデックスのストリップ サイズを操作した結果、クエリは 44 秒以下に
- その後、GCS ではなく HDFS をテスト。一部のクエリは 10 秒以下に
このように、クエリが 10 秒以下まで短縮されたのです。他の構成やサービスでこれに匹敵するパフォーマンスは、今のところ見たことがありません。
50 ノードの Google Cloud Dataproc(勝者)
- なんとクエリが 4 秒に
Mark は何度も試行錯誤を繰り返した結果、BigQuery のちょうど半分のスピードでこれらのクエリを Presto 上で実行するのに最適な構成を見つけました。今のところ、Google Cloud 上の Presto だけではありますが。
先ほども触れたように、このレースで最も興味がそそられるのは、どれだけのプレーヤーとプラットフォームが、BigQuery に匹敵するスピードをたたき出す最良の構成を見つけ出し、名乗りを上げるかということです。
結果をまとめると、「Presto 構成レース」を制したのは、4 秒のクエリを記録した Google Cloud Dataproc です。将来は、さらに処理効率を高めた構成が現れることでしょう。
とはいえ、Mark のテスト結果を見れば、価格からも性能からもベスト チョイスが BigQuery だということは明らかであり、Presto を使いたいなら Google Cloud Platform が実行場所として最良です。
この種の競争は実にすばらしいものです。もっと速く、もっと費用対効果の高い結果を示すために皆が競争すると、誰もが勝者になります。もちろん、最も得をするのは皆さんなのですが。