Tutorial: Criar uma aplicação Scala Maven para o Apache Spark no HDInsight com o IntelliJ

Neste tutorial, vai aprender a criar uma aplicação Apache Spark escrita no Scala com o Apache Maven com o IntelliJ IDEA. O artigo utiliza o Apache Maven como o sistema de compilação. E começa com um arquétipo Maven existente para Scala fornecido pelo IntelliJ IDEA. Criar uma aplicação Scala no IntelliJ IDEA envolve os seguintes passos:

  • Utilizar o Maven como o sistema de compilação.
  • Atualizar o ficheiro Project Object Model (POM) (POM) para resolver dependências do módulo do Spark.
  • Escrever a aplicação no Scala.
  • Gerar um ficheiro jar que pode ser submetido para clusters do Spark no HDInsight.
  • Utilizar o Livy para executar a aplicação no cluster do Spark.

Neste tutorial, ficará a saber como:

  • Instalar o plug-in do Scala para o IntelliJ IDEA
  • Utilizar o IntelliJ para desenvolver uma aplicação Scala Maven
  • Criar um projeto de Scala autónomo

Pré-requisitos

Instalar o plug-in do Scala para o IntelliJ IDEA

Efetue os seguintes passos para instalar o plug-in scala:

  1. Abra o IntelliJ IDEA.

  2. No ecrã de boas-vindas, navegue para Configurar>Plug-ins para abrir a janela Plug-ins .

    Captura de ecrã a mostrar o Ecrã de Boas-vindas do IntelliJ.

  3. Selecione Instalar para o Azure Toolkit for IntelliJ.

    Captura de ecrã a mostrar o IntelliJ Azure Tool Kit.

  4. Selecione Instalar para o plug-in scala que está em destaque na nova janela.

    Captura de ecrã a mostrar o IntelliJ Scala Plugin.

  5. Após a instalação bem-sucedida do plug-in, tem de reiniciar o IDE.

Utilize o IntelliJ para criar uma aplicação

  1. Inicie o IntelliJ IDEA e selecione Criar Novo Projeto para abrir a janela Novo Projeto .

  2. Selecione Apache Spark/HDInsight no painel esquerdo.

  3. Selecione Projeto spark (Scala) na janela principal.

  4. Na lista pendente Ferramenta de compilação, selecione um dos seguintes valores:

    • Suporte do assistente de criação de projetos do Maven para Scala.
    • SBT para gerir as dependências e criar para o projeto Scala.

    Captura de ecrã a mostrar a criação da aplicação.

  5. Selecione Seguinte.

  6. Na janela Novo Projeto , forneça as seguintes informações:

    Propriedade Descrição
    Nome do projeto Introduza um nome.
    Localização do projeto Introduza a localização para guardar o projeto.
    SDK do Projeto Este campo ficará em branco na primeira utilização do IDEA. Selecione Novo... e navegue para o JDK.
    Versão do Spark O assistente de criação integra a versão adequada para o SDK do Apache Spark e o SDK Scala. Se a versão do cluster do Spark for anterior à 2.0, selecione Spark 1.x. Caso contrário, selecione Spark2.x. Este exemplo utiliza o Spark 2.3.0 (Scala 2.11.8).

    IntelliJ IDEA Selecionar o SDK do Spark

  7. Selecione Concluir.

