原题目: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界面添加到数据开发,参考文档

资源引用:

,

AllbetGmaing手机版下载

欢迎进入AllbetGmaing手机版下载(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。

,

资源提交后,可以在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

作者:亢海鹏

电银付声明:该文看法仅代表作者自己,与本平台无关。转载请注明:usdt充值接口(www.caibao.it):MaxCompute Spark 使用和常见问题
发布评论

分享到:

usdt不用实名买入卖出(www.caibao.it):藏二代进场 2021台北艺博乐观
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。