EMR on ECS使用文件方式访问DLF数据

本文主要介绍如何在EMR on ECS环境上访问Paimon虚拟文件系统(PVFS)。

前提条件

  • 已创建EMR集群且版本 >= 5.12.0,组件选择Spark3, Paimon。如有其他版本诉求,请加入钉钉群(106575000021)联系DLF研发人员。

  • 已创建DLF Catalog

  • EMRDLF在同一地域,且添加EMR集群所在的VPCDLF的白名单中。

授予角色DLF权限

  1. 授予AliyunECSInstanceForEMRRole角色RAM权限(EMR产品化集成后可以省略该步骤)。

    1. 使用阿里云账号或RAM管理员登录RAM控制台

    2. 单击身份管理 > 角色,查询AliyunECSInstanceForEMRRole角色。

    3. 单击操作列的新增授权,进入新增授权页面。

    4. 权限策略中,查询并勾选AliyunDLFFullAccess,单击确认新增授权

    image

  2. 授予AliyunECSInstanceForEMRRole角色DLF权限。

    1. 登录数据湖构建控制台

    2. Catalog列表页面,单击Catalog名称,进入Catalog详情页。

    3. 单击权限页签,单击授权

    4. 在授权页面,配置以下信息,单击确定

      • 用户/角色:选择RAM用户/RAM角色

      • 选择授权对象:在下拉列表中选择AliyunECSInstanceForEMRRole

        说明

        如果在下拉列表中未找到AliyunECSInstanceForEMRRole,可以在用户管理页面单击同步。

      • 预置权限类型:选择Data Editor。

升级集群Paimon依赖

  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;