Usar o Azure Toolkit for IntelliJ para criar aplicativos Apache Spark para um cluster do HDInsight

Este artigo demonstra como desenvolver aplicativos Apache Spark no Azure HDInsight usando o plug-in Azure Toolkit para o IntelliJ IDE. Azure HDInsight é um serviço gerenciado de análise de software livre na nuvem. O serviço permite que você use estruturas de software livre como Hadoop, Apache Spark, Apache Hive e Apache Kafka.

Você pode usar o plug-in Azure Toolkit destas maneiras:

  • Desenvolver e enviar um aplicativo Scala Spark em um cluster HDInsight Spark.
  • Acessar os recursos de cluster Spark do Azure HDInsight.
  • Desenvolver e executar um aplicativo Scala Spark localmente.

Neste artigo, você aprenderá como:

  • Usar o plug-in Azure Toolkit for IntelliJ
  • Desenvolver aplicativos do Apache Spark
  • Enviar um aplicativo para o cluster do Azure HDInsight

Pré-requisitos

Instalar o plug-in Scala para IntelliJ IDEA

Etapas para instalar o plug-in do Scala:

  1. Abra o IntelliJ IDEA.

  2. Na tela de boas-vindas, navegue até Configurar>Plug-ins para abrir a janela Plug-ins.

    IntelliJ IDEA enables scala plugin.

  3. Selecione Instalar para o plug-in Scala caracterizado na nova janela.

    IntelliJ IDEA installs scala plugin.

  4. Depois que o plug-in foi instalado com êxito, você deve reiniciar o IDE.

Criar um aplicativo Scala Spark para um cluster HDInsight Spark

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

  2. Selecione Azure Spark/HDInsight no painel esquerdo.

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

  4. Na lista suspensa Ferramenta de build, selecione uma destas opções:

    • Maven para obter suporte ao assistente de criação de projetos Scala.

    • SBT para gerenciar as dependências e para criar no projeto Scala.

      IntelliJ IDEA New Project dialog box.

  5. Selecione Avançar.

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

    Propriedade Descrição
    Nome do projeto Insira um nome. Este artigo usa myApp.
    Localização do projeto Insira o local no qual salvar o projeto.
    SDK do projeto Esse campo ficará em branco na primeira utilização do IDEA. Selecione Novo... e navegue até o JDK.
    Versão do Spark O assistente de criação integra a versão apropriada para o SDK do Spark e o SDK do Scala. Se a versão do cluster do Spark for anterior à 2.0, selecione Spark 1.x. Caso contrário, selecione Spark2.x. Esse exemplo usa o Spark 2.3.0 (Scala 2.11.8) .

    Selecting the Apache Spark SDK.

  7. Selecione Concluir. Pode levar alguns minutos antes que o projeto fique disponível.

  8. O projeto do Spark cria automaticamente um artefato para você. Para exibir o artefato, execute as seguintes etapas:

    a. Na barra de menus, navegue até Arquivo>Estrutura do projeto... .

    b. Na janela Estrutura do Projeto, selecione Artefatos.

    c. Selecione Cancelar depois de exibir o artefato.

    Artifact info in the dialog box.

  9. Adicione o código-fonte do aplicativo seguindo estas etapas:

    a. Em Projeto, navegue até myApp>src>principal>scala.

    b. Clique com o botão direito do mouse em scala e, em seguida, navegue até Novo>classe Scala.

    Commands for creating a Scala class from Project.

    c. Na caixa de diálogo Criar Nova Classe do Scala, forneça um nome, selecione Objeto na lista suspensa Tipo e selecione OK.

    Create New Scala Class dialog box.

    d. O arquivo myApp.scala então se abre na exibição principal. Substitua o código padrão pelo código localizado abaixo:

    import org.apache.spark.SparkConf
    import org.apache.spark.SparkContext
    
    object myApp{
        def main (arg: Array[String]): Unit = {
        val conf = new SparkConf().setAppName("myApp")
        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 file
        val rdd1 =  rdd.filter(s => s.split(",")(6).length() == 1)
    
        rdd1.saveAsTextFile("wasbs:///HVACOut")
        }
    
    }
    

    O código lê os dados no HVAC.csv (disponível em todos os clusters Spark do HDInsight), recupera as linhas com apenas um dígito na sétima coluna no arquivo CSV e grava a saída em /HVACOut no contêiner padrão de armazenamento do cluster.

