MaxCompute Spark 使用和常见问题

简介: 本文将就MaxCompute Spark开发环境搭建、常用配置、作业迁移注意事项以及常见问题进行深入介绍。

一. MaxCompute Spark 介绍

MaxCompute Spark是MaxCompute提供的兼容开源的Spark计算服务。它在统一的计算资源和数据集权限体系之上,提供Spark计算框架,支持用户以熟悉的开发使用方式提交运行Spark作业,以满足更丰富的数据处理分析场景。

1.1  关键特性

支持原生多版本Spark作业

社区原生Spark运行在MaxCompute里,完全兼容Spark的API,支持多个Spark版本同时运行

统一的计算资源

像MaxCompute SQL/MR等任务类型一样,运行在MaxCompute项目开通的统一计算资源中

统一的数据和权限管理

遵循MaxCompute项目的权限体系,在访问用户权限范围内安全地查询数据

与开源系统相同的使用体验

提供原生的开源实时Spark UI和查询历史日志的功能

1.2 系统结构                

  • 原生Spark通过MaxCompute Cupid平台能够在MaxCompute中运行

 

 

1.3 约束与限制  

目前MaxCompute Spark支持以下适用场景:

离线计算场景:GraphX、Mllib、RDD、Spark-SQL、PySpark等

Streaming场景

读写MaxCompute Table

引用MaxCompute中的文件资源

读写VPC环境下的服务,如RDS、Redis、HBase、ECS上部署的服务等

读写OSS非结构化存储

使用限制

不支持交互式类需求Spark-Shell、Spark-SQL-Shell、PySpark-Shell等

不支持访问MaxCompute外部表,函数和UDF

只支持Local模式和Yarn-cluster模式运行

 

二. 开发环境搭建

2.1 运行模式

通过Spark客户端提交

  • Yarn-Cluster模式,提交任务到MaxCompute集群中

Local模式

 

  • 通过Dataworks提交

本质上也是Yarn-Cluster模式,提交任务到MaxCompute集群中

 

2.2 通过客户端提交

2.2.1 Yarn-Cluster模式

下载MC Spark客户端

Spark 1.6.3

Spark 2.3.0

 

环境变量配置

## JAVA_HOME配置
# 推荐使用JDK 1.8
export JAVA_HOME=/path/to/jdk
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH## SPARK_HOME设置
# 下载上文提到的MaxCompute Spark客户端并解压到本地任意路径
# 请不要直接设置SPARK_HOME等于以下路径下述路径仅做展示用途
# 请指向正确的路径
export SPARK_HOME=/path/to/spark_extracted_package
export PATH=$SPARK_HOME/bin:$PATH## PySpark配置Python版本
export PATH=/path/to/python/bin/:$PATH

参数配置

  • 将$SPARK_HOME/conf/spark-defaults.conf.template 重命名为 spark-defaults.conf

参数配置参考下文

 

准备项目工程

git clone https://github.com/aliyun/MaxCompute-Spark.git
cd spark-2.x
mvn clean package

任务提交

// bash环境
cd $SPARK_HOME
bin/spark-submit --master yarn-cluster --class com.aliyun.odps.spark.examples.SparkPi \
/path/to/MaxCompute-Spark/spark-2.x/target/spark-examples_2.11-1.0.0-SNAPSHOT-shaded.jar// 在windows环境提交的命令
cd $SPARK_HOME/bin
spark-submit.cmd --master yarn-cluster --class com.aliyun.odps.spark.examples.SparkPi
\path\to\MaxCompute-Spark\spark-2.x\target\spark-examples_2.11-1.0.0-SNAPSHOT-shaded.jar

IDEA调试注意

IDEA运行Local模式是不能直接引用spark-defaults.conf里的配置,需要手动在代码里指定相关配置

一定要注意需要在IDEA里手动添加MaxCompute Spark客户端的相关依赖(jars目录),否则会出现以下报错:

the value of spark.sql.catalogimplementation should be one of hive in-memory but was odps

  • 参考文档

 

2.3 通过DataWorks提交

2.3.1 资源上传

  • 本质上MC Spark节点的配置对应于spark-submit命令的参数和选项

ODPS SPARK节点spark-submit主Java、Python资源app jar or python file配置项--conf PROP=VALUEMain Class--class CLASS_NAME参数[app arguments]选择JAR资源--jars JARS选择Python资源--py-files PY_FILES选择File资源--files FILES选择Archives资源

--archives

 

 

上传资源:

0~50MB:可以直接在DataWorks界面创建资源并上传

50MB~500MB:可以先利用MaxCompute客户端(CMD)上传,然后在DataWorks界面添加到数据开发,参考文档

