使用 Azure Toolkit for Eclipse 为 HDInsight 群集创建 Apache Spark 应用程序Use Azure Toolkit for Eclipse to create Apache Spark applications for an HDInsight cluster

在 Azure Toolkit for Eclipse 中使用 HDInsight 工具开发以 Scala 编写的 Apache Spark 应用程序,并直接从 Eclipse IDE 将其提交到 Azure HDInsight Spark 群集。Use HDInsight Tools in Azure Toolkit for Eclipse to develop Apache Spark applications written in Scala and submit them to an Azure HDInsight Spark cluster, directly from the Eclipse IDE. 可以通过多种不同方式使用 HDInsight 工具插件:You can use the HDInsight Tools plug-in in a few different ways:

  • 在 HDInsight Spark 群集中开发和提交 Scala Spark 应用程序To develop and submit a Scala Spark application on an HDInsight Spark cluster
  • 访问 Azure HDInsight Spark 群集资源To access your Azure HDInsight Spark cluster resources
  • 本地开发和运行 Scala Spark 应用程序To develop and run a Scala Spark application locally

必备条件Prerequisites

安装所需插件Install required plug-ins

安装用于 Eclipse 的 Azure 工具包Install Azure Toolkit for Eclipse

有关安装说明,请参阅安装用于 Eclipse 的 Azure 工具包For installation instructions, see Installing Azure Toolkit for Eclipse.

安装 Scala 插件Install the Scala plug-in

打开 Eclipse 时,HDInsight 工具会自动检测是否安装了 Scala 插件。When you open Eclipse, HDInsight Tools automatically detects whether you installed the Scala plug-in. 选择“确定”继续,然后按照说明从 Eclipse Marketplace 安装插件。 Select OK to continue, and then follow the instructions to install the plug-in from the Eclipse Marketplace. 安装完成后重启 IDE。Restart the IDE after installation completes.

自动安装 Scala 插件

确认插件Confirm plug-ins

  1. 导航到“帮助” > “Eclipse Marketplace...” 。Navigate to Help > Eclipse Marketplace....

  2. 选择“已安装”选项卡 。Select the Installed tab.

  3. 至少应该看到:You should see at least:

    • Azure Toolkit for Eclipse <版本>。Azure Toolkit for Eclipse <version>.
    • Scala IDE <版本>。Scala IDE <version>.

登录到 Azure 订阅Sign in to your Azure subscription

  1. 启动 Eclipse IDE。Start Eclipse IDE.

  2. 导航到“窗口” > “显示视图” > 其他…” > “登录…” 。Navigate to Window > Show View > Other... > Sign In...

  3. 从“显示视图”对话框中导航到“Azure” > “Azure 资源管理器”,然后选择“打开” 。From the Show View dialog, navigate to Azure > Azure Explorer, and then select Open.

    Apache Spark Eclipse 显示视图

  4. 在 Azure 资源管理器中右键单击“Azure”节点,然后选择“登录” 。From Azure Explorer, right-click the Azure node, and then select Sign in.

  5. 在“Azure 登录”对话框框中,选择“身份验证方法”,选择“登录”并完成登录过程 。In the Azure Sign In dialog box, choose the authentication method, select Sign in, and complete the sign-in process.

    Apache Spark Eclipse Azure 登录

  6. 登录之后,“你的订阅” 对话框会列出与凭据关联的所有 Azure 订阅。After you're signed in, the Your Subscriptions dialog box lists all the Azure subscriptions associated with the credentials. 按“选择” 关闭对话框。Press Select to close the dialog box.

    “选择订阅”对话框

  7. 从“Azure 资源管理器”选项卡导航到“Azure” > “HDInsight”,查看订阅下的 HDInsight Spark 群集 。From Azure Explorer, navigate to Azure > HDInsight to see the HDInsight Spark clusters under your subscription.

    Azure 资源管理器 3 中的 HDInsight Spark 群集

  8. 可以进一步展开群集名称节点,查看与群集关联的资源(例如存储帐户)。You can further expand a cluster name node to see the resources (for example, storage accounts) associated with the cluster.

    展开群集名称可查看资源