Conectar-se ao cluster HDInsight

O usuário pode entrar na assinatura do Azure ou vincular um cluster do HDInsight. Use o nome de usuário/senha do Ambari ou a credencial de ingresso no domínio para se conectar ao cluster do HDInsight.

Entre em sua assinatura do Azure

  1. Na barra de menus, navegue até Exibição>Janelas de Ferramentas>Azure Explorer.

    IntelliJ IDEA shows azure explorer.

  2. No Azure Explorer, clique com o botão direito do mouse no nó Azure e, em seguida, selecione Entrar.

    IntelliJ IDEA explorer right-click azure.

  3. Na caixa de diálogo Entrar no Azure, escolha Logon do Dispositivo e selecione Entrar.

    `IntelliJ IDEA azure sign-in device login`.

  4. Na caixa de diálogo Logon no Dispositivo do Azure, clique em Copiar e Abrir.

    `IntelliJ IDEA azure device login`.

  5. Na interface do navegador, cole o código e clique em Avançar.

    `Microsoft enter code dialog for HDI`.

  6. Insira suas credenciais do Azure e feche o navegador.

    `Microsoft enter e-mail dialog for HDI`.

  7. Depois que você estiver conectado, a caixa de diálogo Selecionar Assinaturas listará todas as assinaturas do Azure associadas às credenciais. Selecione sua assinatura e, em seguida, selecione o botão Selecionar.

    The Select Subscriptions dialog box.

  8. No Azure Explorer, expanda HDInsight para exibir os clusters Spark do HDInsight em suas assinaturas.

    IntelliJ IDEA Azure Explorer main view.

  9. Para exibir os recursos (por exemplo, contas de armazenamento) associados ao cluster, você poderá expandir ainda mais um nó de nome de cluster.

    Azure Explorer storage accounts.

Você pode vincular um cluster HDInsight usando o nome de usuário gerenciado do Apache Ambari. Da mesma forma, para um cluster HDInsight ingressado no domínio, crie o vínculo usando o domínio e o nome de usuário, como user1@contoso.com. Also you can link Livy Service cluster.

  1. Na barra de menus, navegue até Exibição>Janelas de Ferramentas>Azure Explorer.

  2. No Azure Explorer, clique com o botão direito do mouse em HDInsight nó e selecione Vincular um Cluster.

    Azure Explorer link cluster context menu.

  3. As opções disponíveis na janela Vincular um Cluster vão variar conforme o valor selecionado na lista suspensa Tipo de Recurso de Link. Insira seus valores e, em seguida, selecione OK.

    • Cluster do HDInsight

      Propriedade Valor
      Tipo de Recurso de Link Selecione Cluster do HDInsight na lista suspensa.
      Nome/URL do cluster Insira o nome do cluster.
      Tipo de autenticação Deixe como Autenticação Básica
      Nome do Usuário Insira o nome de usuário do cluster, o padrão é admin.
      Senha Insira a senha do nome de usuário.

      IntelliJ IDEA link a cluster dialog.

    • Serviço Livy

      Propriedade Valor
      Tipo de Recurso de Link Selecione Serviço Livy na lista suspensa.
      Ponto de Extremidade do Livy Inserir o Ponto de Extremidade Livy
      Nome do cluster Insira o nome do cluster.
      Ponto de Extremidade do Yarn Opcional.
      Tipo de autenticação Deixe como Autenticação Básica
      Nome do Usuário Insira o nome de usuário do cluster, o padrão é admin.
      Senha Insira a senha do nome de usuário.

      IntelliJ IDEA link Livy cluster dialog.

  4. Você pode ver seu cluster vinculado do nó do HDInsight.

    Azure Explorer linked cluster1.

  5. Também é possível desvincular um cluster a partir do Azure Explorer.

    Azure Explorer unlinked cluster.

