开发者社区> 杨越意> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

模拟IDC spark读写MaxCompute实践

简介: 现有湖仓一体架构是以 MaxCompute 为中心读写 Hadoop 集群数据,有些线下 IDC 场景,客户不愿意对公网暴露集群内部信息,需要从 Hadoop 集群发起访问云上的数据。本文以 EMR (云上 Hadoop)方式模拟本地 Hadoop 集群访问 MaxCompute数据。
+关注继续查看

一、背景

1、背景信息

现有湖仓一体架构是以 MaxCompute 为中心读写 Hadoop 集群数据,有些线下 IDC 场景,客户不愿意对公网暴露集群内部信息,需要从 Hadoop 集群发起访问云上的数据。本文以 EMR (云上 Hadoop)方式模拟本地 Hadoop 集群访问 MaxCompute数据。

2、基本架构

image

二、搭建开发环境

1、EMR环境准备

(1)购买

① 登录阿里云控制台 - 点击右上角控制台选项 https://www.aliyun.com/accounttraceid=bc277aa7c0c64023b459dd695ac328b1jncu

image

② 进入到导航页 - 点击云产品 - E-MapReduce(也可以搜索)

image

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

-- 具体购买细节参考官方文档 https://help.aliyun.com/document_detail/176795.html#section-55q-jmm-3ts

④ 点击集群ID 可查看集群的基础信息、集群服务以及节点管理等模块

(2)登录

-- 详细登录集群方式可参考官方文档 https://help.aliyun.com/document_detail/169150.html

-- 本文以登录ECS实例操作

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

https://www.aliyun.com/product/ecs?spm=5176.19720258.J_3207526240.92.542b2c4aSz6c39

② 点击实例名称 - 远程连接 - Workbench远程连接

2、本地IDEA准备

(1)安装maven

-- 可参考文档 https://blog.csdn.net/l32273/article/details/123684435

(2)创建Scala项目

① 下载Scala插件

image

② 安装 Scala JDK

-- 建议下载 *.zip 文件

-- 配置 Scala 环境变量

-- 通过 Win + R 打开 cmd 测试是否出现 Scala版本

-- 可参考文档: https://blog.csdn.net/m0_59617823/article/details/124310663

③ 创建 Scala 项目

image

3、MaxCompute数据准备

(1)Project

-- MaxCompute 创建 project 可参考官方文档: https://help.aliyun.com/document_detail/27815.html

(2)AccessKey

-- 简称AK,包括AccessKey ID和AccessKey Secret,是访问阿里云API的密钥。在阿里云官网注册云账号后,可以在AccessKey管理页面生成该信息,用于标识用户,为访问MaxCompute、其他阿里云产品或连接第三方工具做签名验证。请妥善保管AccessKey Secret,必须保密,如果存在泄露风险,请及时禁用或更新AccessKey。

-- 查找 ak 可参考官方文档

https://ram.console.aliyun.com/manage/ak?spm=a2c4g.11186623.0.0.24704213IXakh3

(3)Endpoint

-- MaxCompute服务:连接地址为Endpoint,取值由地域及网络连接方式决定

-- 各地域 endpoint 可参考官方文档:https://help.aliyun.com/document_detail/34951.html

(4)table

-- MaxCompute 创建表可参考官方文档 https://help.aliyun.com/document_detail/73768.html

-- 本文需准备分区表和非分区表,供测试使用

三、代码测试

1、前提条件

(1)准备 MaxCompute 上的project、ak信息以及表数据

(2)准备 E-MapReduce集群

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

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

2、代码示例

https://github.com/aliyun/aliyun-maxcompute-data-collectors/blob/master/spark-datasource-v3.1/src/test/scala/PartitionDataReaderTest.scala

3、打包上传

(1)本地写好代码后,maven 打包

image

(2)本地编译jar包

① 进入project目录

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

② 执行mvn命令构建spark-datasource

mvn clean package jar:test-jar

image

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

image

(3)打好的 jar 包上传至服务器

① scp 命令上传

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

image

② 服务器查看

image

③ 各节点之间上传 jar 包

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

image

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}

② 执行界面

image


③ 执行结果

image


(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}


② 执行界面

image


③ 执行结果

image


(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}


② 执行界面

image


③ 执行结果

image


(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}


② 执行过程

image


③ 执行结果

image


5、性能测试

-- 由于实验环境是 EMR 和 MC ,属于云上互联,如果 IDC 网络与云上相连取决于 tunnel 资源或者专线带宽

(1)大表读测试

-- size:4829258484 byte

-- partitions : 593个

-- 读取分区 20170422

-- 耗时: 0.850871 s

image


(2)大表写测试

① 分区写入 万条 数据

-- 耗时:2.5s

image

-- 结果

image


② 分区写入 十万条 数据

-- 耗时:8.44 s

image

-- 结果:

image


③ 分区写入 百万条 数据

-- 耗时:73.28 s

image

-- 结果

image


lQLPJxZt8w2hn7PNBAHNCkGwYhMu6WTj60YCtTUa9oCuAA_2625_1025.png

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
BigData之Spark:Spark计算引擎的简介、下载、经典案例之详细攻略
BigData之Spark:Spark计算引擎的简介、下载、经典案例之详细攻略
14 0
Spark—GraphX编程指南
GraphX 是新的图形和图像并行计算的Spark API。从整理上看,GraphX 通过引入 弹性分布式属性图(Resilient Distributed Property Graph)继承了Spark RDD:一个将有效信息放在顶点和边的有向多重图。为了支持图形计算,GraphX 公开了一组基本的运算(例如,subgraph,joinVertices和mapReduceTriplets),以及在一个优化后的 PregelAPI的变形。此外,GraphX 包括越来越多的图算法和 builder 构造器,以简化图形分析任务。
53 0
BigData之Spark:Spark计算引擎的简介、下载、经典案例之详细攻略
BigData之Spark:Spark计算引擎的简介、下载、经典案例之详细攻略
54 0
Spark通识
Apache Spark是一种快速、通用、可扩展、可容错的、基于内存迭代计算的大数据分析引擎。首先强调一点, Spark目前是一个处理数据的计算引擎, 不做存储。首先咱们通过一张图来看看目前Spark生态圈都包括哪些核心组件:
432 0
Maxcompute Spark 访问 阿里云 Hbase
引子 本来这个东西是没啥好写的,但是在帮客户解决问题的时候,发现链路太长,不能怪客户弄不出来,记录一下 需求列表 MaxCompute Spark包 (写文章时刻为版本 0.32.1, 请自行更新,本文不是文档) Spark 配置 spark.
1035 0
入门 spark
CentOS项目组织结构内容 image.png 启动 Hadoop
837 0
Spark入门
spark历史:伯克利实验室研究项目,基于Hadoop的Mapreduce机制,引入内存管理机制,提高了迭代式计算和交互式中的效率。 spark组件: spark core:spark基本功能,包括任务调度,内存管理,容错机制 内部定义了RDDs(弹性分布式数据集),提供多个APIs调用,为...
1257 0
spark内核
术语解释 Executor  多线程的方式运行 每个partirion会被分配一个task taskset就是stage,一个stage由多个task组成 广播变量类似于hadoop的DistributedCache 本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1
1055 0
+关注
1
文章
0
问答
来源圈子
更多
MaxCompute(原ODPS)是一项面向分析的大数据计算服务,它以Serverless架构提供快速、全托管的在线数据仓库服务,消除传统数据平台在资源扩展性和弹性方面的限制,最小化用户运维投入,使您经济并高效的分析处理海量数据。
+ 订阅
相关文档: MaxCompute
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载