Criar um projeto de Scala autónomo

  1. Inicie o IntelliJ IDEA e selecione Criar Novo Projeto para abrir a janela Novo Projeto .

  2. Selecione Maven no painel esquerdo.

  3. Especifique um Project SDK (SDK de Projeto). Se estiver em branco, selecione Novo... e navegue para o diretório de instalação java.

  4. Selecione a caixa de verificação Criar a partir do arquétipo .

  5. Na lista de arquétipos, selecione org.scala-tools.archetypes:scala-archetype-simple. Este arquétipo cria a estrutura de diretório correta e transfere as dependências predefinidas necessárias para escrever o programa Scala.

    Captura de ecrã a mostrar o arquétipo selecionado na janela Novo Projeto.

  6. Selecione Seguinte.

  7. Expanda Coordenadas de Artefactos. Forneça valores relevantes para GroupId e ArtifactId. O Nome e a Localização serão preenchidos automaticamente. São utilizados os seguintes valores neste tutorial:

    • GroupId: com.microsoft.spark.example
    • ArtifactId: SparkSimpleApp

    Captura de ecrã a mostrar a opção Coordenadas de Artefactos na janela Novo Projeto.

  8. Selecione Seguinte.

  9. Verifique as definições e selecione Next (Seguinte).

  10. Confirme o nome e a localização do projeto e selecione Finish (Concluir). A importação do projeto demorará alguns minutos.

  11. Assim que o projeto tiver sido importado, no painel esquerdo, navegue para SparkSimpleApp>src>test>scala>com>microsoft>spark>example. Clique com o botão direito do rato em MySpec e, em seguida, selecione Eliminar.... Não precisa deste ficheiro para a aplicação. Selecione OK na caixa de diálogo.

  12. Nos passos posteriores, atualize a pom.xml para definir as dependências da aplicação Spark Scala. Para que essas dependências sejam transferidas e resolvidas automaticamente, tem de configurar o Maven.

  13. No menu Ficheiro , selecione Definições para abrir a janela Definições .

  14. Na janela Definições, navegue para Compilação, Execução,Ferramentas> deCompilação de Implementação >Importação do Maven>.

  15. Selecione a caixa de verificação Importar projetos maven automaticamente .

  16. Selecione Apply (Aplicar) e OK. Em seguida, será devolvido à janela do projeto.

    :::image type="content" source="./media/apache-spark-create-standalone-application/configure-maven-download.png" alt-text="Configure Maven for automatic downloads" border="true":::
    
  17. No painel esquerdo, navegue para src>main>scala>com.microsoft.spark.example e, em seguida, faça duplo clique em Aplicação para abrir App.scala.

  18. Substitua o código de exemplo existente pelo seguinte código e guarde as alterações. Este código lê os dados do HVAC.csv (disponível em todos os clusters do HDInsight Spark). Obtém as linhas que têm apenas um dígito na sexta coluna. E escreve a saída para /HVACOut no contentor de armazenamento predefinido do cluster.

    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")
        }
    }
    
  19. No painel do lado esquerdo, faça duplo clique em pom.xml.

  20. Em <project>\<properties>, adicione os seguintes segmentos:

    <scala.version>2.11.8</scala.version>
    <scala.compat.version>2.11.8</scala.compat.version>
    <scala.binary.version>2.11</scala.binary.version>
    
  21. Em <project>\<dependencies>, adicione os seguintes segmentos:

    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_${scala.binary.version}</artifactId>
        <version>2.3.0</version>
    </dependency>
    
    Save changes to pom.xml.
    
  22. Crie o ficheiro .jar. O IntelliJ IDEA permite a criação do JAR como um artefacto de um projeto. Siga os passos seguintes.

    1. No menu Ficheiro , selecione Estrutura do Projeto....

    2. Na janela Estrutura do Projeto , navegue para Artefactos>o símbolo de adição +>JAR>Dos módulos com dependências....

    3. Na janela Criar JAR a partir de Módulos , selecione o ícone de pasta na caixa de texto Classe Principal .

    4. Na janela Selecionar Classe Principal , selecione a classe que é apresentada por predefinição e, em seguida, selecione OK.

    5. Na janela Criar JAR a partir de Módulos , certifique-se de que a opção extrair para o JAR de destino está selecionada e, em seguida, selecione OK. Esta definição cria um único JAR com todas as dependências.

      IntelliJ IDEA project structure jar from module (Jar de estrutura de projeto do IntelliJ IDEA do módulo)

    6. O separador Esquema de Saída lista todos os jars incluídos como parte do projeto Maven. Pode selecionar e eliminar aqueles em que a aplicação de Scala não tem dependências diretas. Para a aplicação que está a criar aqui, pode remover todas menos a última (saída de compilação do SparkSimpleApp). Selecione os jars a eliminar e, em seguida, selecione o símbolo -negativo .

      Certifique-se de que a caixa de verificação Incluir na compilação do projeto está selecionada. Esta opção garante que o jar é criado sempre que o projeto é criado ou atualizado. Selecione Aplicar e, em seguida, OK.

    7. Para criar o jar, navegue para Compilar> CompilarCompilação de Artefactos>. O projeto será compilado em cerca de 30 segundos. O jar de saída é criado em \out\artifacts.

      Saída do artefacto do projeto INtelliJ IDEA

Executar a aplicação no cluster do Apache Spark

Para executar a aplicação no cluster, pode utilizar as seguintes abordagens:

Limpar os recursos

Se não pretender continuar a utilizar esta aplicação, elimine o cluster que criou com os seguintes passos:

  1. Inicie sessão no Portal do Azure.

  2. Na caixa Procurar na parte superior, escreva HDInsight.

  3. Selecione Clusters do HDInsight em Serviços.

  4. Na lista de clusters do HDInsight que é apresentada, selecione o ... junto ao cluster que criou para este tutorial.

  5. Selecione Eliminar. Selecione Yes (Sim).

Captura de ecrã a mostrar como eliminar um cluster do HDInsight através do portal do Azure.

Passo seguinte

Neste artigo, aprendeu a criar uma aplicação scala do Apache Spark. Avance para o próximo artigo para saber como executar esta aplicação num cluster do HDInsight Spark com Livy.