Executar um aplicativo Scala Spark em um cluster HDInsight Spark

Depois de criar um aplicativo Scala, você poderá enviá-lo ao cluster.

  1. De Projeto, navegue até myApp>src>main>scala>myApp. Clique com o botão direito do mouse em myApp e selecione Enviar Aplicativo Spark (provavelmente estará localizado na parte inferior da lista).

    The Submit Spark Application to HDInsight command.

  2. Na janela de diálogo Enviar Aplicativo do Spark, selecione 1. Spark no HDInsight.

  3. Na janela Editar configuração, forneça os seguintes valores e, em seguida, selecione OK:

    Propriedade Valor
    Clusters do Spark (somente Linux) Selecione o cluster HDInsight Spark no qual você deseja executar o aplicativo.
    Selecione um Artefato para enviar Deixe a configuração padrão.
    Nome da classe principal O valor padrão é a classe principal do arquivo selecionado. Você pode alterar a classe selecionando as reticência ( ... ) e escolhendo outra classe.
    Configurações de trabalho Você pode alterar as chaves e/ou valores padrão. Para obter mais informações, confira API REST do Apache Livy.
    Argumentos de linha de comando Você pode inserir argumentos separados por espaço para a classe principal se necessário.
    Arquivos Referenciados e Jars Referenciados você pode inserir os caminhos para os Jars e os arquivos referenciados, se houver. Você também pode procurar arquivos no sistema de arquivos virtual do Azure, que atualmente suporta apenas o cluster ADLS Gen 2. Para obter mais informações: Configuração do Spark do Apache. Confira também Como carregar recursos para o cluster.
    Armazenamento de Upload de Trabalho Expanda para revelar opções adicionais.
    Tipo de armazenamento Selecione Usar Blob do Azure para carregar na lista suspensa.
    Conta de Armazenamento Insira sua conta de armazenamento.
    Chave de Armazenamento Insira sua chave de armazenamento.
    Contêiner de armazenamento Selecione seu contêiner de armazenamento na lista suspensa depois que Conta de Armazenamento e Chave de Armazenamento tiverem sido inseridas.

    The Spark Submission dialog box.

  4. Selecione SparkJobRun para enviar seu projeto para o cluster selecionado. A guia Trabalho do Spark Remoto no Cluster exibe o andamento da execução do trabalho na parte inferior. Você pode parar o aplicativo clicando no botão vermelho.

    Apache Spark Submission window.

Depurar aplicativos do Apache Spark local ou remotamente em um cluster do HDInsight

Também recomendamos outra forma de enviar o aplicativo Spark ao cluster. Você pode fazer isso definido os parâmetros no IDE Executar/Depurar configurações. Confira Depurar aplicativos Apache Spark local ou remotamente em um cluster HDInsight com Azure Toolkit for IntelliJ por meio do SSH.

Acessar e gerenciar clusters Spark do HDInsight usando o Kit de Ferramentas do Azure para IntelliJ

Você pode executar várias operações usando o Azure Toolkit for IntelliJ. A maioria das operações é iniciada no Azure Explorer. Na barra de menus, navegue até Exibição>Janelas de Ferramentas>Azure Explorer.

