Cloud Bigtable の概要

1. はじめに

この Codelab では、Java HBase クライアントCloud Bigtable を使用する方法について説明します。

方法を学ぶ対象

  • スキーマ設計でよくある間違いを回避する
  • シーケンス ファイルのデータをインポートする
  • データに対するクエリを実行する

完了すると、ニューヨーク市のバスのデータを示す地図が複数作成されます。たとえば、マンハッタンのバスの移動に関する次のヒートマップを作成します。

7349d94f7d41f1d1.png

Google Cloud Platform のご利用経験についてどのように評価されますか?

初心者 中級者 上級者

このチュートリアルの利用方法をお選びください。

通読のみ 通読して演習を行う

2. データセットについて

ニューヨーク市のバスに関するデータセットを見てみましょう。300 以上のバス路線があり、5,800 台の車両がこれらの路線を運行しています。データセットは、目的地名、車両 ID、緯度、経度、到着予定時刻、到着予定時刻を含むログです。このデータセットは、2017 年 6 月に約 10 分ごとに取得されたスナップショットで構成されています。

3. スキーマの設計

Cloud Bigtable で最高のパフォーマンスを得るには、スキーマを設計する際に慎重に検討する必要があります。Cloud Bigtable のデータは辞書順に自動的に並べ替えられるため、スキーマを適切に設計すれば、関連データのクエリを非常に効率的に実行できます。Cloud Bigtable では、行キーによるポイント ルックアップまたは連続した行のセットを返す行範囲スキャンを使用するクエリが可能です。ただし、スキーマが十分に検討されていないと、複数の行ルックアップを組み合わせたり、最悪の場合、非常に遅いオペレーションであるテーブルのフルスキャンを実行したりすることになります。

クエリを計画する

データにはさまざまな情報が含まれていますが、この Codelab では、バスの現在地目的地を使用します。

この情報を使用して、次のクエリを実行できます。

  • 指定した時間帯の 1 台のバスの位置を取得します。
  • バス路線または特定のバスの 1 日分のデータを取得します。
  • 地図上の長方形内のすべてのバスを検索します。
  • すべてのバスの現在地を取得します(このデータをリアルタイムで取り込んでいる場合)。

このクエリのセットをすべて同時に最適に実行することはできません。たとえば、時間で並べ替える場合、テーブル全体のスキャンを実行せずに場所に基づいてスキャンすることはできません。最も頻繁に実行するクエリに基づいて優先順位を設定する必要があります。

この Codelab では、次のクエリセットの最適化と実行に焦点を当てます。

  • 特定の車両の 1 時間以上の位置情報を取得します。
  • 1 時間以上にわたるバス路線の全区間の位置情報を取得します。
  • マンハッタンのすべてのバスの位置を 1 時間以内に取得します。
  • マンハッタンのすべてのバスの最新の位置情報を 1 時間以内に取得します。
  • 1 か月間のバス路線の全区間の位置情報を取得します。
  • 特定の目的地に向かうバス路線の 1 時間以上の位置情報を取得します。

行キーを設計する

この Codelab では静的データセットを使用しますが、スケーラビリティを考慮したスキーマを設計します。テーブルにバスデータをさらにストリーミングしても、パフォーマンスを維持できるスキーマを設計します。

行キーのスキーマ案は次のとおりです。

[バス会社/バス路線/タイムスタンプ(時間単位で切り捨て) / 車両 ID]。各行には 1 時間分のデータが含まれ、各セルにはデータのタイムスタンプ付きの複数のバージョンが格納されます。

この Codelab では、わかりやすくするために 1 つの列ファミリーを使用します。データの表示例を次に示します。データは行キーで並べ替えられます。

行キー

cf:VehicleLocation.Latitude

cf:VehicleLocation.Longitude

...

MTA/M86-SBS/1496275200000/NYCT_5824

40.781212 @20:52:54.0040.776163 @20:43:19.0040.778714 @20:33:46.00

-73.961942 @20:52:54.00-73.946949 @20:43:19.00-73.953731 @20:33:46.00

...

MTA/M86-SBS/1496275200000/NYCT_5840

40.780664 @20:13:51.0040.788416 @20:03:40.00

-73.958357 @20:13:51.00 -73.976748 @20:03:40.00

...

MTA/M86-SBS/1496275200000/NYCT_5867

40.780281 @20:51:45.0040.779961 @20:43:15.0040.788416 @20:33:44.00

-73.946890 @20:51:45.00-73.959465 @20:43:15.00-73.976748 @20:33:44.00

...

...

...

...

...

4. インスタンス、テーブル、ファミリーを作成する

次に、Cloud Bigtable テーブルを作成します。

まず、新しいプロジェクトを作成します。右上隅にある [Cloud Shell をアクティブにする] ボタンをクリックして開くことができる、組み込みの Cloud Shell を使用します。

a74d156ca7862b28.png

次の環境変数を設定して、Codelab コマンドのコピーと貼り付けを簡単にします。

INSTANCE_ID="bus-instance"
CLUSTER_ID="bus-cluster"
TABLE_ID="bus-data"
CLUSTER_NUM_NODES=3
CLUSTER_ZONE="us-central1-c"

Cloud Shell には、この Codelab で使用するツール(gcloud コマンドライン ツールcbt コマンドライン インターフェースMaven)がすでにインストールされています。

次のコマンドを実行して、Cloud Bigtable API を有効にします。