本文介紹基於Paimon的Hologres Serverless資料湖解決方案,適用於儲存在OSS中的Paimon湖資料靈活加速的情境,無需預留資源,可按需使用,並按使用量付費。該方案提供的靈活、可擴充的資料湖架構,便於您更好地管理和利用資料,提升資料驅動決策和業務創新的能力。
背景資訊
Apache Paimon是一種流批統一的湖儲存格式,支援高吞吐的寫入和低延後查詢。目前阿里雲巨量資料平台常見的計算引擎(例如Flink、Hologres、MaxCompute、EMR Spark)都與Paimon有著較為完善的整合度。您可以藉助Apache Paimon快速地在雲端OSS上構建自己的資料湖儲存服務,並接入上述計算引擎實現資料湖的分析,詳情請參見Apache Paimon。
Hologres共用叢集是針對MaxCompute和OSS資料湖外部表格設計的Serverless線上查詢加速服務,基於Hologres儲存計算分離的雲原生架構,以共用叢集資源的形式,加速分析儲存在OSS中的湖資料,按需使用,按SQL掃描的資料量付費,詳情請參見共用叢集概述。
整體架構

前提條件
-
已購買Hologres共用叢集執行個體,購買方式請參見購買Hologres執行個體。
-
已開通DLF中繼資料構建服務,詳情請參見DLF快速入門。
-
(可選)如果您需要使用DLF自訂資料目錄功能(catalog),請先在DLF中建立資料目錄,該資料目錄將在後續建立Foreign Server時被使用,詳情請參見建立資料目錄。
-
已開通OSS資料湖儲存。
-
已開通OSS-HDFS服務,詳情請參見開通OSS-HDFS服務。
Hologres獨享執行個體同樣支援讀取Paimon和其他湖格式,實際使用方式與共用叢集執行個體相同,本文僅以共用叢集執行個體為例。
注意事項
-
僅Hologres V2.1.6及以上版本支援查詢Paimon資料湖的資料。
-
Hologres共用叢集僅支援讀取OSS資料湖資料,不支援匯入OSS資料,如需匯入OSS資料至Hologres內部表,請使用獨享執行個體。
操作步驟
-
購買EMR新版資料湖執行個體。
登入EMR on ECS控制台,建立EMR叢集,具體操作請參見建立叢集。重點參數配置如下:
配置項
描述
業務情境
選擇資料湖。
可選服務
必選服務為:Spark、Hive和Paimon,其餘服務根據需要自行選擇。
中繼資料
選擇DLF統一中繼資料。
DLF資料目錄
-
如果您需要使用DLF自訂資料目錄,請選擇已建立的catalog,例如paimon_catalog。具體操作請參見建立資料目錄。
-
您也可以選擇預設的default目錄。使用DLF default catalog,在Hologres共用叢集中建立Foreign Server時,無需指定
dlf_catalog參數。
叢集儲存根路徑
選擇一個開通了OSS-HDFS服務的Bucket路徑。
-
-
構建資料來源。
以TPC-H 10GB資料為例,使用EMR Hive構建textfile格式的資料來源,構建方式請參考使用EMR Spark構建資料。
重要產生資料時,需將
./dbgen -vf -s 100命令替換為./dbgen -vf -s 10。 -
使用Spark建立Paimon表。
-
登入Spark-SQL。
spark-sql --conf spark.sql.catalog.paimon=org.apache.paimon.spark.SparkCatalog --conf spark.sql.catalog.paimon.metastore=dlf -
建立資料庫。
-- 建立資料庫 CREATE DATABASE paimon_db location 'oss://${oss-hdfs-bucket}/tpch_10G/paimon_tpch_10g/';${oss-hdfs-bucket}:為上述已開通OSS-HDFS的Bucket名稱。 -
建立Paimon表並匯入上述構建資料來源中準備的textfile資料。
-- 切換至剛建立的資料庫 use paimon_db; -- 建立表並匯入資料 CREATE TABLE nation_paimon TBLPROPERTIES ( 'primary-key' = 'N_NATIONKEY' ) AS SELECT * from ${source}.nation_textfile; CREATE TABLE region_paimon TBLPROPERTIES ( 'primary-key' = 'R_REGIONKEY' ) AS SELECT * FROM ${source}.region_textfile; CREATE TABLE supplier_paimon TBLPROPERTIES ( 'primary-key' = 'S_SUPPKEY' ) AS SELECT * FROM ${source}.supplier_textfile; CREATE TABLE customer_paimon partitioned BY (c_mktsegment) TBLPROPERTIES ( 'primary-key' = 'C_CUSTKEY' ) AS SELECT * FROM ${source}.customer_textfile; CREATE TABLE part_paimon partitioned BY (p_brand) TBLPROPERTIES ( 'primary-key' = 'P_PARTKEY' ) AS SELECT * FROM ${source}.part_textfile; CREATE TABLE partsupp_paimon TBLPROPERTIES ( 'primary-key' = 'PS_PARTKEY,PS_SUPPKEY' ) AS SELECT * FROM ${source}.partsupp_textfile; CREATE TABLE orders_paimon partitioned BY (o_orderdate) TBLPROPERTIES ( 'primary-key' = 'O_ORDERKEY' ) AS SELECT * FROM ${source}.orders_textfile; CREATE TABLE lineitem_paimon partitioned BY (l_shipdate) TBLPROPERTIES ( 'primary-key' = 'L_ORDERKEY,L_LINENUMBER' ) AS SELECT * FROM ${source}.lineitem_textfile;${source}:為Hive中*_textfile表所在的資料庫名稱。
-
-
在Hologres共用叢集中建立Foreign Server。
說明建立EMR新版資料湖執行個體時:
-
如果DLF資料目錄選擇的是自訂資料目錄,下述
dlf_catalog參數值需填寫該自訂目錄。 -
如果DLF資料目錄選擇的是default預設目錄,執行時則無需配置
dlf_catalog參數,直接刪除該參數即可。
-- 建立Foreign Sever CREATE SERVER IF NOT EXISTS dlf_server FOREIGN data wrapper dlf_fdw options ( dlf_catalog 'paimon_catalog', dlf_endpoint 'dlf-share.cn-shanghai.aliyuncs.com', oss_endpoint 'cn-shanghai.oss-dls.aliyuncs.com' ); -
-
在Hologres共用叢集中建立Paimon表的外部表格。
IMPORT FOREIGN SCHEMA paimon_db LIMIT TO ( lineitem_paimon ) FROM SERVER dlf_server INTO public options (if_table_exist 'update'); -
查詢資料。
以Q1為例,SQL語句如下:
SELECT l_returnflag, l_linestatus, SUM(l_quantity) AS sum_qty, SUM(l_extendedprice) AS sum_base_price, SUM(l_extendedprice * (1 - l_discount)) AS sum_disc_price, SUM(l_extendedprice * (1 - l_discount) * (1 + l_tax)) AS sum_charge, AVG(l_quantity) AS avg_qty, AVG(l_extendedprice) AS avg_price, AVG(l_discount) AS avg_disc, COUNT(*) AS count_order FROM lineitem_paimon WHERE l_shipdate <= date '1998-12-01' - interval '120' DAY GROUP BY l_returnflag, l_linestatus ORDER BY l_returnflag, l_linestatus;說明其餘21條SQL詳情請參見TPC-H 22條查詢語句。