本文介紹基于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 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條查詢語句。