教程:使用 IntelliJ 在 HDInsight 中创建适用于 Spark 的 Scala Maven 应用程序

本教程介绍如何结合使用 Maven 和 IntelliJ IDEA 创建用 Scala 编写的 Spark 应用程序。 本文将 Apache Maven 用作生成系统,并从 IntelliJ IDEA 提供的 Scala 现有 Maven 原型开始。 在 IntelliJ IDEA 中创建 Scala 应用程序需要以下步骤:

  • 将 Maven 用作生成系统。
  • 更新项目对象模型 (POM) 文件以解析 Spark 模块依赖项。
  • 在 Scala 中编写应用程序。
  • 生成可提交到 HDInsight Spark 群集的 jar 文件。
  • 使用 Livy 在 Spark 群集上运行应用程序。

Note

HDInsight 还提供了一个 IntelliJ IDEA 插件工具,用于简化在 Linux 上创建应用程序并提交到 HDInsight Spark 群集的过程。 有关详细信息,请参阅使用适用于 IntelliJ IDEA 的 HDInsight 工具插件创建和提交 Spark 应用程序

本教程介绍如何执行下列操作:

  • 使用 IntelliJ 开发 Scala Maven 应用程序

如果没有 Azure 订阅,请在开始前创建一个试用帐户

先决条件

使用 IntelliJ 创建应用程序

  1. 启动 IntelliJ IDEA 并创建一个项目。 在“新建项目”对话框中执行以下操作:

    a. 选择“HDInsight” > “Spark on HDInsight (Scala)”

    b. 在“生成工具”列表中,根据需要选择以下选项之一:

    • 用于支持 Scala 项目创建向导的“Maven”
    • 用于管理依赖项和生成 Scala 项目的“SBT”

    “新建项目”对话框

  2. 选择“下一步”。

  3. Scala 项目创建向导会自动检测是否安装了 Scala 插件。 选择“安装”。

    Scala 插件检查

  4. 若要下载 Scala 插件,请选择“确定”。 请遵照说明重启 IntelliJ。

    Scala 插件安装对话框

  5. 在“新建项目”窗口中执行以下操作:

    选择 Spark SDK

    a. 输入项目名称和位置。

    b. 在“项目 SDK”下拉列表中,选择适用于 Spark 2.x 群集的“Java 1.8”,或选择适用于 Spark 1.x 群集的“Java 1.7”。

    c. 在“Spark 版本”下拉列表中,Scala 项目创建向导集成了 Spark SDK 和 Scala SDK 的适当版本。 如果 Spark 群集版本低于 2.0,请选择“Spark 1.x”。 否则,请选择“Spark 2.x”。 本示例使用“Spark 2.0.2 (Scala 2.11.8)”。

  6. 选择“完成”。

安装适用于 IntelliJ IDEA 的 Scala 插件

若要安装 Scala 插件,请使用以下步骤:

  1. 打开 IntelliJ IDEA。
  2. 欢迎屏幕上,依次选择配置、插件

    启用 scala 插件

  3. 选择左下角的“安装 JetBrains 插件”。
  4. 在“浏览 JetBrains 插件”对话框中搜索 Scala,并选择“安装”。

    安装 scala 插件

  5. 成功安装该插件后,必须重启 IDE。