可以使用 Ambari 管理的用户名链接标准群集。You can link a normal cluster by using the Ambari managed username. 同样,对于已加入域的 HDInsight 群集,也可使用这种域和用户名(例如 user1@contoso.com)进行链接。Similarly, for a domain-joined HDInsight cluster, you can link by using the domain and username, such as user1@contoso.com.

  1. 在“Azure 资源管理器”中右键单击“HDInsight”,然后选择“链接群集” 。From Azure Explorer, right-click HDInsight, and select Link A Cluster.

    Azure 资源管理器链接群集菜单

  2. 输入“群集名称”、“用户名”和“密码”,然后选择“确定” 。Enter Cluster Name, User Name, and Password, then select OK. (可选)输入“存储帐户”、“存储密钥”,然后选择“存储资源管理器”,以便存储资源管理器在左侧树状视图中工作Optionally, enter Storage Account, Storage Key and then select Storage Container for storage explorer to work in the left tree view

    链接新的 HDInsight 群集对话框

    Note

    如果群集已登录到 Azure 订阅中并且已链接群集,则我们使用链接存储密钥、用户名和密码。We use the linked storage key, username and password if the cluster both logged in Azure subscription and Linked a cluster. Azure 资源管理器存储帐户Azure Explorer storage accounts

    对于仅使用键盘的用户,当前焦点位于“存储密钥” 时,需要使用 Ctrl + TAB 来聚焦于对话框中的下一个字段。For the keyboard only user, when the current focus is at Storage Key, you need to use Ctrl+TAB to focus on the next field in the dialog.

  3. 可在 HDInsight 下看到链接的群集 。You can see the linked cluster under HDInsight. 现在可以将应用程序提交到此链接群集。Now you can submit an application to this linked cluster.

    Azure 资源管理器 hdi 链接群集

  4. 还可以从 Azure 资源管理器取消链接群集。You also can unlink a cluster from Azure Explorer.

    Azure 资源管理器取消链接群集

为 HDInsight Spark 群集设置 Spark Scala 项目Set up a Spark Scala project for an HDInsight Spark cluster

  1. 在 Eclipse IDE 工作区中选择“文件” > “新建” > “项目…” 。From the Eclipse IDE workspace, select File > New > Project....

  2. 在“新建项目”向导中选择“HDInsight 项目” > “Spark on HDInsight (Scala)” 。In the New Project wizard, select HDInsight Project > Spark on HDInsight (Scala). 然后,选择“下一步” 。Then select Next.

    选择 Spark on HDInsight (Scala) 项目

  3. 在“新建 HDInsight Scala 项目”对话框中提供以下值,然后选择“下一步”: In the New HDInsight Scala Project dialog box, provide the following values, and then select Next:

    • 输入项目的名称。Enter a name for the project.
    • 在“JRE” 区域中,确保“使用执行环境 JRE” 设置为“JavaSE-1.7” 或更高版本。In the JRE area, make sure that Use an execution environment JRE is set to JavaSE-1.7 or later.
    • 在“Spark 库” 区域中,可以选择“使用 Maven 配置 Spark SDK” 选项。In the Spark Library area, you can choose Use Maven to configure Spark SDK option. 我们的工具集成了适当版本的 Spark SDK 和 Scala SDK。Our tool integrates the proper version for Spark SDK and Scala SDK. 也可以选择“手动添加 Spark SDK” 选项,手动下载并添加 Spark SDK。You can also choose Add Spark SDK manually option, download, and add Spark SDK by manually.

    “新建 HDInsight Scala 项目”对话框

  4. 在下一个对话框中查看详细信息,然后选择“完成” 。In the next dialog box, review the details, and then select Finish.

