MaxCompute Spark与Spark SQL对比分析及使用注意事项

简介: 本文详细对比了Spark on MaxCompute与开源Spark模式在使用中的差异。本次分享主要从功能特性,代码开发,以及Spark on MaxCompute在DataWorks中部署的操作流程等方面进行详细讲解。

演讲嘉宾简介:沐行,阿里云智能技术支持工程师。

本次直播视频精彩回顾,戳这里!
以下内容根据演讲视频以及PPT整理而成。
本次分享主要围绕以下三个方面:

一、功能特性
二、代码开发
三、DataWorks模式

一、功能特性

1.Spark部署模式
Spark开源文档中表明部署模式支持几种部署模式,如stand alone模式、on yarn模式、on k8s模式等。但是其中并不包括Spark on MaxCompute模式。Spark on MaxCompute其实是 MaxCompute平台对开源的Spark做的兼容支持,使得 MaxCompute平台得以支持运行Spark的作业。在部署的集群方式上,on yarn、on k8s集群云上部署时需要购买ECS部署Hadoop集群或者容器集群,或者是使用阿里云的产品,如EMR、容器服务。与用于自己搭建的Hadoop环境(CDH或者EMR的环境)对比时,自建的环境需要登录到集群中,进行查询和维护的工作,但在MaxCompute平台中,使用侧无法登陆,无需关心集群的运维等操作,相比on yarn等开源模式只需将精力放在Spark业务逻辑开发上。当用户部署完集群去客户端提交作业时,开源模式是从官网下载Spark客户端,通过Spark-submit提交作业。但开源的Spark-submit客户端无法到MaxCompute平台中提交作业。这时则需要注意使用MaxCompute中Github上提供的Spark,部署开发环境,并在开发本地处理测试提交的工作。
图片 1.png

2.支持的数据源
Spark on yarn/K8s限制条件:首先,开源模式需要确认支持数据源操作的jar包是否存在。在常规做Spark作业开发分析时,需要需要考虑数据的来源以及去向,即Spark支不支持对对应的数据库进行读写访问。在开源开发模式下,需要将对应数据源支持的jar包加进去,在代码引用时则可以对对应的数据库进行读写访问。其次,开源模式还需要保证平台环境网络是否可打通。尽管代码层面上的接口都可以调用访问对应的库,但还需要检查Spark集群所运行的环境。如果作业是在集群中运行,在Hadoop中将作业提交上去,Work接点里面跑出来,在Spark并发跑的时候,拉取数据时要保证集群能访问到数据库,否则作业里会报连接超时的错误。云上环境网络连通上如常见的云上ECS搭建、自建Hadoop、k8s容器服务、EMR或者常见的VPC环境。如果VPC环境下集群和数据库之间要在网络评估的话,需要在同一个VPC下,否则默认情况下内网不通。

Spark on MaxCompute限制条件:若用户需要将一个作业迁到MaxCompute运行,需要检查MaxCompute是否支持所要访问的数据源,只有支持了,才能迁到MaxCompute上并借助其分布式能力让作业运行起来。目前MaxCompute支持访问的数据源包括oss、VPC下的ECS、RDS、redis等。基本上云上VPC下环境的数据源都支持。用户可从文档中获取具体支持数据源的所有信息,以及做访问配置时的配置方式等信息。
图片 2.png

2.提交方式
开源模式在Spark客户端提交作业时,开发完成后需要在本地运行测试,运行测试的时候可以以Local模式运行,在集群运行时用Cluster的方式,做交互式时用Client的方式。Spark on MaxCompute同样也支持这三种方式,只有有些点与开源不同。首先,使用Spark on MaxCompute的客户端做MaxCompute表时,代码中计划访问MaxCompute表,拉取RDD数据进行分析。随即在本地测试时将MaxCompute表里的数据下载下来,再进行处理。此时如果MaxCompute表较大的话,拉取数据的时间会比较长,导致作业运行的时间也会变长。
其次,在测试时UDF会拉张表写到本地的Warehouse目录下,在下次测试使用缓存数据。但Spark on MaxCompute本地测试时,都需要重新拉数据。所以针对这个特性做功能测试时,在拉的取的表中选定一部分特征,或者选一些分区下载,使得数据量变少,避免将所有数据都下载再运行作业。此外,在Client的模式下,正常开源模式中提交时客户端Driver需要启动,而Spark on MaxCompute在Client模式下运行时,客户端不用启Driver。
图片 3.png