Acessar a exibição do trabalho

  1. No Azure Explorer, navegue até HDInsight><Seu Cluster>>Trabalhos.

    IntelliJ Azure Explorer Job view node.

  2. No painel direito, a guia Exibição de Trabalho do Spark exibe todos os aplicativos que foram executados no cluster. Selecione o nome do aplicativo do qual você deseja ver mais detalhes.

    Spark Job View Application details.

  3. Para exibir informações básicas do trabalho em execução, passe o mouse sobre o grafo de trabalhos. Para exibir o grafo de estágios e as informações geradas pelos trabalhos, escolha um nó no grafo de trabalhos.

    Spark Job View Job stage details.

  4. Para exibir logs usados frequentemente, como Stderr do Driver, Stdout do Driver e Informações do diretório, escolha a guia Log.

    Spark Job View Log details.

  5. Você pode ver a IU de histórico do Spark e IU do YARN (no nível do aplicativo). Selecione um link na parte superior da janela.

Acessar o servidor de histórico do Spark

  1. No Azure Explorer, expanda o HDInsight, clique com o botão direito do mouse no nome do cluster Spark e selecione Abrir interface do usuário do Histórico Spark.

  2. Quando for solicitado, insira as credenciais do administrador do cluster, que você especificou ao configurar o cluster.

  3. No painel do servidor de histórico do Spark, é possível usar o nome do aplicativo para procurar o que você acabou de executar. No código anterior, você definiu o nome do aplicativo usando val conf = new SparkConf().setAppName("myApp"). O nome do aplicativo Spark é myApp.

Iniciar o portal do Ambari

  1. No Azure Explorer, expanda HDInsight, clique com o botão direito do mouse no nome do cluster Spark e selecione Abrir Portal de Gerenciamento do Cluster (Ambari).

  2. Quando solicitado, insira as credenciais de administrador para o cluster. Você especificou essas credenciais durante o processo de configuração do cluster.

Gerenciar assinaturas do Azure

Por padrão, o Kit de Ferramentas do Azure para IntelliJ listam os clusters Spark de todas as suas assinaturas do Azure. Se for necessário, você poderá especificar as assinaturas que deseja acessar.

  1. No Azure Explorer, clique com o botão direito do mouse no nó-raiz Azure e selecione Selecionar Assinaturas.

  2. Na janela Selecionar Assinaturas, desmarque as caixas de seleção ao lado das assinaturas que você não deseja acessar e, em seguida, selecione Fechar.

Console do Spark

Você pode executar o Console Local do Spark (Scala) ou o Console de Sessão Interativa do Spark Livy (Scala).

Console Local do Spark (Scala)

Verifique se você satisfez o pré-requisito do WINUTILS.EXE.

  1. Na barra de menus, navegue até Executar>Editar Configurações... .

  2. Na janela Executar/depurar configurações, no painel esquerdo, navegue até Apache Spark no HDInsight>[Spark no HDInsight] myApp.

  3. Na janela principal, selecione a guia Locally Run .

  4. Forneça os seguintes valores e, em seguida, selecione OK:

    Propriedade Valor
    Classe principal do trabalho O valor padrão é a classe principal do arquivo selecionado. Você pode alterar a classe selecionando as reticência ( ... ) e escolhendo outra classe.
    Variáveis de ambiente Verifique se o valor de HADOOP_HOME está correto.
    Localização de WINUTILS.exe Verifique se o caminho está correto.

    Local Console Set Configuration.

  5. De Projeto, navegue até myApp>src>main>scala>myApp.

  6. Na barra de menus, navegue até Ferramentas>Console do Spark>Executar Console Local do Spark (Scala) .

  7. Em seguida, duas caixas de diálogo poderão ser exibidas para perguntar se você deseja corrigir automaticamente as dependências. Em caso afirmativo, selecione Autocorreção.

    IntelliJ IDEA Spark Auto Fix dialog1.

    IntelliJ IDEA Spark Auto Fix dialog2.

  8. O console deve ser semelhante à imagem abaixo. Na janela do console, digite sc.appName e pressione ENTER. O resultado será exibido. Você pode interromper o console local clicando no botão vermelho.

    IntelliJ IDEA local console result.