为 HDInsight Spark 群集创建 Scala 应用程序Create a Scala application for an HDInsight Spark cluster

  1. 在“包资源管理器”中展开之前创建的项目 。From Package Explorer, expand the project that you created earlier. 右键单击“src”,选择“新建” > “其他…” 。Right-click src, select New > Other....

  2. 在“选择一个向导”对话框中选择“Scala 向导” > “Scala 对象” 。In the Select a wizard dialog box, select Scala Wizards > Scala Object. 然后,选择“下一步” 。Then select Next.

    选择向导“创建 Scala 对象”

  3. 在“创建新文件”对话框中,输入对象的名称,然后选择“完成”。 In the Create New File dialog box, enter a name for the object, and then select Finish. 将打开一个文本编辑器。A text editor will open.

    新建文件向导“新建文件”

  4. 在文本编辑器中,将当前内容替换为以下代码:In the text editor, replace the current contents with the code below:

    import org.apache.spark.SparkConf
    import org.apache.spark.SparkContext
    
    object MyClusterApp{
        def main (arg: Array[String]): Unit = {
        val conf = new SparkConf().setAppName("MyClusterApp")
        val sc = new SparkContext(conf)
    
        val rdd = sc.textFile("wasbs:///HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv")
    
        //find the rows that have only one digit in the seventh column in the CSV
        val rdd1 =  rdd.filter(s => s.split(",")(6).length() == 1)
    
        rdd1.saveAsTextFile("wasbs:///HVACOut")
        }
    }
    
  5. 在 HDInsight Spark 群集中运行该应用程序:Run the application on an HDInsight Spark cluster:

    a.a. 在“包资源管理器” 中,右键单击项目名称,然后选择“将 Spark 应用程序提交到 HDInsight”。From Package Explorer, right-click the project name, and then select Submit Spark Application to HDInsight.
    b.b. 在“Spark 提交”对话框中提供以下值,然后选择“提交”: In the Spark Submission dialog box, provide the following values, and then select Submit:

    • 对于“群集名称” ,选择要在其上运行应用程序的 HDInsight Spark 群集。For Cluster Name, select the HDInsight Spark cluster on which you want to run your application.

    • 从 Eclipse 项目或硬盘中选择一个项目。Select an artifact from the Eclipse project, or select one from a hard drive. 默认值取决于从包资源管理器右键单击的项。The default value depends on the item that you right-click from Package Explorer.

    • 在“主类名”下拉列表中,提交向导将显示项目中的所有对象名。 In the Main class name drop-down list, the submission wizard displays all object names from your project. 选择或输入要运行的对象的名称。Select or enter one that you want to run. 如果从硬盘中选择项目,必须手动输入主类名。If you selected an artifact from a hard drive, you must enter the main class name manually.

    • 由于本示例中的应用程序代码不需要任何命令行参数,也不需要引用 JAR 或文件,因此可以将其余的文本框留空。Because the application code in this example does not require any command-line arguments or reference JARs or files, you can leave the remaining text boxes empty.

      “Spark 提交”对话框

  6. “Spark 提交” 选项卡应开始显示进度。The Spark Submission tab should start displaying the progress. 可以通过选择“Spark 提交”窗口中的红色按钮停止应用程序。 You can stop the application by selecting the red button in the Spark Submission window. 也可以选择地球图标(以图中的蓝色框表示),查看此特定应用程序运行的日志。You can also view the logs for this specific application run by selecting the globe icon (denoted by the blue box in the image).

    “Spark 提交”窗口

使用 Azure Toolkit for Eclipse 中的 HDInsight 工具访问和管理 HDInsight Spark 群集Access and manage HDInsight Spark clusters by using HDInsight Tools in Azure Toolkit for Eclipse

可以使用 HDInsight 工具执行各种操作,包括访问作业输出。You can perform various operations by using HDInsight Tools, including accessing the job output.

