Hudiは、Hadoop互換ファイルシステムのデータの更新と削除を可能にするデータレイクフレームワークです。 Hudiでは、変更されたデータを使用することもできます。 E-MapReduce(EMR)Trinoは、関連するJARパッケージを独立したHudiコンポーネントに統合します。 EMR Hudiコネクタを使用して、Copy on WriteテーブルとMerge on Readテーブルのデータをクエリできます。
背景情報
EMR Hudiの詳細については、「Hudi」をご参照ください。
前提条件
DataLakeクラスターまたはHadoopクラスターが作成され、Prestoサービスが選択されています。 詳細については、「クラスターの作成」をご参照ください。
制限事項
Hudiコネクタは、すべてのバージョンのDataLakeクラスターと、EMR V3.38.0以降のバージョンのHadoopクラスターでのみサポートされています。
Copy on Writeテーブルの場合、Hudiコネクタはテーブルのスナップショットのみをクエリできます。
Merge on Readテーブルの場合、Hudiコネクタは、特定のシナリオでのみ、テーブルのスナップショットと読み取り最適化結果をクエリできます。 実稼働環境でクエリにHudiコネクタを使用する場合は注意してください。
増分クエリはサポートされていません。
Hudiコネクタの構成
Hudiコネクタの構成を変更します。 詳細については、「組み込みコネクタの構成の変更」をご参照ください。
Hiveメタデータの使用
Hudiコネクタのデフォルト構成を表示するには、次の手順を実行します。EMRコンソールで、Trinoサービスページの [構成] タブに移動します。 [構成] タブで、[hudi.properties] タブをクリックします。 ビジネス要件に基づいて、次の表に示すパラメーターを変更します。
パラメーター | 説明 |
hive.metastore.uri | Thriftプロトコルに基づいてHiveメタストアにアクセスするために使用されるUniform Resource Identifier(URI)。
|
hive.config.resources | Hadoop Distributed File System(HDFS)構成ファイル。 構成ファイルの名前はコンマ(,)で区切ります。 Trinoが実行されているすべてのホストに構成ファイルが存在することを確認する必要があります。 重要 HDFSにアクセスするには、このパラメーターを構成する必要があります。
|
hive.hdfs.impersonation.enabled | ユーザーの偽装を有効にするかどうかを指定します。 有効な値:
|
DLF統合メタデータの使用
データクラスターの [メタデータ] パラメーターが [DLF統合メタデータ] に設定されている場合は、Hive、Iceberg、Hudiなどのコネクタを構成する必要があります。 この場合、データクエリはデータクラスターに依存しなくなります。 ビジネス要件に基づいて hive.metastore.uri パラメーターを構成できます。 Trinoは、同じアカウント内のData Lake Formation(DLF)メタデータに直接アクセスできます。
| パラメーター | 説明 | 備考 |
| hive.metastore | Hiveメタストアのタイプ。 | このパラメーターはDLFに固定されています。 |
| dlf.catalog.region | Data Lake Formation(DLF)がアクティブ化されているリージョンのID。 | 詳細については、「サポートされているリージョンとエンドポイント」をご参照ください。 説明 このパラメーターの値が、dlf.catalog.endpoint パラメーターで指定されたエンドポイントと一致していることを確認してください。 |
| dlf.catalog.endpoint | DLFサービスのエンドポイント。 | 詳細については、「サポートされているリージョンとエンドポイント」をご参照ください。 dlf.catalog.endpoint パラメーターをDLFのVPCエンドポイントに設定することをお勧めします。 たとえば、中国(杭州)リージョンを選択した場合は、dlf.catalog.endpoint パラメーターを dlf-vpc.cn-hangzhou.aliyuncs.com に設定します。 説明 DLFのパブリックエンドポイントを使用することもできます。 中国(杭州)リージョンを選択した場合は、dlf.catalog.endpoint パラメーターを dlf.cn-hangzhou.aliyuncs.com に設定します。 |
| dlf.catalog.akMode | DLFサービスのAccessKeyモード。 | このパラメーターを EMR_AUTO に設定することをお勧めします。 |
| dlf.catalog.proxyMode | DLFサービスのプロキシモード。 | このパラメーターを DLF_ONLY に設定することをお勧めします。 |
| dlf.catalog.uid | Alibaba CloudアカウントのID。 | Alibaba CloudアカウントのIDを取得するには、[セキュリティ設定] ページに移動します。 ![]() |
例
Hudiテーブルは、Hiveの外部テーブルとして機能します。 Hiveコネクタを使用して、Hudiテーブルのデータをクエリできます。 Hudiテーブルの作成方法とHudiテーブルからHiveテーブルへのデータの同期方法の詳細については、「Hudiと Spark SQLの統合」および「基本的な使い方」をご参照ください。
テーブルを作成し、テーブル内のデータをクエリする例:
SSHモードでクラスターにログオンします。 詳細については、「クラスターへのログオン」をご参照ください。
次のコマンドを実行して、Spark SQL CLIを起動します。
spark-sql --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \ --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension'出力に次の情報が含まれている場合、Spark SQL CLIが起動されます。
spark-sql>次のコマンドを実行して、emr_testという名前のテストテーブルを作成します。
create table if not exists emr_test( id bigint, name string, price double ) using hudi options ( type = 'mor', primaryKey = 'id,name' );次のコマンドを実行して、テストデータをemr_testテーブルに挿入します。
insert into emr_test select 1, 'a2', 10; insert into emr_test select 1, 'a1', 10; insert into emr_test select 2, 'a1', 20;説明EMR Spark SQLは、HudiテーブルのデータをHiveメタストアまたはDLFに自動的に同期します。
Trinoクライアントでデータをクエリします。
次のコマンドを実行して、Trino CLIを開きます。
trino --server master-1-1:9090 --catalog hudi --schema default --user hadoop次のコマンドを実行して、emr_testテーブルのデータをクエリします。
select * from emr_test;次の出力が返されます。
_hoodie_commit_time | _hoodie_commit_seqno | _hoodie_record_key | _hoodie_partition_path | _hoodie_file_name | id | name | price ---------------------+----------------------+--------------------+------------------------+-------------------------------------------------------------------------+----+------+------- 20211025145616 | 20211025145616_0_1 | id:1,name:a2 | | ac4ec1e6-528d-4189-bde6-d09e137f63f6-0_0-20-1604_20211025145616.parquet | 1 | a2 | 10.0 20211025145629 | 20211025145629_0_1 | id:1,name:a1 | | ac4ec1e6-528d-4189-bde6-d09e137f63f6-0_0-48-3211_20211025145629.parquet | 1 | a1 | 10.0 20211025145640 | 20211025145640_0_2 | id:2,name:a1 | | ac4ec1e6-528d-4189-bde6-d09e137f63f6-0_0-76-4818_20211025145640.parquet | 2 | a1 | 20.0 (3 rows)
Spark SQL CLIでデータを更新します。
次のコマンドを実行して、Spark SQL CLIを起動します。
spark-sql --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \ --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension'出力に次の情報が含まれている場合、Spark SQL CLIが起動されます。
spark-sql>次のコマンドを実行して、IDが 2 のデータエントリの price の値を更新します。
update emr_test set price = price + 20 where id = 2;
更新が完了したら、Trinoクライアントでデータをクエリします。
次のコマンドを実行して、Trino CLIを開きます。
trino --server master-1-1:9090 --catalog hudi --schema default --user hadoop次のコマンドを実行して、emr_testテーブルのデータをクエリします。
select * from emr_test;次の出力が返されます。
_hoodie_commit_time | _hoodie_commit_seqno | _hoodie_record_key | _hoodie_partition_path | _hoodie_file_name | id | name | price ---------------------+----------------------+--------------------+------------------------+-------------------------------------------------------------------------+----+------+------- 20211025145616 | 20211025145616_0_1 | id:1,name:a2 | | ac4ec1e6-528d-4189-bde6-d09e137f63f6-0_0-20-1604_20211025145616.parquet | 1 | a2 | 10.0 20211025145629 | 20211025145629_0_1 | id:1,name:a1 | | ac4ec1e6-528d-4189-bde6-d09e137f63f6-0_0-48-3211_20211025145629.parquet | 1 | a1 | 10.0 20211025145640 | 20211025145640_0_2 | id:2,name:a1 | | ac4ec1e6-528d-4189-bde6-d09e137f63f6-0_0-76-4818_20211025145640.parquet | 2 | a1 | 40.0 (3 rows)