资源引用:

  • 资源提交后,可以在DataWorks Spark节点界面选择需要的资源(jar/python/file/archive)

任务运行时:资源文件默认会上传到Driver和Executor的当前工作目录

 

2.3.2 参数和配置

  • Spark 配置项:对应于spark-submit命令的--conf选项
  • accessid,accesskey,projectname,endpoint,runtime.end.point,task.major.version无需配置

除此之外,需要将spark-default.conf中的配置逐条加到dataworks的配置项中

 

  • 给主类传参数(如bizdate)

首先在调度->参数中添加参数,然后在Spark节点“参数”栏引用该参数。多个参数用空格分隔

该参数会传给用户主类,用户在代码中解析该参数即可

  • 参考文档

三. 配置介绍

3.1 配置的位置

3.1.1 Spark配置的位置

用户使用Maxcompute Spark通常会有几个位置可以添加Spark配置,主要包括:

位置1:spark-defaults.conf,用户通过客户端提交时在spark-defaults.conf文件中添加的Spark配置

位置2:dataworks的配置项,用户通过dataworks提交时在配置项添加的Spark配置,这部分配置最终会在位置3中被添加

位置3:配置在启动脚本spark-submit --conf选项中

位置4:配置在用户代码中,用户在初始化SparkContext时设置的Spark配置

Spark配置的优先级

用户代码 > spark-submit --选项 > spark-defaults.conf配置 > spark-env.sh配置 > 默认值

 

3.1.2 需要区分的两种配置

一种是必须要配置在spark-defaults.conf或者dataworks的配置项中才能生效(在任务提交之前需要),而不能配置在用户代码中,这类配置主要的特征是:

与Maxcompute/Cupid平台相关:一般参数名中都会带odps或者cupid,通常这些参数与任务提交/资源申请都关系:

显而易见,一些资源获取(如driver的内存,core,diskdriver,maxcompute资源),在任务执行之前就会用到,如果这些参数设置在代码中,很明显平台没有办法读到,所以这些参数一定不要配置在代码中

其中一些参数即使配置在代码中,也不会造成任务失败,但是不会生效

其中一些参数配置在代码中,可能会造成副作用:如在yarn-cluster模式下设置spark.master为local

访问VPC的参数:

这类参数也与平台相关,打通网络是在提交任务时就进行的

一种是在以上三种位置配置都可以生效,但是在代码配置的优先级最高

推荐把任务运行与优化相关的参数配置在代码中,而与资源平台相关的配置都配置在spark-defaults.conf或者dataworks的配置项中。

 

3.2 资源相关的参数

 

3.3 平台相关的参数

 

四. 作业诊断

4.1 Logview

4.1.1 Logview 介绍

  • 在任务提交时会打印日志: 日志中含有logview链接 (关键字 logview url)

Master以及Worker的StdErr打印的是spark引擎输出的日志,StdOut中打印用户作业输出到控制台的内容

 

 

4.1.2 利用Logview 排查问题

  • 拿到Logview,一般首先看Driver的报错,Driver会包含一些关键性的错误

如果Driver中出现类或者方法找不到的问题,一般是jar包打包的问题

如果Driver中出现连接外部VPC或者OSS出现Time out,这种情况一般要去排查一下参数配置

  • 如果Driver中出现连接不到Executor,或者找不到Chunk等错误,通常是Executor已经提前退出,需要进一步查看Executor的报错,可能存在OOM
  • 根据End Time做排序,结束时间越早,越容易是发生问题的Executor节点

根据Latency做排序,Latency代表了Executor的存活的时间,存活时间越短的,越有可能是根因所在

 

 

Spark UI的使用与社区原生版是一致的,可以参考文档

注意

Spark UI需要鉴权,只有提交任务的Owner才能打开

Spark UI仅在作业运行时才能打开,如果任务已经结束,那么Spark UI是无法打开的,这时候需要查看Spark History Server UI

五. 常见问题

1. local模式运行的问题

  • 问题一:the value of spark.sql.catalogimplementation should be one of hive in-memory but was odps

原因在于用户没有正确地按照文档将Maxcompute Spark的jars目录添加到类路径,导致加载了社区版的spark包,需要按照文档将jars目录添加到类路径

问题二:IDEA Local模式是不能直接引用spark-defaults.conf里的配置,必须要把Spark配置项写在代码中

问题三:访问OSS和VPC:

Local模式是处于用户本机环境,网络没有隔离。而Yarn-Cluster模式是处于Maxcompute的网络隔离环境中,必须要要配置vpc访问的相关参数

