快速使用EMR on ACK

本文为您介绍如何通过阿里云账号登录E-MapReduce控制台,基于Kubernetes创建E-MapReduce(简称EMR)集群并执行作业。

注意事项

  • 代码的运行环境由所属用户负责管理和配置。

  • 在本文的示例中,JAR包已经直接打包在了镜像中。如果您使用的是自己的JAR包,您可以将其上传到阿里云OSS。上传操作请参见简单上传

    此时,需要您修改命令中的local:///opt/spark/examples/spark-examples.jar为您OSS上存放JAR包的真实路径,路径格式为oss://<yourBucketName>/<path>.jar

准备工作

创建EMR on ACK集群前,需要在容器服务管理控制台,进行以下操作:

  1. 创建Kubernetes集群,详情请参见创建ACK专有集群创建ACK托管集群

  2. 添加AliyunOSSFullAccess和AliyunDLFFullAccess权限,详情请参见授予OSS和DLF权限

说明

如果您想要将JAR包存储在阿里云OSS上,需要先开通对象存储OSS服务,详情请参见开通OSS服务

步骤一:角色授权

使用EMR on ACK前,需要在EMR on ACK控制台授予您的阿里云账号AliyunEMROnACKDefaultRole系统默认角色,详情请参见阿里云账号角色授权

步骤二:创建集群

基于Kubernetes创建一个Spark集群。更多集群创建的信息,请参见创建集群

  1. 登录EMR on ACK控制台

  2. 在EMR on ACK页面,单击创建集群

  3. EMR on ACK页面,完成集群相关配置。

    参数

    示例

    描述

    地域

    华东1(杭州)

    创建的集群会在对应的地域内,一旦创建不能修改。

    集群类型

    Spark

    通用的分布式大数据处理引擎,提供了ETL、离线批处理和数据建模等能力。

    重要

    创建Spark集群后,如果您需要关联集群,则所选产品版本的大版本号需要和关联的Shuffle Service集群大版本号一致。例如,EMR-5.x-ack版本的Spark集群只能关联EMR-5.x-ack版本的Shuffle Service集群。

    产品版本

    EMR-5.6.0-ack

    默认最新的软件版本。

    组件版本

    SPARK (3.2.1)

    所选集群类型下的组件及组件版本信息。

    ACK集群

    Emr-ack

    选择已有的ACK集群,或者在容器服务ACK控制台新建ACK集群。

    重要

    同一个ACK集群,不可关联同类型的多个EMR on ACK集群。

    单击配置专属节点,可以配置EMR专属节点。配置专属节点可以对节点池或节点打上EMR专属的污点和标签。

    说明

    推荐您使用节点池的方式来配置专属节点,如果没有节点池,请创建节点池,详情请参见创建节点池。节点池相关的信息,请参见节点池概述

    OSS Bucket

    oss-spark-test

    选择已有的Bucket,或者在对象存储OSS控制台新建Bucket。

    集群名称

    Emr-Spark

    集群的名字,长度限制为1~64个字符,仅可使用中文、字母、数字、中划线(-)和下划线(_)。

  4. 单击创建

    当集群状态显示为运行中时,表示集群创建成功。

步骤三:提交作业

集群创建成功后,您可以提交作业。本文以通过CRD方式提交Spark作业为例介绍。关于Spark的更多介绍,可以参见开源文档Quick Start,选择适合您的语言和版本。

提交作业的详细信息请参见:

  1. 通过kubectl连接Kubernetes集群,详情请参见获取集群KubeConfig并通过kubectl工具连接集群

  2. 新建spark-pi.yaml文件,文件内容如下。

    apiVersion: "sparkoperator.k8s.io/v1beta2"
    kind: SparkApplication
    metadata:
      name: spark-pi-simple
    spec:
      type: Scala
      sparkVersion: 3.2.1
      mainClass: org.apache.spark.examples.SparkPi
      mainApplicationFile: "local:///opt/spark/examples/spark-examples.jar"
      arguments:
        - "1000"
      driver:
        cores: 1
        coreLimit: 1000m
        memory: 4g
      executor:
        cores: 1
        coreLimit: 1000m
        memory: 8g
        memoryOverhead: 1g
        instances: 1

    本文示例中的参数描述,请参见spark-on-k8s-operator

    说明
    • 文件名您可以自定义,本文以spark-pi.yaml为例介绍。

    • 本文以Spark 3.2.1(EMR-5.6.0)版本为例,其他版本时请修改sparkVersion的配置。

  3. 执行如下命令,提交作业。

    kubectl apply -f spark-pi.yaml --namespace <集群对应的namespace>

    本文示例代码中的<集群对应的namespace>,需要替换为集群的命名空间,您可以登录E-MapReduce on ACK控制台,在集群详情页面查看。

    返回如下信息。

    sparkapplication.sparkoperator.k8s.io/spark-pi-simple created
    说明

    spark-pi-simple为本示例提交任务后的作业名。

  4. 可选:您可以在作业详情页面查看已创建的作业信息。

(可选)步骤四:释放集群

如果您创建的集群不再使用时,可以释放集群节约成本。

  1. 在EMR on ACK页面,单击目标集群操作列的释放

  2. 释放集群对话框中,单击确定

相关文档