BigQueryの基本構成を解説【セッションレポート】#GoogleCloudNext東京
概要
Google. Cloud Next 東京'23に参加した際のセッションレポートになります。
ただセッション内容を書くというよりかは、なるべく短くまとめてわかりやすいように工夫したいと思っています。
本ブログは【データ分析を加速するBigQuery性能加速化のポイント】というセッションに参加した時の情報です。
前半の内容がBigQueryアーキテクチャの紹介で、後半にBigQueryをさらに性能よく使用するコツの話が出てきました。
今回は前半のBigQueryアーキテクチャの紹介に絞り、まとめていきます。
後半のブログは下記を参照ください。
https://dev.classmethod.jp/articles/google-next23-bigquerysession/
巨大なStorageとコンピュートエンジンのクラスター
Google Cloudと言ったらBigQueryの名前がすぐに上がりますが、なぜあのような高性能なパフォーマンスを出せているのでしょうか?
それは、巨大なストレージと計算エンジンのクラスターで動作しているためです。
数千〜数万のエンジンの集合であるクラスターにより、取り扱うデータの規模にかかわらず高速な処理を提供できる仕組みを備えています。
こちらを前提として、ここからはBigQuery以外のサービスでも使用されるGoogleの技術について、深掘りをしていきます。(もちろんBigQueryでも使用されている技術)
Borg
Borgとは、Googleが内部で使用している大規模なクラスタ管理システムです。
先程も触れたように、数千~数万台以上のサーバーからなるクラスターを効率的に管理するためのもので、その他Googleサービスでも利用されています。(これに含まれるサービスの一つがBigQuery)
このシステムの主要な役割は、多くのアプリケーションを単一の共有クラスターで実行することであり、複雑なタスクを実行可能にし、利用可能なリソースを最善に活用する役割があります。
Dremel
DremelはGoogleが開発した大規模データ処理システムになります。
このシステムが、大量のデータに対して対話型のクエリを素早く実行する能力を持っていることで、BigQueryの高速な分析を可能にします。
Dremelのアーキテクチャは計算リソースとストレージの分離、高速データネットワーク接続、そしてダイナミックなシャッフル処理が特徴で、これらがBigQueryの高性能な仕組みを支えています。
(※ 高速データネットワーク接続:データが各サーバーやデバイス間で素早く効率的に移動できるような接続方法のこと)
Colossus
Colossusは、Google Cloudのサービスが大量のデータを保存、管理する際に使用される、Googleの分散ファイルシステムです。
エクサバイト規模の単一クラスタと数万のマシンを支え、多くのアプリケーションが共有する基盤であり、ストレージの複雑性を抽象化し、それを実行可能にします。
ストレージ効率と堅牢性(耐久性)も高く、ストレージ資源の最適化と障害からのリカバリー能力も備えています。
Capacitor
Capacitorは、BigQueryのパフォーマンスを向上させるカスタム列指向ストレージフォーマットです。
これにより、効率的な圧縮、バイト列レベルの操作、数据の自動分割と並列配布、およびスキーマの柔軟性により、データ分析を高速化し、さらに効率性も提供することができます。
(※ カスタム列指向ストレージフォーマット:列単位でデータを格納するファイルフォーマット)
分散インメモリシャッフル
分散インメモリシャッフルとは、大量のデータ処理を分散して管理し、結果を高速に処理するための機能です。
シャッフルとは、必要に応じてデータを再配置する操作であり、通常は大きなデータセットに対する集計処理(GROUP BYなど)の際に行われます。
BigQueryの分散インメモリシャッフルは、複数のマシンのメモリに分散して保存し、これによりデータは並列に処理されて高速化され、大量のデータを効率よく処理することが可能です。
よって、複数マシンのメモリを使用することで、大量のデータを素早く効率的に処理する能力をBigQueryに提供するのが、分散インメモリシャッフルということになります。
Jupiter
Jupiterネットワークは、Googleのデータセンター内で使用されるデータを高速に送受信するための大規模なネットワーキング技術になります。
ペタバイト規模のデータを一度に処理可能で、この高速ネットワーキングシステムは、その他Google製品とサービスにも使用されています。
例えば、BigQueryで複雑なクエリを投げた場合、Googleデータセンター内の異なるマシンで分割処理され、さまざまなマシン間でこのデータを迅速に転送します。
結果的にユーザー視点で見ると、一つの巨大なマシンで処理が行われているかのように感じることができます。(Googleのデータセンターは1つのコンピューターであるという思想とマッチしますね)
Jupiterネットワークが存在することにより、BigQueryは大量のデータを素早く処理できる性能を持ち合わせています。
まとめ
今回はBigQueryの裏側のアーキテクチャーを簡単に紹介しました。
セッション情報のみだと、メモ書きレベルでしか情報取集できなかったので、公式サイトも拝見し、まとめてみました。
下記にリンクを貼っているので、興味がある方はぜひ。
参考サイト
https://cloud.google.com/blog/ja/products/gcp/google-technology-through-published-papers-part3