本記事では、Realtime Compute for Apache Flink と EMR Serverless Spark を使用して Paimon データレイク分析パイプラインを構築する方法を説明します。このプロセスには、Object Storage Service (OSS) へのデータ書き込み、インタラクティブクエリの実行、およびオフラインデータのコンパクションが含まれます。EMR Serverless Spark は Paimon と完全な互換性があります。組み込みの Data Lake Formation (DLF) メタストアを介して、Realtime Compute for Apache Flink などの他のクラウド製品と相互運用し、完全なストリームバッチ統一ソリューションを提供します。リアルタイム分析や本番スケジューリングにおけるさまざまな要件に対応し、柔軟なジョブ実行とパラメーター設定をサポートします。
背景情報
Realtime Compute for Apache Flink
Alibaba Cloud Realtime Compute for Apache Flink は、Apache Flink のためのフルマネージドのサーバーレスクラウドサービスです。開発、運用、保守のためのすぐに使えるワンストッププラットフォームを提供し、柔軟な課金体系を提供します。このサービスには、ジョブ開発、データデバッグ、ジョブの実行と監視、自動チューニング、インテリジェント診断などの完全なライフサイクル機能が含まれています。詳細については、「Realtime Compute for Apache Flink とは」をご参照ください。
Apache Paimon
Apache Paimon は、Flink と Spark を使用してストリームバッチ統一のためのリアルタイムレイクハウスアーキテクチャを実現する、統一データレイクストレージフォーマットです。Paimon は、レイクハウスフォーマットと Log-structured Merge-tree (LSM) テクノロジーを革新的に組み合わせ、データレイクにリアルタイムのストリーミング更新と完全なストリーム処理機能を提供します。詳細については、「Apache Paimon」をご参照ください。
手順
ステップ 1:Paimon カタログの作成
Paimon カタログを使用すると、同じウェアハウスディレクトリ内のすべての Paimon テーブルを管理し、他の Alibaba Cloud 製品に接続できます。Paimon カタログの作成方法と使用方法の詳細については、「Paimon カタログの管理」をご参照ください。
-
対象のワークスペースの操作列で、コンソールをクリックします。
-
Paimon カタログを作成します。
UI を使用して DLF タイプの Paimon カタログを追加します。AccessKey 情報を手動で入力する必要はありません。詳細な手順については、「Paimon カタログの管理」をご参照ください。
-
Paimon テーブルを作成します。
Script エディターで次のコマンドを入力し、コードを選択して 実行 をクリックします。
CREATE TABLE IF NOT EXISTS `paimon`.`test_paimon_db`.`test_append_tbl` ( id STRING, data STRING, category INT, ts STRING, dt STRING, hh STRING ) PARTITIONED BY (dt, hh) WITH ( 'write-only' = 'true' ); -
ストリームジョブを作成します。
-
新しいジョブを作成します。
-
左側のナビゲーションペインで、Development > [ETL] を選択します。
-
新しいストリームジョブを作成します。[新規空白ストリームドラフト] ダイアログボックスで、ジョブパラメーターを設定します。
パラメーター
説明
[Name]
ジョブの名前。
説明ジョブ名は現在のプロジェクト内で一意である必要があります。
[Engine Version]
現在のジョブの Flink エンジンバージョン。エンジンバージョン番号、バージョンの互換性、ライフサイクルマイルストーンの詳細については、「エンジンバージョン」をご参照ください。
-
create をクリックします。
-
-
コードを記述します。
新しいストリームドラフトで、datagen コネクターを使用してデータを継続的に生成し、Paimon テーブルに書き込むために、次のコードを入力します。
CREATE TEMPORARY TABLE datagen ( id string, data string, category int ) WITH ( 'connector' = 'datagen', 'rows-per-second' = '100', 'fields.category.kind' = 'random', 'fields.category.min' = '1', 'fields.category.max' = '10' ); INSERT INTO `paimon`.`test_paimon_db`.`test_append_tbl` SELECT id, data, category, cast(LOCALTIMESTAMP as string) as ts, cast(CURRENT_DATE as string) as dt, cast(hour(LOCALTIMESTAMP) as string) as hh FROM datagen; -
ジョブを本番環境に公開するには、[デプロイ] をクリックします。
-
[デプロイメント] ページで、ジョブを開始します。詳細については、「ジョブを開始する」をご参照ください。
-
ステップ 2:SQL セッションの作成
SQL セッションは、SQL の開発とクエリをサポートします。セッションの詳細については、「セッションマネージャー」をご参照ください。
-
[セッション] ページに移動します。
-
EMR コンソールにログインします。
-
左側のナビゲーションウィンドウで、[EMR Serverless] > [Spark] を選択します。
-
[Spark] ページで、対象のワークスペースの名前をクリックします。
-
EMR Serverless Spark ページで、左側のナビゲーションウィンドウの Sessions をクリックします。
-
-
Serverless Spark ワークスペースのデータカタログに、ステップ 1 で作成した DLF カタログを追加します。
-
SQL セッションを作成します。
-
SQL Session タブで、Connect to SQL Session をクリックします。
-
「SQL セッションの作成」ページで、次のパラメーターを設定し、他のパラメーターはデフォルト値のままにして、create をクリックします。
パラメーター
説明
[Name]
SQL セッションの任意の名前。例:paimon_compute。
-
「操作」列で、START をクリックします。
-
ステップ 3:インタラクティブクエリまたはタスクオーケストレーションの実行
EMR Serverless Spark は、さまざまなニーズに合わせて、インタラクティブクエリとタスクオーケストレーションの 2 つの操作モードを提供します。インタラクティブクエリモードは迅速なクエリとデバッグに最適で、タスクオーケストレーションモードはジョブの開発、発行、および保守の完全なライフサイクルをサポートします。
データが書き込まれている間、EMR Serverless Spark を使用して Paimon テーブルに対していつでもインタラクティブクエリを実行し、リアルタイムのデータ状態を確認したり、迅速な分析を実行したりできます。さらに、開発したジョブを発行し、ワークフローを作成してさまざまなタスクをオーケストレーションできます。スケジューリングポリシーを設定してタスクを自動化し、効率的で自動化されたデータ処理と分析を実現できます。
インタラクティブクエリ
-
SparkSQL ジョブを作成します。
-
EMR Serverless Spark ページで、左側のナビゲーションペインでDevelopment をクリックします。
-
Development タブで、Create をクリックします。
-
表示されたダイアログボックスで、Name (たとえば、paimon_compact) を入力し、Typeを [SparkSQL] に設定してから、OK をクリックします。
-
右上隅で、データカタログ、データベース、および前のステップで開始した SQL セッションを選択します。
-
新しいジョブエディターに SQL 文を入力します。
-
例 1:
test_append_tblテーブルから最初の 10 行をクエリする。SELECT * FROM paimon.test_paimon_db.test_append_tbl limit 10;説明SQL 文のカタログ名、データベース名、テーブル名を実際の環境に合わせて置き換えてください。
結果には、id、data、category、ts、dt、hh フィールドが含まれます。id と data 列はハッシュ文字列、category は数値、ts は完全なタイムスタンプ (例:
2024-06-24 19:00:00.446)、dt は日付、hh は時間です。 -
例 2:
test_append_tblテーブルで特定の基準を満たす行の数をカウントする。SELECT COUNT(*) FROM paimon.test_paimon_db.test_append_tbl WHERE dt = '2024-06-24' AND hh = '19';説明SQL 文のカタログ名、データベース名、テーブル名、およびパーティション条件 (dt と hh) を実際の環境に合わせて置き換えてください。
クエリは、
count(1)の値が360000である単一の行を返します。
-
-
-
ジョブを実行して発行します。
-
実行 をクリックします。
結果は Execution Results タブで確認できます。エラーが発生した場合は、Execution Issues タブを確認してください。
-
ジョブが期待どおりに実行されることを確認したら、右上隅のPublishをクリックします。
-
Publish ダイアログボックスで、リリースノート を入力してから OK をクリックできます。
-
タスクオーケストレーション
-
コンパクション前のファイル情報を確認します。
Development ページで、SparkSQL ジョブを作成して Paimon $files システムテーブルにクエリを実行し、コンパクション前のファイルに関するデータを迅速に取得します。 詳細については、「SparkSQL ジョブを開発する」をご参照ください。
SELECT file_path, record_count, file_size_in_bytes FROM paimon.test_paimon_db.`test_append_tbl$files`;説明SQL 文のカタログ名とデータベース名を実際の環境に合わせて置き換えてください。
コンパクション前、クエリ結果は 14 個の ORC データファイルを示します。ほとんどのファイルの
record_countは 18,100 (一部は 18,200、最初のファイルは 8,700) で、file_size_in_bytesの値は約 1,752,386 から 3,664,183 の範囲です。 -
作成した SparkSQL ジョブ (paimon_compact) に、次のコンパクション SQL を入力し、ジョブを発行します。
CALL paimon.sys.compact ( table => 'test_paimon_db.test_append_tbl', partitions => 'dt=\"2024-06-24\",hh=\"19\"', order_strategy => 'zorder', order_by => 'category' ); -
ワークフローを作成します。
-
EMR Serverless Spark ページで、左側のナビゲーションペインの タスクオーケストレーション をクリックします。
-
タスクオーケストレーション ページで、Create Workflow をクリックします。
-
Create Workflow パネルで、Name (たとえば paimon_workflow_task) を入力し、次へ をクリックします。
必要に応じてOther Settingsセクションのパラメーターを設定します。パラメーターの詳細については、「ワークフローの管理」をご参照ください。
-
新しいノードキャンバスで、Add Node をクリックします。
-
Path ドロップダウンリストから、公開済みの SparkSQL ジョブ (paimon_compact) を選択し、Spark Configuration パラメーターを入力してから、Save をクリックします。
パラメーター
説明
[Name]
SQL セッションの任意の名前。例:paimon_compute。
-
新しいノードキャンバスで、Publish Workflow をクリックし、OK をクリックします。
-
-
ワークフローを実行します。
-
タスクオーケストレーション ページで、新しいワークフロー (例: paimon_workflow_task) の Name をクリックします。
-
Workflow Runs ページで、Manually Run をクリックします。
-
Run Workflow ダイアログボックスで、OK をクリックします。
-
-
コンパクションの結果を確認します。
ワークフローが正常に実行された後、同じ SQL クエリを再度実行して、コンパクション前後のファイルの数、レコード数、サイズを比較します。
SELECT file_path, record_count, file_size_in_bytes FROM paimon.test_paimon_db.`test_append_tbl$files`;コンパクション後、クエリ結果はテーブルに残っている ORC ファイルが 3 つだけであることを示します:
data-c971b2a7-…-0.orc(record_count 144,591, file_size_in_bytes 29,122,164)、data-17d0b4c6-…-0.orc(record_count 179,571, file_size_in_bytes 36,159,348)、およびdata-a8f27c6b-…-0.orc(record_count 35,838, file_size_in_bytes 7,243,404)。これは、スモールファイルが正常にマージされたことを示しています。