Usar o Kit de Ferramentas do Azure para IntelliJ para criar aplicativos Apache Spark para cluster HDInsight

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

Você pode usar o plug-in do Kit de Ferramentas do Azure de algumas maneiras:

  • Desenvolva e envie um aplicativo Scala Spark para um cluster HDInsight Spark.
  • Acesse seus recursos de cluster do Azure HDInsight Spark.
  • Desenvolva e execute um aplicativo Scala Spark localmente.

Neste artigo, vai aprender a:

  • Usar o plug-in do Kit de Ferramentas do Azure para IntelliJ
  • Desenvolver aplicações Apache Spark
  • Enviar um aplicativo para o cluster do Azure HDInsight

Pré-requisitos

Instalar o plug-in do Scala para o IntelliJ IDEA

Passos para instalar o plugin 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 apresentado na nova janela.

    IntelliJ IDEA installs scala plugin.

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

Criar um aplicativo Spark Scala 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 Spark Project (Scala) na janela principal.

  4. Na lista suspensa Ferramenta de compilação, selecione uma das seguintes opções:

    • Suporte ao assistente de criação de projetos Maven for Scala.

    • SBT para gerenciar as dependências e construir para o projeto Scala.

      IntelliJ IDEA New Project dialog box.

  5. Selecione Seguinte.

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

    Property Description
    Nome do projeto Introduza um nome. Este artigo usa myAppo .
    Localização do projeto Insira o local para salvar seu projeto.
    SDK do projeto Este campo pode estar em branco na sua primeira utilização do IDEA. Selecione Novo... e navegue até o JDK.
    Versão Spark O assistente de criação integra a versão adequada 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. Este exemplo usa o Spark 2.3.0 (Scala 2.11.8).

    Selecting the Apache Spark SDK.

  7. Selecione Concluir. Pode demorar alguns minutos até que o projeto fique disponível.

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

    a. Na barra de menus, navegue até File>Project Structure....

    b. Na janela Estrutura do projeto, selecione Artefatos.

    c. Selecione Cancelar depois de visualizar o artefato.

    Artifact info in the dialog box.

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

    a. No Project, navegue até myApp>src>main>scala.

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

    Commands for creating a Scala class from Project.

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

    Create New Scala Class dialog box.

    d. Em seguida, o arquivo myApp.scala é aberto na visualização principal. Substitua o código padrão pelo código encontrado 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 do HVAC.csv (disponível em todos os clusters HDInsight Spark), recupera as linhas que têm apenas um dígito na sétima coluna do arquivo CSV e grava a saída no /HVACOut contêiner de armazenamento padrão para o cluster.

Conectar-se ao cluster HDInsight

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

Inicie sessão na sua subscrição do Azure

  1. Na barra de menus, navegue até Exibir Ferramenta do>Windows>Azure Explorer.

    IntelliJ IDEA shows azure explorer.

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

    IntelliJ IDEA explorer right-click azure.

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

    `IntelliJ IDEA azure sign-in device login`.

  4. Na caixa de diálogo Logon de 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 de iniciar sessão, a caixa de diálogo Selecionar Subscrições lista todas as subscrições do Azure associadas às credenciais. Selecione a sua subscrição e, em seguida, selecione o botão Selecionar .

    The Select Subscriptions dialog box.

  8. No Azure Explorer, expanda HDInsight para exibir os clusters HDInsight Spark que estão em suas assinaturas.

    IntelliJ IDEA Azure Explorer main view.

  9. Para exibir os recursos (por exemplo, contas de armazenamento) associados ao cluster, você pode 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 associado a um domínio, você pode vincular usando o domínio e o nome de usuário, como user1@contoso.com. Além disso, você pode vincular o cluster Livy Service.

  1. Na barra de menus, navegue até Exibir Ferramenta do>Windows>Azure Explorer.

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

    Azure Explorer link cluster context menu.

  3. As opções disponíveis na janela Vincular um cluster variarão dependendo do valor selecionado na lista suspensa Tipo de recurso de link. Introduza os seus valores e, em seguida, selecione OK.

    • HDInsight Cluster

      Property valor
      Tipo de recurso de link Selecione Cluster HDInsight na lista suspensa.
      Nome/URL do cluster Insira o nome do cluster.
      Tipo de Autenticação Deixar como autenticação básica
      Nome de Utilizador Digite o nome de usuário do cluster, o padrão é admin.
      Palavra-passe Digite a senha para o nome de usuário.

      IntelliJ IDEA link a cluster dialog.

    • Serviço Livy

      Property valor
      Tipo de recurso de link Selecione Livy Service na lista suspensa.
      Ponto final Livy Entrar no Livy Endpoint
      Nome do Cluster Insira o nome do cluster.
      Ponto final do fio Opcional.
      Tipo de Autenticação Deixar como autenticação básica
      Nome de Utilizador Digite o nome de usuário do cluster, o padrão é admin.
      Palavra-passe Digite a senha para o nome de usuário.

      IntelliJ IDEA link Livy cluster dialog.

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

    Azure Explorer linked cluster1.

  5. Você também pode desvincular um cluster do Azure Explorer.

    Azure Explorer unlinked cluster.

