关于后端:模拟IDC-spark读写MaxCompute实践

2次阅读

共计 5599 个字符,预计需要花费 14 分钟才能阅读完成。

简介:现有湖仓一体架构是以 MaxCompute 为核心读写 Hadoop 集群数据,有些线下 IDC 场景,客户不违心对公网裸露集群外部信息,须要从 Hadoop 集群发动拜访云上的数据。本文以 EMR(云上 Hadoop)形式模仿本地 Hadoop 集群拜访 MaxCompute 数据。
一、背景
1、背景信息

   现有湖仓一体架构是以 MaxCompute 为核心读写 Hadoop 集群数据,有些线下 IDC 场景,客户不违心对公网裸露集群外部信息,须要从 Hadoop 集群发动拜访云上的数据。本文以 EMR(云上 Hadoop)形式模仿本地 Hadoop 集群拜访 MaxCompute 数据。

2、根本架构

二、搭建开发环境
1、EMR 环境筹备
(1)购买
① 登录阿里云控制台 – 点击右上角控制台选项 https://www.aliyun.com/accoun…

② 进入到导航页 – 点击云产品 – E-MapReduce(也能够搜寻)

③ 进入至 E-MapReduce 首页,点击 EMR on ECS – 创立集群

— 具体购买细节参考官网文档 https://help.aliyun.com/docum…

④ 点击集群 ID 可查看集群的根底信息、集群服务以及节点治理等模块

(2)登录
— 具体登录集群形式可参考官网文档 https://help.aliyun.com/docum…

— 本文以登录 ECS 实例操作

① 点击阿里云首页控制台 – 云服务器 ECS

https://www.aliyun.com/produc…

② 点击实例名称 – 近程连贯 – Workbench 近程连贯

2、本地 IDEA 筹备
(1)装置 maven
— 可参考文档 https://blog.csdn.net/l32273/…

(2)创立 Scala 我的项目
① 下载 Scala 插件

② 装置 Scala JDK

— 倡议下载 *.zip 文件

— 配置 Scala 环境变量

— 通过 Win + R 关上 cmd 测试是否呈现 Scala 版本

— 可参考文档:https://blog.csdn.net/m0_5961…

③ 创立 Scala 我的项目

3、MaxCompute 数据筹备
(1)Project
— MaxCompute 创立 project 可参考官网文档:https://help.aliyun.com/docum…

(2)AccessKey
— 简称 AK,包含 AccessKey ID 和 AccessKey Secret,是拜访阿里云 API 的密钥。在阿里云官网注册云账号后,能够在 AccessKey 治理页面生成该信息,用于标识用户,为拜访 MaxCompute、其余阿里云产品或连贯第三方工具做签名验证。请妥善保存 AccessKey Secret,必须窃密,如果存在泄露危险,请及时禁用或更新 AccessKey。

— 查找 ak 可参考官网文档

https://ram.console.aliyun.co…

(3)Endpoint
— MaxCompute 服务:连贯地址为 Endpoint,取值由地区及网络连接形式决定

— 各地区 endpoint 可参考官网文档:https://help.aliyun.com/docum…

(4)table
— MaxCompute 创立表可参考官网文档 https://help.aliyun.com/docum…

— 本文需筹备分区表和非分区表,供测试应用

三、代码测试
1、前提条件
(1)筹备 MaxCompute 上的 project、ak 信息以及表数据

(2)筹备 E-MapReduce 集群

(3)终端连贯 E-MapReduce 节点(即 ECS 实例)

(4)本地 IDEA 需配置 Scala 环境变量、maven 环境变量 并下载 Scala 插件

2、代码示例
https://github.com/aliyun/ali…

3、打包上传
(1)本地写好代码后,maven 打包

(2)本地编译 jar 包
① 进入 project 目录

cd ${project.dir}/spark-datasource-v3.1

② 执行 mvn 命令构建 spark-datasource

mvn clean package jar:test-jar

③ 查看 target 目录下是否有 dependencies.jar 和 tests.jar

(3)打好的 jar 包上传至服务器
① scp 命令上传

scp [本地 jar 包门路] root@[ecs 实例公网 IP]:[服务器寄存 jar 包门路]

② 服务器查看

③ 各节点之间上传 jar 包

scp -r [本服务器寄存 jar 包门路] root@ecs 实例私网 IP:[接管的服务器寄存 jar 包地址]

4、测试
(1)运行模式
① Local 模式:指定 master 参数为 local

./bin/spark-submit \

--master local \
--jars ${project.dir}/spark-datasource-v3.1/target/spark-datasource-1.0-SNAPSHOT-jar-with-dependencies.jar,${project.dir}/spark-datasource-v2.3/libs/cupid-table-api-1.1.5-SNAPSHOT.jar,${project.dir}/spark-datasource-v2.3/libs/table-api-tunnel-impl-1.1.5-SNAPSHOT.jar \
--class DataReaderTest \
${project.dir}/spark-datasource-v3.1/target/spark-datasource-1.0-SNAPSHOT-tests.jar \
${maxcompute-project-name} \
${aliyun-access-key-id} \
${aliyun-access-key-secret} \
${maxcompute-table-name}

