本文为您介绍使用Spark过程中可能遇到的常见问题。

如何将开源Spark代码迁移到Spark on MaxCompute

分以下三种情形:
  • 作业无需访问MaxCompute表和OSS。

    用户jar包可直接运行,具体步骤请参见搭建开发环境。注意,对于Spark或Hadoop的依赖必须设成provided

  • 作业需要访问MaxCompute表。

    配置相关依赖后重新打包即可。配置依赖的步骤请参见配置依赖

  • 作业需要访问OSS。

    配置相关依赖后重新打包即可。配置依赖的步骤请参见配置依赖

如何通过Spark访问VPC环境内服务

Spark默认支持对MaxCompute表的访问,支持对OSS、OTS等外部数据源的访问处理。对VPC内的服务访问,目前默认暂不支持访问,如有需求可以通过工单和我们联系。

spark-defaults.conf提供的id、key错误

Stack:
com.aliyun.odps.OdpsException: ODPS-0410042:
Invalid signature value - User signature dose not match

请检查spark-defaults.conf提供的id、key和在阿里云官网管理控制台用户信息管理中的AccessKey IDAccess Key Secret是否一致。

提示权限不足

Stack:
com.aliyun.odps.OdpsException: ODPS-0420095: 
Access Denied - Authorization Failed [4019], You have NO privilege 'odps:CreateResource' on {acs:odps:*:projects/*}

请project owner授权grant resource的read以及create权限。

项目未支持Spark任务运行

Exception in thread "main" org.apache.hadoop.yarn.exceptions.YarnException: com.aliyun.odps.OdpsException: ODPS-0420095: Access Denied - The task is not in release range: CUPID

首先需要确认项目所在的region中,是否已经提供了MaxCompute Spark服务。同时,检查Spark-defaults.conf配置信息是否与产品文档中的要求一致。如果region已经支持,请通过工单或加入钉钉群:21969532(MaxCompute Spark支持群)进行咨询。

运行时报错No space left on device

Spark使用网盘进行本地存储。Shuffle数据和BlockManager溢出的数据均存储在网盘上。网盘的大小通过参数spark.hadoop.odps.cupid.disk.driver.device_size控制,默认20g,最大100g。如果调整到100g仍然报出此错误,则需要分析具体原因。常见的原因为数据倾斜,在Shuffle或者Cache过程中数据集中分布在某些Block,此时可以缩小单个Executor的并发(spark.executor.cores),增加Executor的数量(spark.executor.instances)。