访问作业视图Access the job view

  1. 在“Azure 资源管理器”中依次展开“HDInsight”和 Spark 群集名称,然后选择“作业” 。In Azure Explorer, expand HDInsight, then the Spark cluster name, and then select Jobs.

    “作业视图”节点

  2. 选择“作业”节点。 Select the Jobs node. 如果 Java 版本低于 1.8,HDInsight 工具会自动提醒你安装 E(fx)clipse 插件。If Java version is lower than 1.8, HDInsight Tools automatically reminder you install the E(fx)clipse plug-in. 选择“确定”继续,然后按照向导指示从 Eclipse Marketplace 安装该插件并重启 Eclipse。 Select OK to continue, and then follow the wizard to install it from the Eclipse Marketplace and restart Eclipse.

    安装 E(fx)clipse

  3. 从“作业”节点打开作业视图。 Open the Job View from the Jobs node. 在右窗格中,“Spark 作业视图” 选项卡显示了群集上运行的所有应用程序。In the right pane, the Spark Job View tab displays all the applications that were run on the cluster. 选择想要查看其详细信息的应用程序的名称。Select the name of the application for which you want to see more details.

    应用程序详细信息

    然后,可以执行以下任一操作:You can then take any of these actions:

    • 将鼠标悬停在作业图上。Hover on the job graph. 将显示有关运行作业的基本信息。It displays basic info about the running job. 选择作业图,可以看到每个作业生成的阶段和信息。Select the job graph, and you can see the stages and info that every job generates.

      作业阶段详细信息

    • 选择“日志”选项卡查看常用的日志,包括“驱动程序 Stderr”、“驱动程序 Stdout”和“目录信息”。 Select the Log tab to view frequently used logs, including Driver Stderr, Driver Stdout, and Directory Info.

      日志详细信息

    • 选择窗口顶部的超链接打开 Spark 历史记录 UI 和 Apache Hadoop YARN UI(应用程序级别)。Open the Spark history UI and the Apache Hadoop YARN UI (at the application level) by selecting the hyperlinks at the top of the window.

访问群集的存储容器Access the storage container for the cluster

  1. 在 Azure 资源管理器中展开“HDInsight” 根节点,查看可用 HDInsight Spark 群集的列表。In Azure Explorer, expand the HDInsight root node to see a list of HDInsight Spark clusters that are available.

  2. 展开群集名称以查看群集的存储帐户和默认存储容器。Expand the cluster name to see the storage account and the default storage container for the cluster.

    存储帐户和默认存储容器

  3. 选择与群集关联的存储容器名称。Select the storage container name associated with the cluster. 在右窗格中,双击“HVACOut”文件夹。 In the right pane, double-click the HVACOut folder. 打开其中一个 part- 文件可查看应用程序的输出。Open one of the part- files to see the output of the application.

访问 Spark 历史记录服务器Access the Spark history server

  1. 在“Azure 资源管理器” 中,右键单击 Spark 群集名称,然后选择“打开 Spark 历史记录 UI”。In Azure Explorer, right-click your Spark cluster name, and then select Open Spark History UI. 出现提示时,请输入群集的管理员凭据。When you're prompted, enter the admin credentials for the cluster. 预配群集时已指定这些凭据。You specified these while provisioning the cluster.
  2. 在“Spark 历史记录服务器”仪表板中,可以使用应用程序名称查找刚运行完的应用程序。In the Spark history server dashboard, you use the application name to look for the application that you just finished running. 在上述代码中,已使用 val conf = new SparkConf().setAppName("MyClusterApp") 设置了应用程序名称。In the preceding code, you set the application name by using val conf = new SparkConf().setAppName("MyClusterApp"). 因此,Spark 应用程序名称为“MyClusterApp”。 So, your Spark application name was MyClusterApp.

