本文主要介绍如何在EMR on ECS环境上访问Paimon虚拟文件系统(PVFS)。
前提条件
已创建EMR集群且版本 >= 5.12.0,组件选择Spark3, Paimon。如有其他版本诉求,请加入钉钉群(106575000021)联系DLF研发人员。
已创建DLF Catalog。
EMR与DLF在同一地域,且添加EMR集群所在的VPC到DLF的白名单中。
授予角色DLF权限
授予AliyunECSInstanceForEMRRole角色RAM权限(EMR产品化集成后可以省略该步骤)。
使用阿里云账号或RAM管理员登录RAM控制台。
单击,查询AliyunECSInstanceForEMRRole角色。
单击操作列的新增授权,进入新增授权页面。
在权限策略中,查询并勾选AliyunDLFFullAccess,单击确认新增授权。

授予AliyunECSInstanceForEMRRole角色DLF权限。
登录数据湖构建控制台。
在Catalog列表页面,单击Catalog名称,进入Catalog详情页。
单击权限页签,单击授权。
在授权页面,配置以下信息,单击确定。
用户/角色:选择RAM用户/RAM角色。
选择授权对象:在下拉列表中选择AliyunECSInstanceForEMRRole。
说明如果在下拉列表中未找到AliyunECSInstanceForEMRRole,可以在用户管理页面单击同步。
预置权限类型:选择Data Editor。
升级集群Paimon依赖
请升级以下依赖升级为1.3及以上版本:
根据Spark版本选取对应paimon-spark依赖:
导入相关依赖。
将四个依赖包上传至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;