Console de Sessão Interativa do Spark Livy (Scala)

  1. Na barra de menus, navegue até Executar>Editar Configurações... .

  2. Na janela Executar/depurar configurações, no painel esquerdo, navegue até Apache Spark no HDInsight>[Spark no HDInsight] myApp.

  3. Na janela principal, selecione a guia Remotely Run in Cluster .

  4. Forneça os seguintes valores e, em seguida, selecione OK:

    Propriedade Valor
    Clusters do Spark (somente Linux) Selecione o cluster HDInsight Spark no qual você deseja executar o aplicativo.
    Nome da classe principal O valor padrão é a classe principal do arquivo selecionado. Você pode alterar a classe selecionando as reticência ( ... ) e escolhendo outra classe.

    Interactive Console Set Configuration.

  5. De Projeto, navegue até myApp>src>main>scala>myApp.

  6. Na barra de menus, navegue até Ferramentas>Console do Spark>Executar Console de Sessão Interativa do Spark Livy (Scala) .

  7. O console deve ser semelhante à imagem abaixo. Na janela do console, digite sc.appName e pressione ENTER. O resultado será exibido. Você pode interromper o console local clicando no botão vermelho.

    IntelliJ IDEA Interactive Console Result.

Enviar seleção para o Console do Spark

É conveniente para você prever o resultado do script enviando algum código para o console local ou Console (Scala) de sessão interativa Livy. Você pode realçar código no arquivo do Scala e, em seguida, clicar com o botão direito do mouse em Enviar Seleção ao Console do Spark. O código selecionado será enviado ao console. O resultado será exibido após o código no console. O console verificará erros, se houver.

Send Selection to Spark Console.

Integrar com o (HIB) Agente de Identidade do HDInsight

Conectar-se ao cluster do HDInsight ESP com o HIB (Agente de IDs)

Você pode seguir as etapas normais para entrar na assinatura do Azure para se conectar a seu cluster do HDInsight ESP com o HIB (Agente de IDs). Depois de entrar, você verá a lista de clusters no Azure Explorer. Para obter mais instruções, confira Conectar-se a seu cluster do HDInsight.

Executar um aplicativo do Spark Scala em um cluster do HDInsight com HIB (Agente de IDs)

Você pode seguir as etapas normais para enviar o trabalho ao cluster do HDInsight ESP com o HIB (Agente de IDs). Veja Executar um aplicativo do Spark Scala em um cluster do HDInsight Spark para obter mais instruções.

Fazemos upload dos arquivos necessários em uma pasta nomeada com sua conta de entrada e você pode ver o caminho de upload no arquivo de configuração.

upload path in the configuration.

Console do Spark em um cluster do HDInsight ESP com o HIB (Agente de IDs)

Você pode executar o Console Local do Spark (Scala) ou executar o Console de Sessão Interativa do Spark Livy (Scala) em um cluster do HDInsight ESP com o HIB (Agente de IDs). Veja o Console do Spark para obter mais instruções.

Observação

No momento, o cluster do HDInsight ESP com o HIB (Agente de IDs) não é compatível com a vinculação de um cluster e a depuração de aplicativos do Apache Spark remotamente.

Função somente leitura

Quando os usuários enviam um trabalho a um cluster com permissão de função somente leitura, as credenciais do Ambari são solicitadas.

  1. Entrar com conta com função somente leitura.

  2. No Azure Explorer, expanda HDInsight para exibir os clusters do HDInsight em sua assinatura. Os clusters marcados "Role:Reader" só tem permissão para a função somente leitura.

    `IntelliJ Azure Explorer Role:Reader`.

  3. Clique com botão direito do mouse no cluster com permissão para a função somente leitura. Selecione Vincular este cluster no menu de contexto para vincular o cluster. Insira o nome de usuário e a senha do Ambari.

    IntelliJ Azure Explorer link this cluster.

  4. Se o cluster for vinculado com êxito, o HDInsight será atualizado. O estágio do cluster será se tornará vinculado.

    IntelliJ Azure Explorer linked dialog.

  1. Clique no nó Trabalhos, a janela Acesso negado ao cluster Trabalhos é exibida.

  2. Clique em Vincular este cluster para vincular o cluster.

    cluster job access denied dialog.

  1. Crie uma configuração do HDInsight. Depois selecione Executar Remotamente em Cluster.

  2. Selecione um cluster, que tenha a permissão de função somente leitura, para Clusters do Spark (somente Linux). A mensagem de aviso é mostrada. Você pode clicar em Vincular este cluster para vincular o cluster.

    IntelliJ IDEA run/debug configuration create.