创建独立 Scala 项目

  1. 打开 IntelliJ IDEA。
  2. 从“文件”菜单中选择“新建”>“项目”,创建新的项目。
  3. 在“新建项目”对话框中做出以下选择:

    创建 Maven 项目

    • 选择“Maven” 作为项目类型。
    • 指定“项目 SDK” 。 选择“新建”并导航到 Java 安装目录,通常是 C:\Program Files\Java\jdk1.8.0_66
    • 选择“从原型创建” 选项。
    • 从原型列表中,选择“org.scala-tools.archetypes:scala-archetype-simple” 。 此原型会创建适当的目录结构,并下载所需的默认依赖项来编写 Scala 程序。
  4. 选择“下一步”。
  5. 提供 GroupIdArtifactIdVersion 的相关值。 本教程涉及以下值:

    • GroupId: com.microsoft.spark.example
    • ArtifactId: SparkSimpleApp
  6. 选择“下一步”。
  7. 验证设置,并选择“下一步”。
  8. 验证项目名称和位置,并选择“完成”。
  9. 在左侧窗格中,选择“src”>“测试”>“scala”>“com”>“microsoft”>“spark”>“示例”,右键单击“MySpec”,并选择“删除”。 应用程序不需要此文件。

  10. 后续步骤会更新 pom.xml 以定义 Spark Scala 应用程序的依赖项。 若要自动下载并解析这些依赖项,必须相应地配置 Maven。

    配置 Maven 以进行自动下载

    1. 从“文件”菜单中,选择“设置”。
    2. 在“设置”对话框中,导航到“生成、执行、部署” > “生成工具” > “Maven” > “导入”。
    3. 选择“自动导入 Maven 项目”选项。
    4. 依次选择“应用”、“确定”。
  11. 在左侧窗格中,选择“src”>“main”>“scala”>“com.microsoft.spark.example”,然后双击“应用”以打开 App.scala。

  12. 将当前示例代码替换为以下代码,然后保存所做的更改。 此代码从 HVAC.csv(所有 HDInsight Spark 群集均有该文件)中读取数据,检索第六列中只有一个数字的行,并将输出写入群集的默认存储容器下的 /HVACOut

    package com.microsoft.spark.example
    
    import org.apache.spark.SparkConf
    import org.apache.spark.SparkContext
    
    /**
      * Test IO to wasb
      */
    object WasbIOTest {
      def main (arg: Array[String]): Unit = {
        val conf = new SparkConf().setAppName("WASBIOTest")
        val sc = new SparkContext(conf)
    
        val rdd = sc.textFile("wasb:///HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv")
    
        //find the rows which have only one digit in the 7th column in the CSV
        val rdd1 = rdd.filter(s => s.split(",")(6).length() == 1)
    
        rdd1.saveAsTextFile("wasb:///HVACout")
      }
    }
    
  13. 在左侧窗格中,双击“pom.xml”。

    1. <project>\<properties> 中添加以下段:

      <scala.version>2.10.4</scala.version> <scala.compat.version>2.10.4</scala.compat.version> <scala.binary.version>2.10</scala.binary.version>

    2. <project>\<dependencies> 中添加以下段:

      <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_${scala.binary.version}</artifactId>
        <version>1.4.1</version>
      </dependency>
      

      将更改保存到 pom.xml。

  14. 创建 .jar 文件。 IntelliJ IDEA 允许创建 JAR,作为项目的一个项目 (artifact)。 执行以下步骤。

    1. 在“文件”菜单中,选择“项目结构”。
    2. 在“项目结构”对话框中,选择“项目”,并选择加号。 在弹出的对话框中,选择“JAR”,并选择“从包含依赖项的模块”。

      创建 JAR

    3. 在“从模块创建 JAR”对话框中,选择“主类”旁边的省略号 (ellipsis)。

    4. 在“选择主类”对话框中,选择默认显示的类,并选择“确定”。

      创建 JAR

    5. 在“从模块创建 JAR”对话框中,确保已选择“提取到目标 JAR”选项,并选择“确定”。 这设置会创建包含所有依赖项的单个 JAR。

      创建 JAR

    6. “输出布局”选项卡列出了所有包含为 Maven 项目一部分的 jar。 可以选择并删除 Scala 应用程序不直接依赖的 jar。 对于此处创建的应用程序,可以删除最后一个(SparkSimpleApp 编译输出)以外的所有 jar。 选择要删除的 jar,并选择“删除”图标。

      创建 JAR

      请务必选中“包含在项目生成中”框,以确保每次生成或更新项目时都创建 jar。 选择“应用”,并选择“确定”。

    7. 从“生成”菜单中,选择“生成项目”以创建 jar。 输出 jar 会在 \out\artifacts 下创建。

      创建 JAR

在 Spark 群集上运行应用程序

若要在群集上运行应用程序,可以使用以下方法:

后续步骤

本文介绍了如何创建 Spark scala 应用程序。 转到下一文章,了解如何使用 Livy 在 HDInsight Spark 群集上运行此应用程序。