Hive catalog
Hive catalog は、StarRocks が v2.4 以降でサポートする外部カタログの一種です。Hive catalog では以下のことができます:
- Hive に保存されているデータを、テーブルを手動で作成することなく直接クエリできます。
- INSERT INTO または非同期マテリアライズドビュー(v2.5 以降でサポート)を使用して、Hive に保存されているデータを処理し、StarRocks にデータをロードできます。
- StarRocks 上で操作を行い、Hive データベースやテーブルを作成または削除したり、StarRocks テーブルから Parquet 形式(v3.2 以降でサポート)および ORC または Textfile 形式(v3.3 以降でサポート)の Hive テーブルにデータをシンクできます。
Hive クラスターでの SQL ワークロードを成功させるためには、StarRocks クラスターが Hive クラスターのストレージシステムとメタストアにアクセスできる必要があります。StarRocks は以下のストレージシステムとメタストアをサポートしています:
-
分散ファイルシステム(HDFS)または AWS S3、Microsoft Azure Storage、Google GCS、その他の S3 互換ストレージシステム (例:MinIO)
-
メタストアとして Hive メタストアまたは AWS Glue
注記ストレージとして AWS S3 を選択した場合、メタストアとして HMS または AWS Glue を使用できます。他のストレージシステムを選択した場合、メタストアとしては HMS のみを使用できます。
使用上の注意
-
StarRocks は、Parquet、ORC、Textfile、Avro、RCFile、SequenceFile ファイル形式の Hive テーブルに対するクエリをサポートしています:
- Parquet ファイルは、以下の圧縮形式をサポートしています:SNAPPY、LZ4、ZSTD、GZIP、NO_COMPRESSION。v3.1.5 以降、Parquet ファイルは LZO 圧縮形式もサポートしています。
- ORC ファイルは、以下の圧縮形式をサポートしています:ZLIB、SNAPPY、LZO、LZ4、ZSTD、NO_COMPRESSION。
- Textfile ファイルは、v3.1.5 以降、LZO 圧縮形式をサポートしています。
-
StarRocks がサポートしていない Hive のデータ型は INTERVAL、BINARY、UNION です。さらに、StarRocks は Textfile 形式の Hive テーブルに対して MAP および STRUCT データ型をサポートしていません。
-
StarRocks は、Parquet 形式(v3.2 以降でサポート)および ORC または Textfile 形式(v3.3 以降でサポート)の Hive テーブルへのデータのシンクをサポートしています:
- Parquet および ORC ファイルは、以下の圧縮形式をサポートしています:NO_COMPRESSION、SNAPPY、LZ4、ZSTD、GZIP。
- Textfile ファイルは、NO_COMPRESSION 圧縮形式をサポートしています。
Hive テーブルへのデータのシンクに使用する圧縮アルゴリズムを指定するために、セッション変数
connector_sink_compression_codecを使用できます。
統合準備
Hive catalog を作成する前に、StarRocks クラスターが Hive クラスターのストレージシステムとメタストアと統合できることを確認してください。
AWS IAM
Hive クラスターがストレージとして AWS S3 を使用している場合、またはメタストアとして AWS Glue を使用している場合、適切な認証方 法を選択し、StarRocks クラスターが関連する AWS クラウドリソースにアクセスできるように必要な準備を行ってください。
以下の認証方法が推奨されます:
- インスタンスプロファイル
- 想定ロール
- IAM ユーザー
上記の三つの認証方法の中で、インスタンスプロファイルが最も広く使用されています。
詳細については、AWS IAM での認証準備を参照してください。
HDFS
ストレージとして HDFS を選択した場合、StarRocks クラスターを次のように構成します:
-
(オプション)HDFS クラスターおよび Hive メタストアにアクセスするために使用されるユーザー名を設定します。デフォルトでは、StarRocks は HDFS クラスターおよび Hive メタストアにアクセスするために FE および BE または CN プロセスのユーザー名を使用します。また、各 FE の fe/conf/hadoop_env.sh ファイルの先頭、および各 BE または CN の be/conf/hadoop_env.sh ファイルまたは cn/conf/hadoop_env.sh ファイルの先頭に
export HADOOP_USER_NAME="<user_name>"を追加してユーザー名を設定することもできます。これらのファイルでユーザー名を設定した後、各 FE および各 BE または CN を再起動して、パラメータ設定を有効にします。StarRocks クラスターごとに一つのユーザー名のみを設定できます。 -
Hive データをクエリす る際、StarRocks クラスターの FEs および BEs または CNs は HDFS クライアントを使用して HDFS クラスターにアクセスします。ほとんどの場合、その目的を達成するために StarRocks クラスターを構成する必要はなく、StarRocks はデフォルトの構成を使用して HDFS クライアントを起動します。次の状況でのみ StarRocks クラスターを構成する必要があります:
- HDFS クラスターに高可用性 (HA) が有効になっている場合:HDFS クラスターの hdfs-site.xml ファイルを各 FE の $FE_HOME/conf パス、および各 BE または CN の $BE_HOME/conf パスに追加します。
- HDFS クラスターに View File System (ViewFs) が有効になっている場合:HDFS クラスターの core-site.xml ファイルを各 FE の $FE_HOME/conf パス、および各 BE または CN の $BE_HOME/conf パスに追加します。
クエリを送信した際に不明なホストを示すエラーが返された場合、HDFS クラスターのノードのホスト名と IP アドレスのマッピングを /etc/hosts パスに追加する必要があります。
Kerberos 認証
HDFS クラスターまたは Hive メタストアに Kerberos 認証が有効になっている場合、StarRocks クラスターを次のように構成します:
- 各 FE および各 BE または CN で
kinit -kt keytab_path principalコマンドを実行して、Key Distribution Center (KDC) から Ticket Granting Ticket (TGT) を取得します。このコマンドを実行するには、HDFS クラスターおよび Hive メタストアにアクセスする権限が必要です。このコマンドを使用して KDC にアクセスすることは時間に敏感です。したがって、このコマンドを定期的に実行するために cron を使用する必要があります。 - 各 FE の $FE_HOME/conf/fe.conf ファイル、および各 BE または CN の $BE_HOME/conf/be.conf ファイルに
JAVA_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf"を追加します。この例では、/etc/krb5.confは krb5.conf ファイルの保存パスです。必要に応じてパスを変更できます。
Hive catalog の作成
構文
CREATE EXTERNAL CATALOG <catalog_name>
[COMMENT <comment>]
PROPERTIES
(
"type" = "hive",
GeneralParams,
MetastoreParams,
StorageCredentialParams,
MetadataUpdateParams
)
パラメータ
catalog_name
Hive catalog の名前です。命名規則は以下の通りです:
- 名前には文字、数字(0-9)、アンダースコア(_)を含めることができます。文字で始まる必要があります。
- 名前は大文字と小文字を区別し、長さは 1023 文字を超えてはなりません。
comment
Hive catalog の説明です。このパラメータはオプショ ンです。
type
データソースのタイプです。値を hive に設定します。
GeneralParams
一般的なパラメータのセットです。
GeneralParams で構成できるパラメータを以下の表に示します。
| Parameter | Required | Description |
|---|---|---|
| enable_recursive_listing | No | StarRocks がテーブルとそのパーティション、およびテーブルとそのパーティションの物理的な場所内のサブディレクトリからデータを読み取るかどうかを指定します。 有効な値:true および false。 デフォルト値:true。 値 true はサブディレクトリを再帰的にリストすることを指定し、値 false はサブディレクトリを無視することを指定します。 |
MetastoreParams
StarRocks がデータソースのメタストアと統合する方法に関するパラメータのセットです。
Hive メタストア
データソースのメタストアとして Hive メタストアを選択した場合、MetastoreParams を次のように構成します:
"hive.metastore.type" = "hive",
"hive.metastore.uris" = "<hive_metastore_uri>"
Hive データをクエリする前に、Hive メタストアノードのホスト名と IP アドレスのマッピングを /etc/hosts パスに追加する必要があります。そうしないと、クエリを開始したときに StarRocks が Hive メタストアにアクセスできない可能性があります。
MetastoreParams で構成する必要があるパラメータを以下の表に示します。
| Parameter | Required | Description |
|---|---|---|
| hive.metastore.type | Yes | Hive クラスターで使用するメタストアのタイプです。値を hive に設定します。 |
| hive.metastore.uris | Yes | Hive メタストアの URI です。形式:thrift://<metastore_IP_address>:<metastore_port>。Hive メタストアに高可用性 (HA) が有効になっている場合、複数のメタストア URI を指定し、カンマ( ,)で区切ることができます。例:"thrift://<metastore_IP_address_1>:<metastore_port_1>,thrift://<metastore_IP_address_2>:<metastore_port_2>,thrift://<metastore_IP_address_3>:<metastore_port_3>"。 |
AWS Glue
データソースのメタストアとして AWS Glue を選択した場合、これはストレージとして AWS S3 を選択した場合にのみサポートされます。以下のいずれかの操作を行います:
-
インスタンスプロファイルベースの認証方法を選択する場 合、
MetastoreParamsを次のように構成します:"hive.metastore.type" = "glue",
"aws.glue.use_instance_profile" = "true",
"aws.glue.region" = "<aws_glue_region>" -
想定ロールベースの認証方法を選択する場合、
MetastoreParamsを次のように構成します:"hive.metastore.type" = "glue",
"aws.glue.use_instance_profile" = "true",
"aws.glue.iam_role_arn" = "<iam_role_arn>",
"aws.glue.region" = "<aws_glue_region>" -
IAM ユーザーベースの認証方法を選択する場合、
MetastoreParamsを次のように構成します:"hive.metastore.type" = "glue",
"aws.glue.use_instance_profile" = "false",
"aws.glue.access_key" = "<iam_user_access_key>",
"aws.glue.secret_key" = "<iam_user_secret_key>",
"aws.glue.region" = "<aws_s3_region>"
MetastoreParams で構成する必要があるパラメータを以下の表に示します。
| Parameter | Required | Description |
|---|---|---|
| hive.metastore.type | Yes | Hive クラスターで使用するメタストアのタイプです。値を glue に設定します。 |
| aws.glue.use_instance_profile | Yes | インスタンスプロファイルベースの認証方法と想定ロールベースの認証を有効にするかどうかを指定します。 有効な値:true および false。 デフォルト値:false。 |
| aws.glue.iam_role_arn | No | AWS Glue Data Catalog に対する権限を持つ IAM ロールの ARN です。AWS Glue にアクセスするために想定ロールベースの認証方法を使用する場合、このパラメータを指定する必要があります。 |
| aws.glue.region | Yes | AWS Glue Data Catalog が存在するリージョンです。例:us-west-1。 |
| aws.glue.access_key | No | AWS IAM ユーザーのアクセスキーです。IAM ユーザーベースの認証方法を使用して AWS Glue にアクセスする場合、このパラメータを指定する必要があります。 |
| aws.glue.secret_key | No | AWS IAM ユーザーのシークレットキーです。IAM ユーザーベースの認証方法を使用して AWS Glue にアクセスする場合、このパラメータを指定する必要があります。 |
| hive.metastore.glue.catalogid | No | 使用する AWS Glue Data Catalog の ID。指定しない場合、現在の AWS アカウントのカタログが使用されます。別の AWS アカウントの Glue Data Catalog にアクセスする(クロスアカウントアクセス)必要がある場合は、このパラメータを指定する必要があります。 |
AWS Glue にアクセスするための認証方法の選択方法や AWS IAM コンソールでのアクセス制御ポリシーの設定方法については、AWS Glue にアクセスするための認証パラメータを参照してください。
StorageCredentialParams
StarRocks がストレージシステムと統合する方法に関するパラメータのセットです。このパラメータセットはオプションです。
ストレージとして HDFS を使用する場合、StorageCredentialParams を構成する必要はありません。
ストレージとして AWS S3、その他の S3 互換ストレージシステム、Microsoft Azure Storage、または Google GCS を使用する場合、StorageCredentialParams を構成する 必要があります。
AWS S3
Hive クラスターのストレージとして AWS S3 を選択した場合、以下のいずれかの操作を行います:
-
インスタンスプロファイルベースの認証方法を選択する場合、
StorageCredentialParamsを次のように構成します:"aws.s3.use_instance_profile" = "true",
"aws.s3.region" = "<aws_s3_region>" -
想定ロールベースの認証方法を選択する場合、
StorageCredentialParamsを次のように構成します:"aws.s3.use_instance_profile" = "true",
"aws.s3.iam_role_arn" = "<iam_role_arn>",
"aws.s3.region" = "<aws_s3_region>" -
IAM ユーザーベースの認証方法を選択する場合、
StorageCredentialParamsを次のように構成します:"aws.s3.use_instance_profile" = "false",
"aws.s3.access_key" = "<iam_user_access_key>",
"aws.s3.secret_key" = "<iam_user_secret_key>",
"aws.s3.region" = "<aws_s3_region>"
StorageCredentialParams で構成する必要があるパラメータを以下の表に示します。
| Parameter | Required | Description |
|---|---|---|
| aws.s3.use_instance_profile | Yes | インスタンスプロファイルベースの認証方法と想定ロールベースの認証方法を有効にするかどうかを指定します。 有効な値:true および false。 デフォルト値:false。 |
| aws.s3.iam_role_arn | No | AWS S3 バケットに対する権限を持つ IAM ロールの ARN です。AWS S3 にアクセスするために想定ロールベースの認証方法を使用する場合、このパラメータを指定する必要があります。 |
| aws.s3.region | Yes | AWS S3 バケットが存在するリージョンです。例:us-west-1。 |
| aws.s3.access_key | No | IAM ユーザーのアクセスキーです。IAM ユーザーベースの認証方法を使用して AWS S3 にアクセスする場合、このパラメータを指定する必要があります。 |
| aws.s3.secret_key | No | IAM ユーザーのシークレットキーです。IAM ユーザーベースの認証方法を使用して AWS S3 にアクセスする場合、このパラメータを指定する必要があります。 |
AWS S3 にアクセスするための認証方法の選択方法や AWS IAM コンソールでのアクセス制御ポリシーの設定方法については、AWS S3 にアクセスするための認証パラメータを参照してください。