全部產品
Search
文件中心

Data Lake Formation:EMR on ECS使用檔案方式訪問DLF資料

更新時間:Jun 08, 2026

本文主要介紹如何在EMR on ECS環境上訪問Paimon虛擬檔案系統(PVFS)。

前提條件

  • 已建立EMR叢集且版本 >= 5.12.0,組件選擇Spark3, Paimon。如有其他版本訴求,請加入DingTalk群(106575000021)聯絡DLF研發人員。

  • 已建立DLF Catalog

  • EMR與DLF在同一地區,且添加EMR叢集所在的VPC到DLF的白名單中。

授予角色DLF許可權

  1. 授予AliyunECSInstanceForEMRRole角色RAM許可權(EMR產品化整合後可以省略該步驟)。

    1. 使用阿里雲帳號或Resource Access Management員登入RAM控制台

    2. 單擊身份管理 > 角色,查詢AliyunECSInstanceForEMRRole角色。

    3. 單擊操作列的新增授權,進入新增授權頁面。

    4. 權限原則中,查詢並勾選AliyunDLFFullAccess,單擊確認新增授權

  2. 授予AliyunECSInstanceForEMRRole角色DLF許可權。

    1. 登入資料湖構建控制台

    2. Catalog列表頁面,單擊Catalog名稱,進入Catalog詳情頁。

    3. 單擊許可權頁簽,單擊授權

    4. 在授權頁面,配置以下資訊,單擊確定

      • 使用者/角色:選擇RAM使用者/RAM角色

      • 選擇授權對象:在下拉式清單中選擇AliyunECSInstanceForEMRRole

        說明

        如果在下拉式清單中未找到AliyunECSInstanceForEMRRole,可以在使用者管理頁面單擊同步。

      • 預置權限類別型:選擇Data Editor。

升級叢集Paimon依賴

  • 請升級以下依賴為1.3及以上版本:

  • 根據Spark版本選取對應paimon-spark依賴升級為1.3及以上版本:

    請在Maven倉庫選擇對應的依賴,如Spark3.2版本,請選擇paimon-spark-3.2-1.3.0及以上依賴。

  1. 匯入相關依賴。

    將四個依賴包上傳至OSS,並設定檔案讀寫權限為公用讀取,請參見簡單上傳

  2. 編寫指令碼上傳至OSS。

    #!/bin/bash
    echo 'prepare paimon-vfs in hadoop classpath'
    cd /opt/apps/JINDOSDK/jindosdk-current/lib
    rm -rf paimon-*
    wget ${paimon_vfs_jar}
    wget ${paimon_jindo_jar}
    wget ${paimon_bundle_jar}
    echo 'prepare paimon-spark in spark classpath'
    rm -rf /opt/apps/PAIMON/paimon-dlf
    rm -rf /opt/apps/PAIMON/paimon-dlf.tar.gz.*
    mkdir -p /opt/apps/PAIMON/paimon-dlf/lib/spark3
    cd /opt/apps/PAIMON/paimon-dlf/lib/spark3
    wget ${paimon_spark_jar}
    rm -f /opt/apps/PAIMON/paimon-current
    ln -sf /opt/apps/PAIMON/paimon-dlf /opt/apps/PAIMON/paimon-current
    重要

    指令碼中的預留位置 ${paimon_vfs_jar}${paimon_jindo_jar}${paimon_bundle_jar}${paimon_spark_jar}需替換為對應的OSS可下載路徑。EMR on ECS預設開通的叢集不具備訪問公網的能力。樣本如下:

    • 內網:https://{bucket}.oss-cn-hangzhou-internal.aliyuncs.com/jars/paimon-jindo-1.3.0.jar

    • 公網:https://{bucket}.oss-cn-hangzhou.aliyuncs.com/jars/paimon-jindo-1.3.0.jar

  3. 通過EMR叢集引導指令碼執行。詳情請參見手動執行指令碼

    1. 在EMR叢集中,選擇指令碼操作 > 手動執行頁簽,單擊建立並執行

    2. 在彈出的對話方塊中,配置以下資訊,單擊確定

      • 名稱:自訂指令碼名稱。

      • 指令碼位置:選擇上傳到OSS的升級指令碼。指令碼路徑格式必須是oss://**/*.sh格式。

      • 執行範圍:選擇叢集

  4. 執行完成後,需重啟Spark、Hive服務以生效。

更新EMR叢集配置

  1. 在EMR叢集控制台,選擇叢集服務 > Hadoop-Common > 配置

  2. 在core-site.xml下,單擊新增配置項。

    Key

    Value

    fs.AbstractFileSystem.pvfs.impl

    org.apache.paimon.vfs.hadoop.Pvfs

    fs.pvfs.impl

    org.apache.paimon.vfs.hadoop.PaimonVirtualFileSystem

    fs.pvfs.uri

    cn-hangzhou-vpc.dlf.aliyuncs.com

    說明

    根據實際地區進行替換,詳情請參見服務存取點

    fs.pvfs.token.provider

    dlf

    fs.pvfs.dlf.token-loader

    ecs

訪問DLF中的檔案

已建立Object Table對象表,通過pvfs方式訪問該對象表下的資料。

通過Hadoop Shell訪問

通過Hadoop Shell上傳一個csv檔案到object_table下

#上傳csv檔案
echo "James,Sales,3000" >> employee.csv
hadoop fs -put employee.csv pvfs://catalog_name/default/object_table/
# 查詢object_table表下的所有檔案
hadoop fs -ls pvfs://catalog_name/default/object_table/
# 查看csv檔案
hadoop fs -cat pvfs://catalog_name/default/object_table/employee.csv

通過Hive訪問

可以通過Hive來查詢Object表下的csv檔案。

# 串連Hive
beeline -u jdbc:hive2://localhost:10000
# 建立暫存資料表映射csv檔案
CREATE TEMPORARY TABLE temp_table (
    employee_name STRING,
    department STRING,
    salary INT
) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ',' 
STORED AS TEXTFILE 
LOCATION 'pvfs://catalog_name/default/object_table/';
# 查詢暫存資料表
SELECT * FROM temp_table;

通過Spark訪問

可以通過Spark來查詢Object表下的csv檔案。

# 啟動 spark-sql
spark-sql
# 建立暫存資料表映射csv檔案
CREATE TEMPORARY VIEW temp_table
USING csv
OPTIONS (
path 'pvfs://catalog_name/default/object_table',
inferSchema 'false',
schema 'employee_name STRING, department STRING, salary INT'
);
# 查詢暫存資料表
SELECT * FROM temp_table;