**二、代码开发
1.POM配置**
在Spark业务代码开发时,Spark on MaxCompute代码开发可以参考对应Github中的POM配置文件https://Github.com/aliyun/MaxCompute-Spark/blob/master/spark-2.x/pom.xml
POM文件配置完成后编译或者运行代码时会出现版本冲突,运行不过或者编译不通过等问题。这时需要注意的两个点,首先要注意spark和scala的版本,需要在在POM文件中指定Spark版本,Cupid版本和Scala的版本。对应的版本可以参考下图。此外,需要注意Scope配置是Provided类型。在涉及到Spark on MaxCompute资源包引用时,Scope的配置需要是Provided类型,否则编译时会出现问题。
图片 4.png

2.Jar包引用
下图是POM示例中关于ODPS数据源访问相关的jar包引用代码。关于Cupid-sdk,Spark底层其实是在Cupid平台运行的,由Cupid再去调用底层的调度资源进行协调,所以在做开发时Cupid版本需要引用进来。此外,如果在Spark需要访问oss数据源,需要将对应的jar包引用进来。odps-spark-datasource是对应ODPS支持源的jar包。
图片 5.png

2.使用建议
建议使用SparkSql,不要使用ODPSops:在前期开发时,如果需要访问ODPS结构化数据,建议使用SparkSql方式,推荐ODPSops方式。SparkSession包含很多配置,如下图,但不建议将配置全部写到代码里,只需制定常见参数,如生效逻辑,代码,提交和配置文件等。如果底层在Cupid平台运行,需要注意部分参数要在程序加载之前进行初始化,如果等程序加载好之后再进行参数初始化就无法生效,既代码里面写的部分参数最终运行起来会失效。所以建议线上运行时,将SparkSession代码中配置的参数写到Spark节点配置中。如此,作业开始运行之前,便会将对应的参数配置好,运行之前初始化好环境,让对应的参数生效。
图片 6.png

线上运行时SparkSession代码中参数写到Spark节点:Spark on MaxCompute在读MaxCompute表时,会被提示此项目不存在,如果确定项目的确存在,需要指定运行时端点的信息。通过运行时端点信息连接对应ODPS的元数据库,查询对应元数据是否来自对应的表,并查询项目是否存在。
配置spark.hadoop.odps.runtime.end.point:建议在做Spark节点配置时,加上runtime。
图片 7.png

引用jar资源使用spark.hadoop.odps.cupid.resources:当需要引用第三方的包,但是MaxCompute中并不具备这些包时,可以利用FatJar的方式运行。异或在直接编译完后,在需要引用一些其它jar包资源时,通过Cupid Resources参数引用。对应的jar包需要以资源方式上传到MaxCompute中。
图片 8.png

三、DataWorks模式
写好Spark作业后本地测试都正常,且要与其它作业形成工作流时需要添加依赖,还需要定时调度,这时需要将Spark作业部署到DataWorks中。在DataWorks中部署时需要进行以下几步操作。
**1.操作流程
创建spark节点:**找到DataWorks界面,找到对应的项,找到一个工作流,新建Spark节点。
图片 9.png

配置节点参数:新建的Spark节点中需要进行参数的配置。选择Spark版本,如Spark2.x。选择开发语言,如JavaScala或者Python。通过创建资源的方式将对应的jar包进行导入。再选择主jar包资源,如spark.oss.jar。再配置一些参数,如accessKey,指定runtime的endpoint,指定Cupid版本,通过domainlist指定需要访问VPC的数据源。以及Main Class表明main所在的组类。其余的参数可以通过参数选项进行自定义设置,如指定定时调度等。
进行测试运行:参数配置好后,保存,执行测试运行。可通过刷新日志,查看初始化的配置,如当前作业拉到了哪个项目。此时会生成Logview,与SQL作业类似,其中包含master节点和worker节点。
图片 10.png

提交发布:测试完成后,首先需要将Spark节点进行发布,才可以在生产环境正常的调度。在生产环境的运维环境下可以找到此节点。如果没有发布,只能在开发环境下看到此作业节点。
图片 11.png