Exibir Contas de Armazenamento

  • Para clusters com permissão de função somente leitura, clique no nó Contas de Armazenamento, a janela Acesso Negado ao Armazenamento aparece. Você pode clicar em Abrir Gerenciador de Armazenamento do Azure para abrir o Gerenciador de Armazenamento.

    `IntelliJ IDEA Storage Access Denied`.

    IntelliJ IDEA Storage Access Denied button.

  • Para clusters vinculados, clique no nó Contas de Armazenamento, a janela Acesso Negado ao Armazenamento aparece. Você pode clicar em Abrir Armazenamento do Azure para abrir o Gerenciador de Armazenamento.

    `IntelliJ IDEA Storage Access Denied2`.

    IntelliJ IDEA Storage Access Denied2 button.

Converter aplicativos IntelliJ IDEA existentes a fim de usar o Kit de Ferramentas do Azure para IntelliJ

Você pode converter os aplicativos Scala Spark existentes criados no IDEA do IntelliJ para serem compatíveis com o Kit de Ferramentas do Azure para IntelliJ. Em seguida, você pode usar o plug-in para enviar os aplicativos a um cluster Spark do HDInsight.

  1. Para um aplicativo do Scala Spark existente criado no IDEA do IntelliJ, abra o arquivo .iml associado.

  2. Há um elemento module no nível de raiz, como este texto:

    <module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
    

    Edite o elemento para adicionar UniqueKey="HDInsightTool", de modo que o elemento module fique assim:

    <module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4" UniqueKey="HDInsightTool">
    
  3. Salve as alterações. Seu aplicativo deve ser compatível com o Kit de Ferramentas do Azure para IntelliJ. Você pode testar isso clicando com o botão direito do mouse no nome do projeto no Projeto. Agora, o menu pop-up tem a opção Enviar Aplicativo Spark ao HDInsight.

Limpar os recursos

Se não for continuar a usar este aplicativo, exclua o cluster que criou seguindo estas etapas:

  1. Entre no portal do Azure.

  2. Na caixa Pesquisar na parte superior, digite HDInsight.

  3. Selecione Clusters do HDInsight em Serviços.

  4. Na lista de clusters do HDInsight exibida, selecione ao lado do cluster que você criou para este artigo.

  5. Selecione Excluir. Selecione Sim.

Azure portal deletes HDInsight cluster.

Erros e solução

Desmarque a pasta src como Fontes se você receber erros de falha de build, conforme mostrado abaixo:

Screenshot showing the build failed.

Desmarque a pasta src como Fontes para resolver esse problema:

  1. Navegue até Arquivo e selecione a Estrutura do Projeto.

  2. Selecione os Módulos nas Configurações do Projeto.

  3. Selecione o arquivo src e desmarque como Fontes.

  4. Clique no botão Aplicar e, em seguida, clique no botão OK para fechar a caixa de diálogo.

    Screenshot showing the unmark the src as sources.

Próximas etapas

Neste artigo, você aprendeu a usar o plug-in Azure Toolkit for IntelliJ para desenvolver aplicativos do Apache Spark escritos no Scala. Em seguida, os enviou para um cluster do HDInsight Spark diretamente do IDE (ambiente de desenvolvimento integrado) do IntelliJ. Avance para o próximo artigo para ver como os dados que você registrou no Apache Spark podem ser removidos em uma ferramenta de análise de BI, assim como Power BI.