教程:使用 IntelliJ 在 HDInsight 中创建适用于 Apache Spark 的 Scala Maven 应用程序
本教程介绍如何结合使用 Apache Maven 和 IntelliJ IDEA 创建用 Scala 编写的 Apache Spark 应用程序。 本文使用 Apache Maven 作为生成系统, 并从 IntelliJ IDEA 提供的适用于 Scala 的现有 Maven 原型开始。 在 IntelliJ IDEA 中创建 Scala 应用程序需要以下步骤:
- 将 Maven 用作生成系统。
- 更新项目对象模型 (POM) 文件,以解析 Spark 模块依赖项。
- 使用 Scala 编写应用程序。
- 生成可以提交到 HDInsight Spark 群集的 jar 文件。
- 使用 Livy 在 Spark 群集上运行应用程序。
在本教程中,你将了解如何执行以下操作:
- 安装适用于 IntelliJ IDEA 的 Scala 插件
- 使用 IntelliJ 开发 Scala Maven 应用程序
- 创建独立 Scala 项目
先决条件
HDInsight 上的 Apache Spark 群集。 有关说明,请参阅在 Azure HDInsight 中创建 Apache Spark 群集。
Oracle Java 开发工具包。 本教程使用 Java 版本 8.0.202。
Java IDE。 本文使用 IntelliJ IDEA Community 2018.3.4。
Azure Toolkit for IntelliJ。 请参阅安装 Azure Toolkit for IntelliJ。
安装适用于 IntelliJ IDEA 的 Scala 插件
执行以下步骤安装 Scala 插件:
打开 IntelliJ IDEA。
在欢迎屏幕上,导航到“配置”>“插件”打开“插件”窗口。
为 Azure Toolkit for IntelliJ 选择“安装”。
选择在新窗口中作为特色功能列出的 Scala 插件对应的“安装”。
成功安装该插件后,必须重启 IDE。
使用 IntelliJ 创建应用程序
启动 IntelliJ IDEA,选择“创建新项目”打开“新建项目”窗口。
从左侧窗格中选择“Apache Spark/HDInsight”。
在主窗口中选择“Spark 项目(Scala)”。
从“生成工具”下拉列表中,选择以下值之一:
- Maven:支持 Scala 项目创建向导。
- SBT:用于管理依赖项和生成 Scala 项目。
选择“下一页”。
在“新建项目”窗口中提供以下信息:
属性 说明 项目名称 输入名称。 项目位置 输入项目保存位置。 项目 SDK 首次使用 IDEA 时,此字段将为空。 选择“新建...”并导航到 JDK。 Spark 版本 创建向导集成了适当版本的 Spark SDK 和 Scala SDK。 如果 Spark 群集版本低于 2.0,请选择“Spark 1.x” 。 否则,请选择“Spark 2.x” 。 本示例使用“Spark 2.3.0 (Scala 2.11.8)”。 选择“完成”。
创建独立 Scala 项目
启动 IntelliJ IDEA,选择“创建新项目”打开“新建项目”窗口。
在左窗格中选择“Maven”。
指定“项目 SDK”。 如果此字段是空白的,请选择“新建...”并导航到 Java 安装目录。
选中“从原型创建”复选框。
从原型列表中,选择
org.scala-tools.archetypes:scala-archetype-simple
。 此原型会创建适当的目录结构,并下载所需的默认依赖项来编写 Scala 程序。选择“下一步”。
展开“项目坐标”。 提供 GroupId 和 ArtifactId 的相关值。 “名称”和“位置”将自动填充。 本教程涉及以下值:
- GroupId: com.microsoft.spark.example
- ArtifactId: SparkSimpleApp
选择“下一步”。
验证设置,并选择“下一步”。
验证项目名称和位置,并选择“完成”。 导入项目需要花费几分钟时间。
导入项目后,在左窗格中导航到“SparkSimpleApp”>“src”>“test”>“scala”>“com”>“microsoft”>“spark”>“example”。 右键单击“MySpec”并选择“删除...” 。应用程序不需要此文件。 在对话框中选择“确定”。
后续步骤会更新 pom.xml 以定义 Spark Scala 应用程序的依赖项。 若要自动下载和解析这些依赖项,你必须配置 Maven。
在“文件”菜单中,选择“设置”打开“设置”窗口。
在“设置”窗口中,导航到“生成、执行、部署”>“生成工具”>“Maven”>“导入”。
选中“自动导入 Maven 项目”复选框。
依次选择“应用”、“确定” 。 然后将返回到项目窗口。
:::image type="content" source="./media/apache-spark-create-standalone-application/configure-maven-download.png" alt-text="Configure Maven for automatic downloads." border="true":::
在左侧窗格中,导航到“src”>“main”>“scala”>“com.microsoft.spark.example”,然后双击“应用”打开 App.scala。
将当前示例代码替换为以下代码,然后保存所做的更改。 此代码从 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") } }
在左侧窗格中,双击“pom.xml”。
在
<project>\<properties>
中添加以下段:<scala.version>2.11.8</scala.version> <scala.compat.version>2.11.8</scala.compat.version> <scala.binary.version>2.11</scala.binary.version>
在
<project>\<dependencies>
中添加以下段:<dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_${scala.binary.version}</artifactId> <version>2.3.0</version> </dependency>
Save changes to pom.xml.
创建 .jar 文件。 IntelliJ IDEA 允许创建 JAR,将其作为项目的一项。 执行以下步骤。
在“文件”菜单中,选择“项目结构...”。
在“项目结构”窗口中,导航到“项目”>“+”>“JAR”>“从包含依赖项的模块...”。
在“从模块创建 JAR”窗口中,选择“主类”文本框中的文件夹图标。
在“选择主类”窗口中,选择默认显示的类,然后选择“确定” 。
在“从模块创建 JAR”窗口中,确保已选择“提取到目标 JAR”选项,然后选择“确定” 。 这设置会创建包含所有依赖项的单个 JAR。
“输出布局”选项卡列出了所有包含为 Maven 项目一部分的 jar。 可以选择并删除 Scala 应用程序不直接依赖的 jar。 对于此处创建的应用程序,可以删除最后一个(SparkSimpleApp 编译输出)以外的所有 jar。 选择要删除的 jar,然后选择减号 - 。
确保选中“包含在项目生成中”复选框。 此选项可确保每次生成或更新项目时都创建 jar。 依次选择“应用”、“确定” 。
若要创建 jar,请导航到“生成”>“生成项目”>“生成”。 该项目将在大约 30 秒内完成编译。 输出 jar 会在 \out\artifacts 下创建。
在 Apache Spark 群集上运行应用程序
若要在群集上运行应用程序,可以使用以下方法:
将应用程序 jar 复制到与群集关联的 Azure 存储 blob。 可以使用命令行实用工具 AzCopy 来执行此操作。 也可以使用许多其他客户端来上传数据。 有关详细信息,请参阅在 HDInsight 中上传 Apache Hadoop 作业的数据。
使用 Apache Livy 将应用程序作业远程提交到 Spark 群集。 HDInsight 上的 Spark 群集包括公开 REST 终结点的 Livy,可远程提交 Spark 作业。 有关详细信息,请参阅将 Apache Livy 与 HDInsight 上的 Apache Spark 群集配合使用以远程提交 Spark 作业。
清理资源
如果不打算继续使用此应用程序,请使用以下步骤删除创建的群集:
登录 Azure 门户。
在顶部的“搜索”框中,键入 HDInsight。
选择“服务”下的“HDInsight 群集” 。
在显示的 HDInsight 群集列表中,选择为本教程创建的群集旁边的“...”。
选择“删除”。 请选择“是”。
后续步骤
本文介绍了如何创建 Apache Spark scala 应用程序。 转到下一文章,了解如何使用 Livy 在 HDInsight Spark 群集上运行此应用程序。