② yarn 模式:指定 master 参数为 yarn、代码中 endpoint 抉择以 -inc 结尾

代码:val ODPS_ENDPOINT = “http://service.cn-beijing.maxcompute.aliyun-inc.com/api”

./bin/spark-submit \

--master yarn \
--jars ${project.dir}/spark-datasource-v3.1/target/spark-datasource-1.0-SNAPSHOT-jar-with-dependencies.jar,${project.dir}/spark-datasource-v2.3/libs/cupid-table-api-1.1.5-SNAPSHOT.jar,${project.dir}/spark-datasource-v2.3/libs/table-api-tunnel-impl-1.1.5-SNAPSHOT.jar \
--class DataReaderTest \
${project.dir}/spark-datasource-v3.1/target/spark-datasource-1.0-SNAPSHOT-tests.jar \
${maxcompute-project-name} \
${aliyun-access-key-id} \
${aliyun-access-key-secret} \
${maxcompute-table-name}

(2)读非分区表表测试
① 命令

— 首先进入 spark 执行环境
cd /usr/lib/spark-current
— 提交工作
./bin/spark-submit \

--master local \
--jars ${project.dir}/spark-datasource-v3.1/target/spark-datasource-1.0-SNAPSHOT-jar-with-dependencies.jar,${project.dir}/spark-datasource-v2.3/libs/cupid-table-api-1.1.5-SNAPSHOT.jar,${project.dir}/spark-datasource-v2.3/libs/table-api-tunnel-impl-1.1.5-SNAPSHOT.jar \
--class DataReaderTest \
${project.dir}/spark-datasource-v3.1/target/spark-datasource-1.0-SNAPSHOT-tests.jar \
${maxcompute-project-name} \
${aliyun-access-key-id} \
${aliyun-access-key-secret} \
${maxcompute-table-name}

② 执行界面

③ 执行后果

(2)读分区表测试
① 命令

— 首先进入 spark 执行环境
cd /usr/lib/spark-current
— 提交工作
./bin/spark-submit \

--master local \
--jars ${project.dir}/spark-datasource-v3.1/target/spark-datasource-1.0-SNAPSHOT-jar-with-dependencies.jar,${project.dir}/spark-datasource-v2.3/libs/cupid-table-api-1.1.5-SNAPSHOT.jar,${project.dir}/spark-datasource-v2.3/libs/table-api-tunnel-impl-1.1.5-SNAPSHOT.jar \
--class DataWriterTest \
${project.dir}/spark-datasource-v3.1/target/spark-datasource-1.0-SNAPSHOT-tests.jar \
${maxcompute-project-name} \
${aliyun-access-key-id} \
${aliyun-access-key-secret} \
${maxcompute-table-name} \
${partition-descripion}

② 执行界面

③ 执行后果

(3)写非分区表表测试
① 命令

./bin/spark-submit \

--master local \
--jars ${project.dir}/spark-datasource-v3.1/target/spark-datasource-1.0-SNAPSHOT-jar-with-dependencies.jar,${project.dir}/spark-datasource-v2.3/libs/cupid-table-api-1.1.5-SNAPSHOT.jar,${project.dir}/spark-datasource-v2.3/libs/table-api-tunnel-impl-1.1.5-SNAPSHOT.jar \
--class DataWriterTest \
${project.dir}/spark-datasource-v3.1/target/spark-datasource-1.0-SNAPSHOT-tests.jar \
${maxcompute-project-name} \
${aliyun-access-key-id} \
${aliyun-access-key-secret} \
${maxcompute-table-name}

② 执行界面

③ 执行后果

(4)写分区表测试
① 命令

./bin/spark-submit \

--master local \
--jars ${project.dir}/spark-datasource-v3.1/target/spark-datasource-1.0-SNAPSHOT-jar-with-dependencies.jar,${project.dir}/spark-datasource-v2.3/libs/cupid-table-api-1.1.5-SNAPSHOT.jar,${project.dir}/spark-datasource-v2.3/libs/table-api-tunnel-impl-1.1.5-SNAPSHOT.jar \
--class DataWriterTest \
${project.dir}/spark-datasource-v3.1/target/spark-datasource-1.0-SNAPSHOT-tests.jar \
${maxcompute-project-name} \
${aliyun-access-key-id} \
${aliyun-access-key-secret} \
${maxcompute-table-name} \
${partition-descripion}

② 执行过程

③ 执行后果

5、性能测试
— 因为试验环境是 EMR 和 MC,属于云上互联,如果 IDC 网络与云上相连取决于 tunnel 资源或者专线带宽

(1)大表读测试
— size:4829258484 byte

— partitions:593 个

— 读取分区 20170422

— 耗时:0.850871 s

(2)大表写测试
① 分区写入 万条 数据

— 耗时:2.5s

— 后果

② 分区写入 十万条 数据

— 耗时:8.44 s

— 后果:

③ 分区写入 百万条 数据

— 耗时:73.28 s

— 后果

lQLPJxZt8w2hn7PNBAHNCkGwYhMu6WTj60YCtTUa9oCuAA_2625_1025.png

原文链接:http://click.aliyun.com/m/100…
本文为阿里云原创内容,未经容许不得转载。

正文完
 0