Local模式下访问oss的endpoint通常是外网endpoint,而Yarn-cluster模式下访问vpc的endpoint是经典网络endpoint

 

2. jar包打包的问题

java/scala程序经常会遇到Java类找不到/类冲突问题:

  • 类冲突:用户Jar包与Spark或平台依赖的Jar包冲突

类没有找到:用户Jar包没有打成Fat Jar或者由于类冲突引起

 

打包需要注意:

依赖为provided和compile的区别:

provided:代码依赖该jar包,但是只在编译的时候需要用,而运行时不需要,运行时会去集群中去寻找的相应的jar包

compile:代码依赖该jar包,在编译、运行时候都需要,在集群中不存在这些jar包,需要用户打到自己的jar包中。这种类型的jar包一般是一些三方库,且与spark运行无关,与用户代码逻辑有关

用户提交的jar包必须是Fat jar:

必须要把compile类型的依赖都打到用户jar包中,保证代码运行时能加载到这些依赖的类

 

需要设置为provided的jar包

groupId为org.apache.spark的Jar包

平台相关的Jar包

cupid-sdk

hadoop-yarn-client

odps-sdk

 

需要设置为compile的jar包

oss相关的jar包

hadoop-fs-oss

用户访问其他服务用到的jar包:

如mysql,hbase

用户代码需要引用的第三方库

 

3. 需要引入Python包

很多时候用户需要用到外部Python依赖

首先推荐用户使用我们打包的公共资源,包含了常用的一些数据处理,计算,以及连接外部服务(mysql,redis,hbase)的三方库

## 公共资源python2.7.13
spark.hadoop.odps.cupid.resources = public.python-2.7.13-ucs4.tar.gz
spark.pyspark.python = ./public.python-2.7.13-ucs4.tar.gz/python-2.7.13-ucs4/bin/python## 公共资源python3.7.9
spark.hadoop.odps.cupid.resources = public.python-3.7.9-ucs4.tar.gz
spark.pyspark.python = ./public.python-3.7.9-ucs4.tar.gz/python-3.7.9-ucs4/bin/python3

作者:亢海鹏

原文链接

本文为阿里云原创内容,未经允许不得转载

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/514492.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DTCC 2020 | 阿里云程实:云原生时代的数据库管理

简介: 随着云原生技术的不断发展,数据库也逐渐进入了云原生时代。在云原生时代,如何高效、安全且稳定地管理云上与云下的数据库成为摆在企业面前的一大难题。在第十一届中国数据库技术大会(DTCC2020)上,阿里…

Ampere 收购 OnSpecta,加速对云原生应用程序的 AI 推理

安晟培半导体科技有限公司(Ampere Computing)日前宣布收购 AI 技术初创公司 OnSpecta,该收购将助力 Ampere 通过 AI 推理应用程序进一步增强 Ampere Altra 的性能。相较于常用的基于 CPU 的机器学习(ML)框架&#xff0…

针对数据库连接池到DRDS连接探活的优化

简介: 针对数据库连接池到DRDS连接探活的优化 1. 问题背景 近期在给某专有云客户进⾏云产品应⽤性能优化分析时,发现了⼀个有趣的关于DRDS使⽤层⾯的问题,这⾥给⼤家分享⼀下。 使⽤过DRDS产品的同学都知道在DRDS中,未分库分表的…

用友BIP|YonBuilder+APICloud 双平台,“1+1>N”的低代码战略

作者 | 宋慧 出品 | CSDN云计算 头图 | 付费下载于视觉中国 作为企业IT信息化中最热的话题,低代码被广泛关注和讨论。国内低代码赛道的厂商众多,传统表格控件厂商、互联网巨头、创业公司,各具优势,在市场攻城拔寨。而国外&#x…

人生苦短,开发用云-如何优雅完成程序员的侠客梦

简介: Coding的魅力如此之强,引无数程序员竞折腰,在今年由CSDN举办的1024程序员节上,中国初代程序员大宗师求伯君说,当年看到有人在用WPS,可开心了,因为有很多人用。然后,也会去找看是谁破解的&…

DTCC 2020 | 阿里云王涛:阿里巴巴电商数据库上云实践

简介: 第十一届中国数据库技术大会(DTCC2020),在北京隆重召开。大会以“架构革新 高效可控”为主题,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨。在数据库智能运维专场上…

SRE技术保障平台-盯屏中心TAC: 混合云一站式告警运维平台

简介: SRE技术保障平台-盯屏中心TAC: 混合云一站式告警运维平台 1.目标定位 1.1背景 告警管控平台种类繁多告警出现后未及时发现处理最终导致故障产生专有云监控能力拉起依赖版本升级,操作复杂,迭代慢异常问题和故障的感知力不如…