启动 Apache Ambari 门户Start the Apache Ambari portal

  1. 在“Azure 资源管理器” 中,右键单击 Spark 群集名称,然后选择“打开群集管理门户(Ambari)”。In Azure Explorer, right-click your Spark cluster name, and then select Open Cluster Management Portal (Ambari).
  2. 出现提示时,请输入群集的管理员凭据。When you're prompted, enter the admin credentials for the cluster. 预配群集时已指定这些凭据。You specified these while provisioning the cluster.

管理 Azure 订阅Manage Azure subscriptions

默认情况下,用于 Eclipse 的 Azure 工具包中的 HDInsight 工具将列出所有 Azure 订阅中的 Spark 群集。By default, HDInsight Tool in Azure Toolkit for Eclipse lists the Spark clusters from all your Azure subscriptions. 如果需要,可以指定想要访问其群集的订阅。If necessary, you can specify the subscriptions for which you want to access the cluster.

  1. 在“Azure 资源管理器”中,右键单击“Azure”根节点,并选择“管理订阅”。 In Azure Explorer, right-click the Azure root node, and then select Manage Subscriptions.
  2. 在对话框中,清除不想访问的订阅对应的复选框,然后选择“关闭” 。In the dialog box, clear the check boxes for the subscription that you don't want to access, and then select Close. 如果想要从 Azure 订阅注销,可以选择“注销” 。You can also select Sign Out if you want to sign out of your Azure subscription.

本地运行 Spark Scala 应用程序Run a Spark Scala application locally

可以使用用于 Eclipse 的 Azure 工具包中的 HDInsight 工具在工作站上本地运行 Spark Scala 应用程序。You can use HDInsight Tools in Azure Toolkit for Eclipse to run Spark Scala applications locally on your workstation. 通常,这些应用程序不需要访问群集资源(如存储容器),并可以在本地运行和测试。Typically, these applications don't need access to cluster resources such as a storage container, and you can run and test them locally.

先决条件Prerequisite

在 Windows 计算机上运行本地 Spark Scala 应用程序时,可能会发生 SPARK-2356 中所述的异常。While you're running the local Spark Scala application on a Windows computer, you might get an exception as explained in SPARK-2356. 发生这些异常的原因是 Windows 中缺少 WinUtils.exeThis exception occurs because WinUtils.exe is missing in Windows.

若要解决此错误,需要将 Winutils.exe 下载到所需位置(例如 C:\WinUtils\bin),然后添加环境变量 HADOOP_HOME,并将该变量的值设为 C\WinUtilsTo resolve this error, you need Winutils.exe to a location like C:\WinUtils\bin, and then add the environment variable HADOOP_HOME and set the value of the variable to C\WinUtils.

运行本地的 Spark Scala 应用程序Run a local Spark Scala application

  1. 启动 Eclipse 并创建项目。Start Eclipse and create a project. 在“新建项目”对话框中做出以下选择,然后选择“下一步”。 In the New Project dialog box, make the following choices, and then select Next.

  2. 在“新建项目”向导中选择“HDInsight 项目” > “Spark on HDInsight 本地运行示例 (Scala)” 。In the New Project wizard, select HDInsight Project > Spark on HDInsight Local Run Sample (Scala). 然后,选择“下一步” 。Then select Next.

    新建项目选择向导对话框

  3. 若要提供项目详细信息,请执行前面部分为 HDInsight Spark 群集设置 Spark Scala 项目中的步骤 3 到步骤 6。To provide the project details, follow steps 3 through 6 from the earlier section Setup a Spark Scala project for an HDInsight Spark cluster.

  4. 模板将在 src 文件夹下面添加可在计算机上本地运行的示例代码 (LogQuery)。The template adds a sample code (LogQuery) under the src folder that you can run locally on your computer.

    LogQuery 本地 scala 应用程序的位置

  5. 右键单击“LogQuery.scala”,并选择“运行方式” > “1 Scala 应用程序” 。Right-click LogQuery.scala , and select Run As > 1 Scala Application. “控制台”选项卡上将出现如下所示的输出: Output like this appears on the Console tab:

    Spark 应用程序本地运行结果

