JAR开发快速入门

您可以自行编写并构建包含业务逻辑的JAR包,上传此业务JAR包后,即可便捷地开发Spark JAR。本文通过两个示例,为您演示如何进行JAR任务的开发与部署。

前提条件

  • 已创建工作空间,详情请参见管理工作空间

  • 已提前完成业务应用程序开发,并构建好JAR包。

操作步骤

步骤一:开发JAR

EMR Serverless Spark中,不直接提供集成的JAR包开发环境,因此需要您在本地或独立的开发平台上完成Spark应用的编码和打包成JAR文件。本文提供两个示例供您参考。

Maven项目的pom.xml文件中,需添加与Spark相关的依赖项。鉴于 Serverless Spark 运行环境已内置这些依赖,将 scope 设置为 provided 可避免重复打包和版本冲突,同时仍保留编译和测试阶段的可用性。

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.12</artifactId>
    <version>3.5.2</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.12</artifactId>
    <version>3.5.2</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-hive_2.12</artifactId>
    <version>3.5.2</version>
    <scope>provided</scope>
</dependency>

查询DLF

public class HiveTableAccess {
    public static void main(String[] args) {
        SparkSession spark = SparkSession.builder()
                .appName("DlfTableAccessExample")
                .enableHiveSupport()
                .getOrCreate();
        spark.sql("SELECT * FROM test_table").show();
        spark.stop();
    }
}

计算圆周率π近似值

import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.sql.SparkSession;

import java.util.ArrayList;
import java.util.List;

/**
 * Computes an approximation to pi
 * Usage: JavaSparkPi [partitions]
 */
public final class JavaSparkPi {

  public static void main(String[] args) throws Exception {
    SparkSession spark = SparkSession
      .builder()
      .appName("JavaSparkPi")
      .getOrCreate();

    JavaSparkContext jsc = new JavaSparkContext(spark.sparkContext());

    int slices = (args.length == 1) ? Integer.parseInt(args[0]) : 2;
    int n = 100000 * slices;
    List<Integer> l = new ArrayList<>(n);
    for (int i = 0; i < n; i++) {
      l.add(i);
    }

    JavaRDD<Integer> dataSet = jsc.parallelize(l, slices);

    int count = dataSet.map(integer -> {
      double x = Math.random() * 2 - 1;
      double y = Math.random() * 2 - 1;
      return (x * x + y * y <= 1) ? 1 : 0;
    }).reduce((integer, integer2) -> integer + integer2);

    System.out.println("Pi is roughly " + 4.0 * count / n);

    spark.stop();
  }
}

单击SparkExample-1.0-SNAPSHOT.jar,直接下载测试JAR包。

步骤二:上传JAR

  1. 进入资源上传页面。

    1. 登录E-MapReduce控制台

    2. 在左侧导航栏,选择EMR Serverless > Spark

    3. Spark页面,单击目标工作空间名称。

    4. EMR Serverless Spark页面,单击左侧导航栏中的文件管理

  2. 文件管理页面,单击上传文件

  3. 上传文件对话框中,单击待上传文件区域选择本地JAR包,或者直接拖拽JAR包到待上传文件区域。

    本文示例是上传SparkExample-1.0-SNAPSHOT.jar。

步骤三:开发并运行任务

  1. EMR Serverless Spark页面,单击左侧的数据开发

  2. 开发目录页签下,单击image图标。

  3. 输入名称,类型选择批任务 > JAR,然后单击确定

  4. 在右上角选择队列。

    添加队列的具体操作,请参见管理资源队列

  5. 在新建的任务开发中,配置以下信息,其余参数无需配置,然后单击运行

    参数

    说明

    jar资源

    选择前一个步骤中上传的JAR包。本文示例是SparkExample-1.0-SNAPSHOT.jar。

    Main Class

    提交Spark任务时所指定的主类。

    • 计算圆周率π近似值:示例填写为org.example.JavaSparkPi

    • 查询Hive表:示例填写为org.example.HiveTableAccess

  6. 运行任务后,在下方的运行记录区域,单击任务操作列的日志探查,您可以查看相关的日志信息。

    image

    image

步骤四:发布任务

重要

已发布的任务可以作为工作流节点的任务。

  1. 任务运行完成后,单击右侧的发布

  2. 在弹出的对话框中,可以输入发布信息,然后单击确定

(可选)步骤五:查看Spark UI

任务正常运行后,您可以在Spark UI上查看任务的运行情况。

  1. 在左侧导航栏,单击任务历史

  2. Application页面,单击目标任务操作列的Spark UI

  3. Spark Jobs页面,您可以查看任务详情。

    image

相关文档

任务发布完成后,您可以在工作流调度中使用,详情请参见管理工作流。任务编排完整的开发流程示例,请参见SparkSQL开发快速入门