本文主要介紹如何在EMR on ECS環境上訪問Paimon虛擬檔案系統(PVFS)。
前提條件
-
已建立EMR叢集且版本 >= 5.12.0,組件選擇Spark3, Paimon。如有其他版本訴求,請加入DingTalk群(106575000021)聯絡DLF研發人員。
-
已建立DLF Catalog。
-
EMR與DLF在同一地區,且添加EMR叢集所在的VPC到DLF的白名單中。
授予角色DLF許可權
-
授予AliyunECSInstanceForEMRRole角色RAM許可權(EMR產品化整合後可以省略該步驟)。
-
使用阿里雲帳號或Resource Access Management員登入RAM控制台。
-
單擊,查詢AliyunECSInstanceForEMRRole角色。
-
單擊操作列的新增授權,進入新增授權頁面。
-
在權限原則中,查詢並勾選AliyunDLFFullAccess,單擊確認新增授權。
-
-
授予AliyunECSInstanceForEMRRole角色DLF許可權。
-
登入資料湖構建控制台。
-
在Catalog列表頁面,單擊Catalog名稱,進入Catalog詳情頁。
-
單擊許可權頁簽,單擊授權。
-
在授權頁面,配置以下資訊,單擊確定。
-
使用者/角色:選擇RAM使用者/RAM角色。
-
選擇授權對象:在下拉式清單中選擇AliyunECSInstanceForEMRRole。
說明如果在下拉式清單中未找到AliyunECSInstanceForEMRRole,可以在使用者管理頁面單擊同步。
-
預置權限類別型:選擇Data Editor。
-
-
升級叢集Paimon依賴
-
請升級以下依賴為1.3及以上版本:
-
根據Spark版本選取對應paimon-spark依賴升級為1.3及以上版本:
請在Maven倉庫選擇對應的依賴,如Spark3.2版本,請選擇
paimon-spark-3.2-1.3.0及以上依賴。
-
匯入相關依賴。
將四個依賴包上傳至OSS,並設定檔案讀寫權限為公用讀取,請參見簡單上傳。
-
編寫指令碼上傳至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。
-
-
通過EMR叢集引導指令碼執行。詳情請參見手動執行指令碼。
-
在EMR叢集中,選擇頁簽,單擊建立並執行。
-
在彈出的對話方塊中,配置以下資訊,單擊確定。
-
名稱:自訂指令碼名稱。
-
指令碼位置:選擇上傳到OSS的升級指令碼。指令碼路徑格式必須是oss://**/*.sh格式。
-
執行範圍:選擇叢集。
-
-
-
執行完成後,需重啟Spark、Hive服務以生效。
更新EMR叢集配置
-
在EMR叢集控制台,選擇。
-
在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;