Hive メタストア

Dataproc Metastore は、Google Cloud 上で動作するフルマネージドで高可用性の自動修復サーバーレス Apache Hive メタストア(HMS)です。

メタデータを完全に管理するために、Dataproc Metastore はデータを Apache Hive テーブルにマッピングします。

サポートされている Apache Hive のバージョン

Dataproc Metastore は、特定のバージョンの Apache Hive のみをサポートしています。 詳細については、Hive バージョン ポリシーをご覧ください。

Hive によるメタデータの処理方法

Dataproc Metastore は Hive メタストアであるため、メタデータの管理方法を理解することが重要です。

デフォルトでは、すべての Hive アプリケーションでマネージド内部テーブルまたは非マネージド外部テーブルを含めることができます。つまり、Dataproc Metastore サービスに保存するメタデータは、内部テーブルと外部テーブルの両方に存在できます。

データを変更するときに、Dataproc Metastore サービス(Hive)は内部テーブルと外部テーブルを別々に処理します。

  • 内部テーブル。メタデータとテーブルデータの両方を管理します。
  • 外部テーブル。メタデータのみを管理します。

たとえば、DROP TABLE Hive SQL ステートメントを使用してテーブル定義を削除する場合は、次のようになります。

drop table foo
  • 内部テーブル。Dataproc Metastore では、すべてのメタデータが削除されます。 テーブルに関連付けられているファイルも削除されます。

  • 外部テーブル。Dataproc Metastore では、メタデータのみが削除されます。 テーブルに関連付けられているデータは保持されます。

Hive ウェアハウス ディレクトリ

Dataproc Metastore は、Hive ウェアハウス ディレクトリを使用して内部テーブルを管理します。Hive ウェアハウス ディレクトリには、実際のデータが保存されます。

Dataproc Metastore サービスを使用する場合、デフォルトの Hive ウェアハウス ディレクトリは Cloud Storage バケットです。Dataproc Metastore では、ウェアハウス ディレクトリ用の Cloud Storage バケットの使用のみがサポートされます。 比較すると、これはオンプレミス HMS とは異なります。Hive ウェアハウス ディレクトリは通常ローカル ディレクトリを指します。

このバケットは、Dataproc Metastore サービスを作成するたびに自動的に作成されます。この値は、hive.metastore.warehouse.dir プロパティに Hive Metastore 構成のオーバーライドを設定することで変更できます。

アーティファクト Cloud Storage バケット

アーティファクト バケットには、エクスポートされたメタデータやマネージド内部テーブルデータなどの Dataproc Metastore アーティファクトが保存されます。

Dataproc Metastore サービスを作成すると、プロジェクト内に Cloud Storage バケットが自動的に作成されます。デフォルトでは、アーティファクト バケットとウェアハウス ディレクトリの両方が同じバケットを参照します。アーティファクト バケットのロケーションは変更できませんが、Hive ウェアハウス ディレクトリのロケーションは変更できます。

アーティファクト バケットは次のロケーションにあります。

  • gs://your-artifacts-bucket/hive-warehouse
  • 例: gs://gcs-your-project-name-0825d7b3-0627-4637-8fd0-cc6271d00eb4

Hive ウェアハウス ディレクトリにアクセスする

バケットが自動的に作成されたら、Dataproc サービス アカウントに、Hive ウェアハウス ディレクトリにアクセスする権限があることを確認します。

  • オブジェクト レベル(gs://mybucket/object など)でウェアハウス ディレクトリにアクセスするには、roles/storage.objectAdmin ロールを使用して、バケットのストレージ オブジェクトへの読み取りと書き込みのアクセス権を Dataproc サービス アカウントに付与します。このロールは、バケットレベル以上で設定する必要があります。

  • 最上位フォルダ(gs://mybucket など)を使用している場合にウェアハウス ディレクトリにアクセスするには、roles/storage.storageAdmin ロールを使用して、バケットのストレージ オブジェクトへの読み取りと書き込みのアクセス権を Dataproc サービス アカウントに付与します。

Hive ウェアハウス ディレクトリが Dataproc Metastore と同じプロジェクトにない場合は、Dataproc Metastore サービス エージェントに、Hive ウェアハウス ディレクトリへのアクセス権限があることを確認してください。Dataproc Metastore プロジェクトのサービス エージェントは service-PROJECT_NUMBER@gcp-sa-metastore.iam.gserviceaccount.com です。 roles/storage.objectAdmin ロールを使用して、サービス エージェントにバケットに対する読み取りと書き込みのアクセス権を付与します。

Hive ウェアハウス ディレクトリを検索する

  1. [Dataproc Metastore] ページを開きます。
  2. サービスの名前をクリックします。

    サービスの詳細ページが開きます。

  3. 構成テーブルで、[Metastore config overrides] > [hive.metastore.warehouse.dir] を見つけます。

  4. gs:// で始まる値を探します。

    この値は、Hive ウェアハウス ディレクトリのロケーションです。

    hive.metastore.warehouse.dir の値

Hive ウェアハウス ディレクトリを変更する

Dataproc Metastore で独自の Cloud Storage バケットを使用するには、新しいバケットのロケーションを参照するように Hive Metastore 構成のオーバーライドを設定します。

デフォルトのウェアハウス ディレクトリを変更する場合は、次の推奨事項に従ってください。

  • Cloud Storage バケットのルート(gs://mybucket)を使用して Hive テーブルを保存しないでください。

  • Dataproc Metastore VM サービス アカウントに、Hive ウェアハウス ディレクトリにアクセスする権限があることを確認します。

  • 最良の結果を得るため、Dataproc Metastore サービスと同じリージョンにある Cloud Storage バケットを使用します。Dataproc Metastore ではクロスリージョン バケットを許可しますが、同じロケーションに配置されたリソースのパフォーマンスは向上します。たとえば、EU マルチリージョン バケットは us-central1 サービスとはうまく機能しません。リージョンをまたぐアクセスでは、レイテンシが増加し、リージョンの障害分離がなくなり、リージョン間のネットワーク帯域幅に対して課金されることになります。

Hive ウェアハウス ディレクトリを変更するには

  1. [Dataproc Metastore] ページを開きます。
  2. サービスの名前をクリックします。

    サービスの詳細ページが開きます。

  3. 構成テーブルで、[Metastore config overrides] > [hive.metastore.warehouse.dir] セクションを見つけます。

  4. hive.metastore.warehouse.dir の値を新しいバケットのロケーションに変更します。例: gs://my-bucket/path/to/location

バケットを削除する

Dataproc Metastore サービスを削除しても、Cloud Storage アーティファクト バケットは自動的に削除されません。バケットには有用なポストサービス データが含まれている可能性があるため、バケットは自動的に削除されません。バケットを削除するには、Cloud Storage の削除オペレーションを実行します。

次のステップ