Hive カタログを設定すると、Realtime Compute for Apache Flink の開発コンソールで Hive テーブルを手動で登録する必要がなく、Hive メタデータを直接読み取ることができます。これにより、ジョブ開発効率が向上し、データ精度が確保されます。このトピックでは、Hive メタデータの設定方法、および Hive カタログの作成と使用方法について説明します。
背景
Realtime Compute for Apache Flink の開発コンソールで Hive カタログを設定するには、まず Hive カタログ設定ファイルと Hadoop 依存関係を Object Storage Service (OSS) コンソールの指定されたディレクトリに保存します。Hive カタログを設定すると、DML ステートメントを使用してビジネスロジックを作成し、開発コンソールで Hive テーブルメタデータを直接取得できるため、DDL ステートメントを使用してテーブルを宣言する必要はありません。Hive カタログテーブルは、ストリーミングデプロイとバッチデプロイの両方で、ソーステーブルまたは結果テーブルとして使用できます。
Realtime Compute for Apache Flink は、Hive カタログのメタデータセンターとして、Hive メタストアまたは Alibaba Cloud Data Lake Formation (DLF) のいずれかをサポートしています。このトピックでは、Hive カタログを管理するための以下の操作について説明します。
前提条件
Hive カタログのメタデータ管理センターとして Hive メタストアまたは Alibaba Cloud Data Lake Formation (DLF) を使用するには、次の設定を完了してください:
-
Hive カタログのメタデータ管理センターとして Hive メタストアを使用
要件
説明
Hive メタストアサービスを有効にします。
次のコマンドを使用します:
-
Hive メタストアサービスを起動するには:
hive --service metastore -
Hive メタストアサービスが有効になっているかどうかを確認するには:
netstat -ln | grep 9083Hive メタストアのデフォルトのポート番号は 9083 です。hive-site.xml ファイルで別のポート番号を設定している場合は、9083 を正しいポート番号に置き換えてください。
Flink からのアクセスを許可するため、Hive メタストアにホワイトリストを設定してください。
Flink の CIDR ブロックを取得するには、「ホワイトリストの設定」をご参照ください。Hive メタストアのホワイトリストを設定するには、「セキュリティグループルールの追加」をご参照ください。
-
-
Hive カタログのメタデータ管理センターとして DLF を使用
DLF をアクティブ化してください。まだアクティブ化していない場合は、
制限事項
-
セルフマネージドの Hive メタストアのみがサポートされます。
-
Apache Flink 1.16 以降ではこれらのバージョンのサポートが非推奨となっているため、Hive 1.x、2.1.x、2.2.x は、Ververica Runtime (VVR) 6.x のみでサポートされます。
-
Hive カタログがメタストアとして Data Lake Formation (DLF) を使用する場合、Hive 以外のテーブルの作成は、Ververica Runtime (VVR) 8.0.6 以降でのみサポートされます。
-
OSS-HDFS へのデータ書き込みは、Ververica Runtime (VVR) 8.0.6 以降でのみサポートされます。
Hive メタデータの設定
-
Hadoop クラスターの Virtual Private Cloud (VPC) を Realtime Compute for Apache Flink の VPC に接続します。
Alibaba Cloud DNS PrivateZone を使用して VPC を接続します。詳細については、「リゾルバー」をご参照ください。ネットワークが接続されると、Realtime Compute for Apache Flink は Hadoop クラスターの設定ファイルを使用してアクセスします。
-
Hive カタログは、メタデータ管理に Hive Metastore または Data Lake Formation (DLF) のいずれかを使用できます。以下のセクションでは、必要な設定について説明します。
Hive Metastore
hive-site.xml 設定ファイルの hive.metastore.uris パラメーターが正しく設定されていることを確認します。
<property> <name>hive.metastore.uris</name> <value>thrift://xx.yy.zz.mm:9083</value> <description>リモートメタストアの Thrift URI。メタストアクライアントがリモートメタストアに接続するために使用します。</description> </property>上記の例では、
xx.yy.zz.mmは Hive Metastore の内部 IP アドレスまたはパブリック IP アドレスです。説明hive.metastore.uris にホスト名を設定する場合は、ドメイン名解決サービスを設定する必要があります。設定しない場合、Flink 開発コンソールが Hive にリモートアクセスする際に、hive.metastore.uris パラメーターの値を解決できず、
UnknownHostExceptionエラーが発生します。ドメイン名解決サービスの設定方法の詳細については、「PrivateZone レコードの追加」をご参照ください。Data Lake Formation (DLF)
Hive カタログが DLF にアクセスできるようにするには、hive-site.xml 設定ファイルに以下のプロパティを追加します。
説明hive-site.xml ファイルに dlf.catalog.akMode プロパティが含まれている場合は、削除する必要があります。削除しない場合、Hive カタログは DLF にアクセスできません。
<property> <name>hive.imetastoreclient.factory.class</name> <value>com.aliyun.datalake.metastore.hive2.DlfMetaStoreClientFactory</value> </property> <property> <name>dlf.catalog.uid</name> <value>${YOUR_DLF_CATALOG_UID}</value> </property> <property> <name>dlf.catalog.endpoint</name> <value>${YOUR_DLF_ENDPOINT}</value> </property> <property> <name>dlf.catalog.region</name> <value>${YOUR_DLF_CATALOG_REGION}</value> </property> <property> <name>dlf.catalog.accessKeyId</name> <value>${YOUR_ACCESS_KEY_ID}</value> </property> <property> <name>dlf.catalog.accessKeySecret</name> <value>${YOUR_ACCESS_KEY_SECRET}</value> </property>パラメーター
説明
備考
dlf.catalog.uid
Alibaba Cloud アカウント ID。
アカウント情報については、ユーザー情報ページにアクセスします。
dlf.catalog.endpoint
DLF サービスエンドポイント。
詳細については、「リージョンとエンドポイント」をご参照ください。
説明-
dlf.catalog.endpoint パラメーターには、DLF の VPC エンドポイントを設定することを推奨します。例えば、選択したリージョンが中国 (杭州) の場合、dlf.catalog.endpoint パラメーターを dlf-vpc.cn-hangzhou.aliyuncs.com に設定します。
-
VPC 間で DLF にアクセスするには、「VPC間でサービスにアクセスする方法」をご参照ください。
dlf.catalog.region
DLF サービスのリージョン。
詳細については、「リージョンとエンドポイント」をご参照ください。
説明このリージョンが dlf.catalog.endpoint パラメーターで指定されたリージョンと一致していることを確認してください。
dlf.catalog.accessKeyId
Alibaba Cloud AccessKey ID。
詳細については、「AccessKeyペアの取得」をご参照ください。
dlf.catalog.accessKeySecret
Alibaba Cloud AccessKey シークレット。
詳細については、「AccessKeyペアの取得」をご参照ください。
-
-
Hive カタログは、Object Storage Service (OSS) または OSS-HDFS サービスにテーブルを保存できます。以下のセクションでは、必要な設定について説明します。
OSS
Hive カタログが OSS にアクセスできるようにするには、hive-site.xml 設定ファイルに以下のプロパティを追加します。
<property> <name>fs.oss.impl.disable.cache</name> <value>true</value> </property> <property> <name>fs.oss.impl</name> <value>org.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystem</value> </property> <property> <name>hive.metastore.warehouse.dir</name> <value>${YOUR_OSS_WAREHOUSE_DIR}</value> </property> <property> <name>fs.oss.endpoint</name> <value>${YOUR_OSS_ENDPOINT}</value> </property> <property> <name>fs.oss.accessKeyId</name> <value>${YOUR_ACCESS_KEY_ID}</value> </property> <property> <name>fs.oss.accessKeySecret</name> <value>${YOUR_ACCESS_KEY_SECRET}</value> </property> <property> <name>fs.defaultFS</name> <value>oss://${YOUR_OSS_BUCKET_DOMIN}</value> </property>以下の表でパラメーターについて説明します。
パラメーター
説明
備考
hive.metastore.warehouse.dir
テーブルデータのストレージパス。
fs.oss.endpoint
Object Storage Service (OSS) エンドポイント。
詳細については、「リージョンとエンドポイント」をご参照ください。
fs.oss.accessKeyId
Alibaba Cloud AccessKey ID。
詳細については、「AccessKeyペアの取得」をご参照ください。
fs.oss.accessKeySecret
Alibaba Cloud AccessKey シークレット。
詳細については、「AccessKeyペアの取得」をご参照ください。
fs.defaultFS
テーブルデータのデフォルトのファイルシステム。
OSS バケットをデフォルトのファイルシステムとして指定します。例:
oss://your-bucket-nameOSS-HDFS
-
Hive カタログが OSS-HDFS サービスにアクセスできるようにするには、hive-site.xml 設定ファイルに以下のプロパティを追加します。
<property> <name>fs.jindo.impl</name> <value>com.aliyun.jindodata.jindo.JindoFileSystem</value> </property> <property> <name>hive.metastore.warehouse.dir</name> <value>${YOUR_OSS_WAREHOUSE_DIR}</value> </property> <property> <name>fs.oss.endpoint</name> <value>${YOUR_OSS_ENDPOINT}</value> </property> <property> <name>fs.oss.accessKeyId</name> <value>${YOUR_ACCESS_KEY_ID}</value> </property> <property> <name>fs.oss.accessKeySecret</name> <value>${YOUR_ACCESS_KEY_SECRET}</value> </property> <property> <name>fs.defaultFS</name> <value>oss://${YOUR_OSS_HDFS_BUCKET_DOMIN}</value> </property>パラメーター
説明
備考
hive.metastore.warehouse.dir
テーブルデータのストレージパス。
fs.oss.endpoint
Object Storage Service (OSS) エンドポイント。
詳細については、「リージョンとエンドポイント」をご参照ください。
fs.oss.accessKeyId
Alibaba Cloud AccessKey ID。
詳細については、「AccessKeyペアの取得」をご参照ください。
fs.oss.accessKeySecret
Alibaba Cloud AccessKey シークレット。
詳細については、「AccessKeyペアの取得」をご参照ください。
fs.defaultFS
テーブルデータのデフォルトのファイルシステム。
OSS バケットをデフォルトのファイルシステムとして指定します。例:
oss://your-bucket-name -
(オプション): OSS-HDFS サービスから Parquet 形式の Hive テーブルを読み取るには、Realtime Compute for Apache Flink 設定ファイルに以下のパラメーターを追加します。
fs.oss.jindo.accessKeyId: ${YOUR_ACCESS_KEY_ID} fs.oss.jindo.accessKeySecret: ${YOUR_ACCESS_KEY_SECRET} fs.oss.jindo.endpoint: ${YOUR_JINODO_ENDPOINT} fs.oss.jindo.buckets: ${YOUR_JINDO_BUCKETS}パラメーターの詳細については、「OSS-HDFSへのデータ書き込み」をご参照ください。
説明Realtime Compute for Apache Flink のフルマネージドストレージ機能を使用する場合は、以下の手順を実行する必要はありません。「Hive カタログの作成」に直接進むことができます。
-
-
OSS コンソールで、ディレクトリを作成し、Hive 設定ファイルと Hadoop 依存関係をターゲットパスにアップロードします。
-
OSS コンソールにログオンします。
-
左側のナビゲーションペインで、[Buckets] をクリックします。
-
ターゲットバケットの名前をクリックします。
-
oss://${bucket}/artifacts/namespaces/${ns}/ パスで、${hms} という名前のディレクトリを作成します。
OSS コンソールでディレクトリを作成する方法の詳細については、「ディレクトリの作成」をご参照ください。以下の表でパスの変数について説明します。
パラメーター
説明
${bucket}
Realtime Compute for Apache Flink で使用するバケットの名前。
${ns}
Hive カタログを使用するワークスペース。
${hms}
作成する予定の Hive カタログと同じ名前を使用することを推奨します。
説明ワークスペースをアクティブ化すると、Realtime Compute for Apache Flink は指定されたバケット内に /artifacts/namespaces/${ns}/ ディレクトリを自動的に作成し、JAR パッケージなどのデータを保存します。OSS コンソールでこのディレクトリが見つからない場合は、開発コンソールの [アーティファクト] ページに移動し、ファイルをアップロードしてディレクトリの作成をトリガーします。
-
oss://${bucket}/artifacts/namespaces/${ns}/${hms} パスで、hive-conf-dir と hadoop-conf-dir の 2 つのディレクトリを作成します。詳細については、「ディレクトリの作成」をご参照ください。
hive-conf-dir と hadoop-conf-dir ディレクトリに以下のファイルを保存します。
-
oss://${bucket}/artifacts/namespaces/${ns}/${hms}/hive-conf-dir/ ディレクトリには、Hive 設定ファイル hive-site.xml を保存します。
-
oss://${bucket}/artifacts/namespaces/${ns}/${hms}/hadoop-conf-dir/ ディレクトリには、core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml を含む Hadoop 設定ファイルを保存します。
ディレクトリを作成すると、[Files] ページでそれらを表示し、OSS URL をコピーできます。
-
-
Hive 設定ファイル (hive-site.xml) を hive-conf-dir ディレクトリにアップロードします。詳細については、「オブジェクトのアップロード」をご参照ください。
-
以下の設定ファイルを hadoop-conf-dir ディレクトリにアップロードします。詳細については、「オブジェクトのアップロード」をご参照ください。
-
core-site.xml
-
hdfs-site.xml
-
mapred-site.xml
-
Hive ジョブで使用される圧縮パッケージなど、その他のファイル。
-
-
Hive カタログの作成
Hive メタデータを設定した後、Hive カタログを作成できます。カタログは、UI または SQL コマンドで作成できます。UI を使用することを推奨します。
UI
-
[Catalogs] ページに移動します。
-
Realtime Compute for Apache Flink コンソールにログインします。対象のワークスペースの [Actions] 列で、[Console] をクリックします。
-
左側のナビゲーションペインで、[Catalogs] をクリックします。
-
-
[Create Catalog] をクリックします。表示されたページで [Hive] を選択し、[Next] をクリックします。
-
パラメーターを設定します。
重要カタログの作成後に設定パラメーターは変更できません。変更を加えるには、既存のカタログをドロップし、新しいカタログを作成する必要があります。
パラメーター
説明
カタログ名
Hive カタログの名前です。
hive-version
Hive メタストアのバージョンです。
Realtime Compute for Apache Flink は、Hive バージョン 2.0.0 から 2.3.9 および 3.1.0 から 3.1.3 をサポートしています。Hive カタログを作成する際、
hive-versionパラメーターを次のように設定します。-
Hive 2.0.x および 2.1.x の場合、このパラメーターを 2.2.0 に設定します。
-
Hive 2.2.x、2.3.x、および 3.1.x の場合、このパラメーターをそれぞれ 2.2.0、2.3.6、および 3.1.2 に設定します。
default-database
デフォルトデータベースの名前です。
hive-conf-dir
-
OSS:Hive 設定ファイルが格納されるディレクトリです。事前に
hive-conf-dirディレクトリを作成する必要があります。詳細については、「Hive メタデータの設定」をご参照ください。 -
フルマネージドストレージ:コンソールの案内に従って対応するファイルをアップロードします。
hadoop-conf-dir
-
OSS:Hadoop 依存関係が格納されるディレクトリです。事前に
hadoop-conf-dirディレクトリを作成する必要があります。詳細については、「Hive メタデータの設定」をご参照ください。 -
フルマネージドストレージ:コンソールの案内に従って対応するファイルをアップロードします。
hive-kerberos
Kerberos 認証を有効にします。登録済みの Kerberos クラスターとプリンシパルを設定する必要があります。Kerberos クラスターを登録していない場合は、「Kerberos 対応 Hive クラスターの登録」をご参照ください。
-
-
[Confirm] をクリックします。
-
左側の [Catalogs] セクションで、作成したカタログを確認します。
SQL
-
[Scripts] ページのエディターに、次のステートメントを入力します。
CREATE CATALOG ${HMS Name} WITH ( 'type' = 'hive', 'default-database' = 'default', 'hive-version' = '<hive-version>', 'hive-conf-dir' = '<hive-conf-dir>', 'hadoop-conf-dir' = '<hadoop-conf-dir>' );パラメーター
説明
${HMS Name}
Hive カタログの名前です。
type
コネクタタイプ。値は
hiveにする必要があります。default-database
デフォルトデータベースの名前です。
hive-version
Hive メタストアのバージョンです。
Realtime Compute for Apache Flink は、Hive バージョン 2.0.0 から 2.3.9 および 3.1.0 から 3.1.3 をサポートしています。Hive カタログを作成する際、
hive-versionパラメーターを次のように設定します。-
Hive 2.0.x および 2.1.x の場合、このパラメーターを 2.2.0 に設定します。
-
Hive 2.2.x、2.3.x、および 3.1.x の場合、このパラメーターをそれぞれ 2.2.0、2.3.6、および 3.1.2 に設定します。
hive-conf-dir
Hive 設定ファイルが格納されるディレクトリです。事前に
hive-conf-dirディレクトリを作成する必要があります。詳細については、「Hive メタデータの設定」をご参照ください。hadoop-conf-dir
Hadoop 依存関係が格納されるディレクトリです。事前に
hadoop-conf-dirディレクトリを作成する必要があります。詳細については、「Hive メタデータの設定」をご参照ください。 -
-
CREATE CATALOG ステートメントを選択し、行番号の左にある [Run] をクリックします。
Hive カタログを設定すると、DDL ステートメントで宣言することなく、そのテーブルをジョブの結果テーブルおよびディメンションテーブルとして参照できます。テーブル名は ${hive-catalog-name}.${hive-db-name}.${hive-table-name} 形式である必要があります。
Hive カタログの使用を停止するには、「Hive カタログのドロップ」をご参照ください。
Hive カタログの使用
Hive テーブルの作成
UI
-
[Catalogs] ページに移動します。
-
Realtime Compute for Apache Flink コンソールにログインします。目的のワークスペースの [Actions] 列で、[Console] をクリックします。
-
ナビゲーションペインで、[Catalogs] をクリックします。
-
-
目的のカタログを見つけ、[Actions] 列の [View] をクリックします。
-
目的のデータベースを見つけ、[Actions] 列の [View] をクリックします。
-
[Create Table] をクリックします。
-
[Built-in] タブで、コネクタを選択し、[Next] をクリックします。
-
CREATE TABLE 文を入力し、パラメーターを設定します。
CREATE TABLE `${catalog_name}`.`${db_name}`.`${table_name}` ( id INT, name STRING ) WITH ( 'connector' = 'hive' ); -
[OK] をクリックします。
SQL コマンド
-
[Scripts] エディターで、次のコマンドを入力します。
CREATE TABLE `${catalog_name}`.`${db_name}`.`${table_name}` ( id INT, name STRING ) WITH ( 'connector' = 'hive' ); -
文を選択し、行番号の左側にある [Run] をクリックします。
例:
-- flinkexporthive カタログの flinkhive データベースに flink_hive_test テーブルを作成します。
CREATE TABLE `flinkexporthive`.`flinkhive`.`flink_hive_test` (
id INT,
name STRING
) WITH (
'connector' = 'hive'
);
Hive テーブルの変更
[Scripts] エディターで、次のコマンドを入力します。
-- Hive テーブルに列を追加します。
ALTER TABLE `${catalog_name}`.`${db_name}`.`${table_name}`
ADD [COLUMN] col_name col_type;
-- Hive テーブルから列をドロップします。
ALTER TABLE `${catalog_name}`.`${db_name}`.`${table_name}`
DROP [COLUMN] col_name;
例:
-- Hive テーブルに color 列を追加します。
ALTER TABLE `flinkexporthive`.`flinkhive`.`flink_hive_test`
ADD COLUMN color STRING;
-- Hive テーブルから color 列をドロップします。
ALTER TABLE `flinkexporthive`.`flinkhive`.`flink_hive_test`
DROP COLUMN color;
Hive テーブルからのデータ読み取り
INSERT INTO ${other_sink_table}
SELECT ...
FROM `${catalog_name}`.`${db_name}`.`${table_name}`;
Hive テーブルへのデータ書き込み
INSERT INTO `${catalog_name}`.`${db_name}`.`${table_name}`
SELECT ...
FROM ${other_source_table};
Hive テーブルのドロップ
UI
-
[Catalogs] ページに移動します。
-
Realtime Compute for Apache Flink コンソールにログインします。目的のワークスペースの [Actions] 列で、[Console] をクリックします。
-
ナビゲーションペインで、[Catalogs] をクリックします。
-
-
[Catalogs] ペインで、目的のカタログとデータベースを展開し、ドロップするテーブルをクリックします。
-
テーブルの詳細ページで、[Delete Table] をクリックします。
-
確認ダイアログボックスで、[OK] をクリックします。
SQL コマンド
[Scripts] エディターで、次のコマンドを入力します。
-- Hive テーブルをドロップします。
DROP TABLE `${catalog_name}`.`${db_name}`.`${table_name}`;
例:
-- Hive テーブルをドロップします。
DROP TABLE `flinkexporthive`.`flinkhive`.`flink_hive_test`;
Hive カタログの表示
-
「カタログ」ページに移動します。
-
ターゲットワークスペースの [アクション] 列で、[コンソール] をクリックします。
-
[カタログ] をクリックします。
-
[カタログ一覧] ページで、[名前] 列と [タイプ] 列を確認します。
説明カタログ内のデータベースとテーブルを表示するには、[アクション] 列の [表示] をクリックします。
Hive カタログの削除
Hive カタログを削除しても、実行中のデプロイメントには影響しません。ただし、オフラインデプロイメントや、一時停止して再開する必要があるデプロイメントには影響します。慎重に操作してください。
UI
-
[カタログリスト] ページに移動します。
-
Realtime Compute for Apache Flink コンソールにログインし、ターゲットワークスペースの [操作] 列で、[コンソール] をクリックします。
-
[カタログ] をクリックします。
-
-
[カタログリスト] ページで、削除するカタログを見つけ、[操作] 列の [削除] をクリックします。
-
確認ダイアログボックスで、[削除] をクリックします。
-
左側の [カタログ] エリアで、カタログが削除されたことを確認します。
SQL コマンド
-
スクリプト エディターで、次のコマンドを入力します。
DROP CATALOG ${HMS Name};このコマンドでは、${HMS Name} は削除する Hive カタログの名前です。
-
コマンドを選択して右クリックし、[実行] を選択します。
-
左側の [カタログ] エリアで、カタログが削除されたことを確認します。