Executar um aplicativo Spark Scala em um cluster HDInsight Spark

Depois de criar um aplicativo Scala, você pode enviá-lo para o cluster.

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

    The Submit Spark Application to HDInsight command.

  2. Na janela de diálogo Enviar aplicativo Spark, selecione 1. Faísca no HDInsight.

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

    Property valor
    Clusters Spark (somente Linux) Selecione o cluster HDInsight Spark no qual você deseja executar seu 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ências(...) e escolhendo outra classe.
    Configurações de trabalho Você pode alterar as chaves padrão e/ou valores. Para obter mais informações, consulte Apache Livy REST API.
    Argumentos de linha de comando Você pode inserir argumentos separados por espaço para a classe principal, se necessário.
    Frascos referenciados e arquivos referenciados Você pode inserir os caminhos para os Jars e arquivos referenciados, se houver. Você também pode procurar arquivos no sistema de arquivos virtual do Azure, que atualmente oferece suporte apenas ao cluster ADLS Gen 2. Para obter mais informações: Apache Spark Configuration. Consulte também, Como carregar recursos para 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 Introduza a sua conta de armazenamento.
    Chave de Armazenamento Introduza a sua chave de armazenamento.
    Contentor de Armazenamento Selecione seu contêiner de armazenamento na lista suspensa depois que a Conta de Armazenamento e a Chave de Armazenamento forem inseridas.

    The Spark Submission dialog box.

  4. Selecione SparkJobRun para enviar seu projeto para o cluster selecionado. A guia Trabalho de faísca remota no cluster exibe o progresso da execução do trabalho na parte inferior. Você pode parar o aplicativo clicando no botão vermelho.

    Apache Spark Submission window.

Depurar aplicativos Apache Spark local ou remotamente em um cluster HDInsight

Também recomendamos outra maneira de enviar o aplicativo Spark para o cluster. Você pode fazer isso definindo os parâmetros no IDE de configurações Executar/Depurar. Consulte Depurar aplicativos Apache Spark local ou remotamente em um cluster HDInsight com o Kit de Ferramentas do Azure para IntelliJ por meio de SSH.

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

Você pode fazer várias operações usando o Kit de Ferramentas do Azure para IntelliJ. A maioria das operações é iniciada a partir do Azure Explorer. Na barra de menus, navegue até Exibir Ferramenta do>Windows>Azure Explorer.

Aceder à vista de emprego

  1. No Azure Explorer, navegue até HDInsight><Your Cluster>>Jobs.

    IntelliJ Azure Explorer Job view node.

  2. No painel direito, a guia Spark Job View exibe todos os aplicativos que foram executados no cluster. Selecione o nome do aplicativo para o qual você deseja ver mais detalhes.

    Spark Job View Application details.

  3. Para exibir informações básicas sobre o trabalho em execução, passe o mouse sobre o gráfico do trabalho. Para visualizar o gráfico de estágios e as informações geradas por cada trabalho, selecione um nó no gráfico de trabalho.

    Spark Job View Job stage details.

  4. Para exibir logs usados com freqüência, como Driver Stderr, Driver Stdout e Informações do Diretório, selecione a guia Log .

    Spark Job View Log details.

  5. Você pode exibir a interface do usuário do histórico do Spark e a interface do usuário 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 HDInsight, clique com o botão direito do mouse no nome do cluster do Spark e selecione Abrir interface do usuário do Histórico do Spark.

  2. Quando lhe for pedido, introduza as credenciais de administrador do cluster, que especificou quando configurou o cluster.

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

Inicie o portal 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 de Cluster (Ambari).

  2. Quando lhe for pedido, introduza as credenciais de administrador para o cluster. Você especificou essas credenciais durante o processo de configuração do cluster.

Gerir subscrições do Azure

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

  1. No Azure Explorer, clique com o botão direito do mouse no nó raiz do 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 selecione Fechar.

Consola de faíscas

Você pode executar o Spark Local Console (Scala) ou o Spark Livy Interactive Session Console (Scala).

Consola Local Spark (Scala)

