当前位置: 首页 > Web前端 > HTML

MaxComputeSpark使用及常见问题

时间:2023-04-02 14:07:04 HTML

简介:本文将深入介绍MaxComputeSpark开发环境搭建、常??用配置、作业迁移注意事项及常见问题。一、MaxComputeSpark简介MaxComputeSpark是MaxCompute提供的开源兼容Spark计算服务。提供基于统一计算资源和数据集权限体系的Spark计算框架,支持用户以熟悉的开发和使用方式提交和运行Spark作业,满足更丰富的数据处理和分析场景。1.1主要特性支持原生多版本Spark作业社区NativeSpark运行在MaxCompute中,完全兼容SparkAPI,支持多个Spark版本同时运行,统一计算资源,如MaxComputeSQL/MR等任务类型,运行在MaxCompute项目上开启了统一计算资源中的统一数据和权限管理遵循MaxCompute项目的权限体系,在访问用户权限范围内安全查询数据。与开源系统相同的用户体验,提供原生开源实时SparkUI和历史日志查询功能。1.2系统架构NativeSpark可以通过MaxComputeCupid平台在MaxCompute中运行1.3约束与限制目前,MaxComputeSpark支持以下适用场景:离线计算场景:Streaming场景,如GraphX、Mllib、RDD、Spark-SQL、PySpark等。读写MaxComputeTables引用MaxCompute中的文件资源读写VPC环境下的服务,如RDS、Redis、HBase、部署在ECS上的服务读写OSS非结构化存储使用限制不支持交互需求Spark-Shell、Spark-SQL-Shell、PySpark-Shell等不支持访问MaxCompute外部表、函数和UDF,仅支持本地模式和Yarn-cluster模式运行2.开发环境搭建2.1运行模式通过Spark客户端提交Yarn-Cluster模式,提交任务到MaxCompute集群Local模式通过Dataworks提交本质上也是Yarn-Cluster模式。提交任务到MaxCompute集群2.2通过客户端提交2.2.1Yarn-Cluster方式下载MCSpark客户端Spark1.6.3Spark2.3.0环境变量配置##JAVA_HOME配置#JDK1.8推荐exportJAVA_HOME=/path/to/jdkexportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexportPATH=$JAVA_HOME/bin:$PATH##SPARK_HOMESettings#下载上面提到的MaxComputeSpark客户端和解压到任何本地路径#请不要直接将SPARK_HOME设置为以下路径以下路径仅供展示#请指向正确的路径exportSPARK_HOME=/path/to/spark_extracted_pa??ckageexportPATH=$SPARK_HOME/bin:$PATH##PySpark配置Python版本exportPATH=/path/to/python/bin/:$PATH参数配置重命名$SPARK_HOME/conf/spark-defaults.conf.template为spark-defaults.conf参数配置参考下面准备项目项目gitclonehttps://github.com/aliyun/MaxCompute-Spark.gitcdspark-2.xmvncleanpackage任务提交//bash环境cd$SPARK_HOMEbin/spark-submit--masteryarn-cluster--classcom.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/binspark-submit.cmd--masteryarn-cluster--classcom.aliyun.odps.spark.examples.SparkPipathtoMaxCompute-Sparkspark-2.xtargetspark-examples_2.11-1.0.0-SNAPSHOT-shaded.jarIDEA调试注意IDEA运行在Local模式下不能直接引用spark-defaults.conf中的配置。您需要在代码中手动指定相关配置。务必在IDEA中手动添加MaxComputeSpark客户端(jars目录)的相关依赖,否则会出现如下错误:spark.sql.catalogimplementation的值应该是一个ofhivein-memorybutwasodps参考文档2.3通过DataWorks提交2.3.1资源上传本质上,MCSpark节点的配置对应spark-submit命令的参数和选项ODPSSPARKnodespark-submitmainJavaandpython资源appjar或python文件配置项--confPROP=VALUEMainClass--classCLASS_NAMEparameter[apparguments]选择JAR资源--jarsJARS选择Python资源??--py-filesPY_FILES选择文件资源--filesFILES选择Archivesresource--archivesupload资源:0-50MB:可直接在DataWorks界面创建资源并上传。50MB-500MB:可以先使用MaxCompute客户端(CMD)上传,然后在DataWorks界面添加到DataDevelopment。在DataWorksSpark节点界面选择需要的资源(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)先在Scheduling->Parameters中添加参数,然后在Spark节点的“Parameters”栏中引用参数多个参数用空格分隔。该参数将传递给用户的主类。用户可以解析代码中的参数,参考文档3.配置介绍3.1配置位置3.1.1Spark配置位置用户在使用MaxcomputeSpark时,通常有几个位置可以添加Spark配置,主要包括:位置1:spark-defaults.conf,用户通过客户端提交时在spark-defaults.conf文件中添加的Spark配置位置2:dataworks配置项,当用户通过dataworks提交时配置项添加的Spark配置,这部分的配置最终会添加到位置3位置3:在启动脚本中配置spark-submit--confoption位置4:在用户代码中配置,用户在初始化SparkContext时设置的Spark配置Spark配置的优先级用户代码>spark-submit--options>spark-defaults.conf配置>spark-env.sh配置>defaultvalue3.1.2有两个配置需要区分。一是配置spark-defaults.conf或dataworks配置项才能生效(任务提交前需要),不能在用户代码中配置。这类配置的主要特点是:与Maxcompute/Cupid平台相关:一般的参数名称都会有odps或者Cupid,通常这些参数都是和任务提交/资源申请相关的:很明显,一些资源的获取(比如驱动内存,core,diskdriver,maxcomputeresources)将在任务执行前使用。如果在代码中设置了这些参数,显然平台无法读取,所以代码中一定不要配置这些参数。即使在代码中配置了一些参数,任务也不会失败,只是不会生效。代码中配置的一些参数可能会产生副作用:比如在yarn-cluster模式下,设置spark.master为本地访问VPC参数:这些参数也和平台有关,进行网络连接提交任务时。以上三个位置的配置都可以生效,但是在代码配置中优先级最高,建议在代码中配置任务运行和优化相关的参数,资源平台相关的配置在spark-defaults.conf中配置或Dataworks配置项。3.2资源相关参数3.3平台相关参数4.作业诊断4.1Logview4.1.1Logview介绍任务提交时会打印日志:日志中包含logview链接(关键字logviewurl)Master和WorkerStdErr打印spark引擎输出日志,StdOut将用户作业输出的内容打印到控制台4.1.2使用Logview排查问题获取Logview,一般先看驱动的错误报告,驱动会包含一些严重的错误如果里面有类或者方法找不到驱动遇到的问题一般是jar包打包的问题。如果连接外部VPC或OSS时,驱动出现超时,这种情况一般需要检查参数配置,通常Executor已经提前退出了,需要进一步查看Executor的报错。根据EndTime可能会出现OOM排序。结束时间越早,越容易根据Latency对有问题的Executor节点进行排序。Latency代表Executor的存活时间,存活时间越短,越有可能根本原因是使用的SparkUI与社区原版一致。您可以参考文档。请注意,SparkUI需要身份验证。只有提交任务的所有者才能在作业运行时打开SparkUI。如果任务已经结束,则无法打开SparkUI。这时候需要查看SparkHistoryServerUI。五、常见问题本地模式运行问题一:spark.sql.catalogimplementation的值应该是hivein-memory之一,但是是odps。原因是用户没有按照文档正确的将MaxcomputeSpark的jars目录添加到类路径中,导致社区版的spark包被加载。按照文档把jars目录添加到classpath中问题2:IDEALocal模式不能直接引用spark-defaults.conf中的配置,Spark配置项必须写在代码中问题3:接入OSS和VPC:Local模式是在用户本地环境中,网络并不是孤立的。Yarn-Cluster模式在Maxcompute的网络隔离环境下,需要配置vpc接入的相关参数。在Local模式下,访问OSS的端点通常是外网端点,而在Yarn-cluster模式下,访问VPC的端点是经典网络端点jar包打包问题==============================================================================================================================================================================================================Classnotfound:用户Jar包没有被打包为FatJar或者类冲突打包。注意:provided和compile的区别是dependent:provided:代码依赖jar包,但是只在编译的时候用到,运行时不用,运行时会去集群找对应的jar包.编译:代码依赖jar包,编译和运行时都需要。这些jar包在集群中是不存在的,需要用户自己输入jar包。这类jar包一般是一些三方库,与spark运行无关。它与用户代码逻辑有关。用户提交的jar包必须是fatjar:编译类型的所有依赖都必须放入用户jar包中,以保证代码运行时可以加载到这些依赖中的类需要设置为提供的jar包。groupId是org.apache.spark的Jar包。平台相关jar包cupid-sdkhadoop-yarn-clientodps-sdk需要设置为编译好的jar包oss相关jar包hadoop-fs-oss用户访问其他服务使用的jar包:如mysql,hbase用户代码需要引用需要导入Python包的第三方库用户需要使用外部Python依赖。首先推荐用户使用我们打包好的公共资源,包括一些常用的数据处理、计算、连接外部服务的三方库(mysql、redis、hbase)##公共资源python2.7.13spark。hadoop.odps.cupid.resources=public.python-2.7.13-ucs4.tar.gzspark.pyspark.python=./public.python-2.7.13-ucs4.tar.gz/python-2.7.13-ucs4/bin/python##公共资源python3.7.9spark.hadoop.odps.cupid.resources=public.python-3.7.9-ucs4.tar.gzspark.pyspark.python=./public.python-3.7.9-ucs4.tar.gz/python-3.7.9-ucs4/bin/python3作者:康海鹏原文链接本文为阿里云原创内容,未经允许不得转载