安全攻击层出不穷,绿盟科技“智慧安全 3.0”安全防护再升级

随着网络空间和物理空间的边界不断融合,威胁攻击也层出不穷:5月9日,美国最大的燃油管道运营商、东部地区油气输送主要动脉 Colonial Pipeline 公司遭受黑客攻击和勒索,被迫暂停运营,直接导致了美国17个州和华盛顿特区进…

技术干货 | “选图预览并上传”的场景如何解?全网最全方案汇总来了

简介: 你真的知道如何“上传”一张照片吗? 选择本地相册图片或者拍照,然后预览并且上传是移动应用中一个典型的使用场景,比如常见的身份证信息上传等。 不少客户都反馈有类似的场景,并且在使用上都或多或少的遇到一些…

sizeof是c语言的一种运算符,深入sizeof的使用详解

经常在C下编程,不了解精通sizeof就有点说不过去了,本文可没有sizeof与strlen的区别哦,尽管这个对比很经典,不过,将就点吧。一、sizeof的概念sizeof是C语言的一种单目操作符,如C语言的其他操作符、--等。它并…

Serverless 在 SaaS 领域的最佳实践

简介: 随着互联网人口红利逐渐减弱,基于流量的增长已经放缓,互联网行业迫切需要找到一片足以承载自身持续增长的新蓝海,产业互联网正是这一宏大背景下的新趋势。我们看到互联网浪潮正在席卷传统行业,云计算、大数据、人…

5G进入爬坡期,这个关键因素,决定了它的成败……

作者: 小枣君来源: 鲜枣课堂前言2021年上半年,国内5G推进取得了不错的进展。根据工信部最新的数据统计,截止6月底,国内5G基站数量达到96.1万,即将突破百万大关。而国内5G终端连接数,也相比年初猛…

如何降低微服务测试成本?我的经验之谈

简介: 本文为大家介绍微服务治理测试:基于服务契约信息,降低云上微服务测试成本。如果您的团队具备较强的微服务治理测试能力,那么希望我们在微服务治理测试方面的实践和背后的思考,可以为您提供一些参考。 前言 随着…

C语言偏科,C

即使目前的汽车工业发展飞速,类似智联系统、自动驾驶等“黑科技”层出不穷。但不少消费者却仍将关注点放在车辆的基础性能上,譬如它们的安全系数。的确,对于一台行驶在路上的代步工具而言,再多花哨的功能也只能是锦上添花&#xf…

分布式全链路灰度发布的探索与实践

简介: 在分布式系统中,由于分布式全链路灰度发布因其链路复杂、技术门槛高、落地难度高逐渐成为金融科技实现全链路灰度发布的难点所在。工行在分布式系统建设方面一直走在同业前列,积极探索分布式全链路灰度发布,致力于解决分布式…

漫画:什么是 HTTPS 协议?

作者:小灰来源:程序员小灰什么是HTTP协议?HTTP协议全称Hyper Text Transfer Protocol,翻译过来就是超文本传输协议,位于TCP/IP四层模型当中的应用层。HTTP协议通过请求/响应的方式,在客户端和服务端之间进行…

DTCC 2020 | 阿里云张鑫:阿里云云原生异地多活解决方案

简介: 异地多活,顾名思义就是分布在异地多个站点同时对外提供服务,与传统灾备最主要的区别是“多活”里所有站点都是同时在对外提供服务的。在业务不断复杂化和容灾要求不断严格化的今天,如何实现云原生的异地多活解决方案&#x…

c语言中 数组 左移,如何将一个数组的元素循环左移?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include #include #define SIZE(a) (sizeof(a)/sizeof(a[0]))#define HBIT(a) ((a & 0x00000080) ! 0)#define LBIT(a) ((a & 0x00000001) ! 0)int TAB[] {0x10, 0x71, 0x12, 0x10, 0x10, 0x7C, 0x00, 0x00,0x00, 0x00, …

政企边缘安全,如何助您提升企业的“免疫力“?

简介: 在数字化进程中,政企会面临诸多在线化的挑战,一方面要求业务能够在线开放,同时也要求服务是稳定流畅可靠的,此外还要保证安全合规,这对业务开发及运营者提出了极高要求。1月6日,阿里云CDN…

在部队敲代码是一种什么样的体验?

作者 | 千鸟(网名) 小路助手开发者责编 | 晋兆雨出品 | CSDN(ID:CSDNnews)CSDN编者按:对于大多数人来说,大学毕业后选择一家满意的公司,一路升职加薪才是正解,但他却偏…