Certifique-se de que satisfez o pré-requisito 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 on HDInsight>[Spark on HDInsight] myApp.

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

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

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

    Local Console Set Configuration.

  5. No Project, navegue até myApp>src>main>scala>myApp.

  6. Na barra de menus, navegue até Tools>Spark Console>Run Spark Local Console(Scala).

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

    IntelliJ IDEA Spark Auto Fix dialog1.

    IntelliJ IDEA Spark Auto Fix dialog2.

  8. O console deve ser semelhante à imagem abaixo. Na janela da consola, escreva sc.appNamee, em seguida, prima ctrl+Enter. O resultado será mostrado. Você pode encerrar o console local clicando no botão vermelho.

    IntelliJ IDEA local console result.

Spark Livy Interactive Session Console (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 on HDInsight>[Spark on HDInsight] myApp.

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

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

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

    Interactive Console Set Configuration.

  5. No Project, navegue até myApp>src>main>scala>myApp.

  6. Na barra de menus, navegue até Tools>Spark Console>Run Spark Livy Interactive Session Console(Scala).

  7. O console deve ser semelhante à imagem abaixo. Na janela da consola, escreva sc.appNamee, em seguida, prima ctrl+Enter. O resultado será mostrado. Você pode encerrar o console local clicando no botão vermelho.

    IntelliJ IDEA Interactive Console Result.

Enviar seleção para o Spark Console

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

Send Selection to Spark Console.

Integração com o HDInsight Identity Broker (HIB)

Conectar-se ao cluster ESP do HDInsight com o ID Broker (HIB)

Você pode seguir as etapas normais para entrar na assinatura do Azure para se conectar ao cluster ESP do HDInsight com o ID Broker (HIB). Após entrar, você verá a lista de clusters no Azure Explorer. Para obter mais instruções, consulte Conectar-se ao cluster HDInsight.

Executar um aplicativo Spark Scala em um cluster ESP HDInsight com ID Broker (HIB)

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

Carregamos os ficheiros necessários para uma pasta com o nome da sua conta de início de sessão e pode ver o caminho de carregamento no ficheiro de configuração.

upload path in the configuration.

Console do Spark em um cluster ESP HDInsight com agente de ID (HIB)

Você pode executar o Spark Local Console (Scala) ou o Spark Livy Interactive Session Console (Scala) em um cluster ESP HDInsight com ID Broker (HIB). Consulte o Spark Console para obter mais instruções.

Nota

Para o cluster ESP do HDInsight com o Id Broker (HIB), vincular um cluster e depurar aplicativos Apache Spark remotamente não é suportado atualmente.

Função somente de leitor

Quando os usuários enviam trabalho para um cluster com permissão de função somente leitor, as credenciais do Ambari são necessárias.

  1. Inicie sessão com uma conta de função apenas de leitura.

  2. No Azure Explorer, expanda HDInsight para exibir clusters HDInsight que estão em sua assinatura. Os clusters marcados como "Role:Reader" só têm permissão de função somente leitor.

    `IntelliJ Azure Explorer Role:Reader`.

  3. Clique com o botão direito do mouse no cluster com permissão de função somente leitor. Selecione Vincular este cluster no menu de contexto para vincular cluster. Digite 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. A fase do cluster ficará ligada.

    IntelliJ Azure Explorer linked dialog.

  1. Clique no nó Trabalhos , a janela Acesso ao Trabalho de Cluster Negado aparece.

  2. Clique em Vincular este cluster para vincular cluster.

    cluster job access denied dialog.

  1. Crie uma configuração do HDInsight. Em seguida, selecione Executar remotamente no cluster.

  2. Selecione um cluster, que tenha permissão de função somente leitor para clusters do Spark (somente Linux). Mensagem de aviso é exibida. Você pode clicar em Vincular este cluster para vincular cluster.

    IntelliJ IDEA run/debug configuration create.

Ver contas de armazenamento

  • Para clusters com permissão de função somente leitor, clique no nó Contas de Armazenamento , a janela Acesso ao Armazenamento Negado aparece. Você pode clicar em Abrir o 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 ao Armazenamento Negado 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 para usar o Kit de Ferramentas do Azure para IntelliJ

Você pode converter os aplicativos Spark Scala existentes criados no IntelliJ IDEA 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 para um cluster HDInsight Spark.

  1. Para um aplicativo Spark Scala existente que foi criado por meio do IntelliJ IDEA, abra o arquivo associado .iml .

  2. No nível raiz, é um elemento de módulo como o seguinte texto:

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

    Edite o elemento a ser adicionado UniqueKey="HDInsightTool" para que o elemento module se pareça com o seguinte texto:

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

Clean up resources (Limpar 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 Pesquisar na parte superior, digite HDInsight.

  3. Selecione Clusters HDInsight em Serviços.

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

  5. Selecione Eliminar. Selecione Yes (Sim).

Azure portal deletes HDInsight cluster.

Erros e solução

Desmarque a pasta src como Fontes se você receber erros de falha de compilação como 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 em 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óximos passos

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