但这时如果只发布Spark节点作业,在生产环境测试会报错。因为参数主jar包还没有发布,需要在测试环境下进行发布。所以需要注意,所引用的jar包都需要进行手动的发布。此外如果需要引入大的jar包,超过100M,可以通过命令行方式上传到MaxCompute开发和测试环境中。但这时可能无法在DataWorks界面看到这个包。但可以通过反向添加到DataWorks中。
图片 12.png
欢迎加入“MaxCompute开发者社区2群”,点击MaxCompute开发者社区2群申请加入或扫描二维码申请加入
2群.png

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
19天前
|
存储 消息中间件 监控
【Flume】Flume在大数据分析领域的应用
【4月更文挑战第4天】【Flume】Flume在大数据分析领域的应用
|
1月前
|
Cloud Native 数据处理 云计算
探索云原生技术在大数据分析中的应用
随着云计算技术的不断发展,云原生架构作为一种全新的软件开发和部署模式,正逐渐引起企业的广泛关注。本文将探讨云原生技术在大数据分析领域的应用,介绍其优势与挑战,并探讨如何利用云原生技术提升大数据分析的效率和可靠性。
|
1月前
|
存储 消息中间件 大数据
Go语言在大数据处理中的实际应用与案例分析
【2月更文挑战第22天】本文深入探讨了Go语言在大数据处理中的实际应用,通过案例分析展示了Go语言在处理大数据时的优势和实践效果。文章首先介绍了大数据处理的挑战与需求,然后详细分析了Go语言在大数据处理中的适用性和核心技术,最后通过具体案例展示了Go语言在大数据处理中的实际应用。
|
1月前
|
数据采集 运维 数据挖掘
API电商接口大数据分析与数据挖掘 (商品详情店铺)
API接口、数据分析以及数据挖掘在商品详情和店铺相关的应用中,各自扮演着重要的角色。以下是关于它们各自的功能以及如何在商品详情和店铺分析中协同工作的简要说明。
|
12天前
|
分布式计算 Hadoop 大数据
大数据技术与Python:结合Spark和Hadoop进行分布式计算
【4月更文挑战第12天】本文介绍了大数据技术及其4V特性,阐述了Hadoop和Spark在大数据处理中的作用。Hadoop提供分布式文件系统和MapReduce,Spark则为内存计算提供快速处理能力。通过Python结合Spark和Hadoop,可在分布式环境中进行数据处理和分析。文章详细讲解了如何配置Python环境、安装Spark和Hadoop,以及使用Python编写和提交代码到集群进行计算。掌握这些技能有助于应对大数据挑战。
|
2天前
|
SQL 分布式计算 资源调度
一文解析 ODPS SQL 任务优化方法原理
本文重点尝试从ODPS SQL的逻辑执行计划和Logview中的执行计划出发,分析日常数据研发过程中各种优化方法背后的原理,覆盖了部分调优方法的分析,从知道怎么优化,到为什么这样优化,以及还能怎样优化。
|
13天前
|
机器学习/深度学习 人工智能 安全
Azure Databricks实战:在云上轻松进行大数据分析与AI开发
【4月更文挑战第8天】Databricks在大数据分析和AI开发中表现出色,简化流程并提高效率。文中列举了三个应用场景:数据湖分析、实时流处理和AI机器学习,并阐述了Databricks的一体化平台、云原生弹性及企业级安全优势。博主认为,Databricks提升了研发效能,无缝集成Azure生态,并具有持续创新潜力,是应对大数据挑战和加速AI创新的理想工具。
37 0
|
26天前
|
机器学习/深度学习 人工智能 数据可视化
基于Python的数据可视化技术在大数据分析中的应用
传统的大数据分析往往注重数据处理和计算,然而数据可视化作为一种重要的技术手段,在大数据分析中扮演着至关重要的角色。本文将介绍如何利用Python语言中丰富的数据可视化工具,结合大数据分析,实现更直观、高效的数据展示与分析。
|
1月前
|
存储 NoSQL 大数据
新型数据库技术在大数据分析中的应用与优势探究
随着大数据时代的到来,传统数据库技术已经无法满足海量数据处理的需求。本文将探讨新型数据库技术在大数据分析中的应用情况及其所带来的优势,为读者解析数据库领域的最新发展趋势。
|
1月前
|
分布式计算 NoSQL 大数据
探索数据宇宙:深入解析大数据分析与管理技术
探索数据宇宙:深入解析大数据分析与管理技术
55 1

相关产品

  • 云原生大数据计算服务 MaxCompute