仅限读取者角色Reader-only role

当用户使用仅限读取者的角色权限将作业提交到群集时,必须提供 Ambari 凭据。When users submit job to a cluster with reader-only role permission, Ambari credentials is required.

  1. 使用仅限读取者角色帐户登录。Sign in with reader-only role account.

  2. 在“Azure 资源管理器”中展开“HDInsight”,查看订阅中的 HDInsight 群集。 From Azure Explorer, expand HDInsight to view HDInsight clusters that are in your subscription. 标记为“角色:读取者”的群集只有仅限读取者角色权限。 The clusters marked "Role:Reader" only have reader-only role permission.

    Azure 资源管理器中的 HDInsight Spark 群集(角色读取者)

  3. 右键单击具有“仅读取者”角色权限的群集。Right click the cluster with reader-only role permission. 从上下文菜单中选择“链接此群集”以链接群集。 Select Link this cluster from context menu to link cluster. 输入 Ambari 用户名和密码。Enter the Ambari username and password.

    Azure 资源管理器中的 HDInsight Spark 群集(链接)

  4. 如果已成功链接群集,HDInsight 将会刷新。If the cluster is linked successfully, HDInsight will be refreshed. 群集阶段将变为链接状态。The stage of the cluster will become linked.

    Azure 资源管理器中的 HDInsight Spark 群集(已链接)

  1. 单击“作业”节点,此时会弹出“群集作业访问被拒绝”窗口。 Click Jobs node, Cluster Job Access Denied window pops up.

  2. 单击“链接此群集”以链接群集。 Click Link this cluster to link cluster.

    Azure 资源管理器 9 中的 HDInsight Spark 群集

  1. 创建一个 HDInsight 项目。Create an HDInsight Project.

  2. 右键单击该包。Right click the package. 然后选择“将 Spark 应用程序提交到 HDInsight” 。Then select Submit Spark Application to HDInsight.

    Azure 资源管理器中的 HDInsight Spark 群集(提交)

  3. 对于群集名称,选择具有“仅读取者”角色权限的群集。Select a cluster which has reader-only role permission for Cluster Name. 此时会显示警告消息。可以单击“链接此群集”以链接群集。 Warning message shows out. You can click Link this cluster to link cluster.

    Azure 资源管理器中的 HDInsight Spark 群集(对此进行链接)

查看存储帐户View Storage Accounts

  • 对于具有仅限读取者角色权限的群集,请单击“存储帐户”节点,此时会弹出“存储访问被拒绝”窗口。 For clusters with reader-only role permission, click Storage Accounts node, Storage Access Denied window pops up.

    Azure 资源管理器中的 HDInsight Spark 群集(存储)

    Azure 资源管理器中的 HDInsight Spark 群集(已拒绝)

  • 对于链接的群集,请单击“存储帐户”节点,此时会弹出“存储访问被拒绝”窗口。 For linked clusters, click Storage Accounts node, Storage Access Denied window pops up.

    Azure 资源管理器中的 HDInsight Spark 群集(已拒绝 2)

已知问题Known problems

使用“链接群集”时,建议提供存储的凭据 。When using Link A Cluster, I would suggest you to provide credential of storage.

交互式登录

可通过两种模式提交作业。There are two modes to submit the jobs. 如果提供存储凭据,则将使用批处理模式提交作业。If storage credential is provided, batch mode will be used to submit the job. 否则,将使用交互模式。Otherwise, interactive mode will be used. 如果群集正忙,可能会收到以下错误。If the cluster is busy, you might get the error below.

eclipse 在群集忙时收到错误

eclipse 在群集忙时收到错误 yarneclipse get error when cluster busy yarn

另请参阅See also

方案Scenarios

创建和运行应用程序Creating and running applications

工具和扩展Tools and extensions

管理资源Managing resources