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
Um cluster do Apache Spark no HDInsight. Para obter instruções, veja Criar clusters do Apache Spark no Azure HDInsight. Apenas clusters HDInsight na nuvem pública são suportados, enquanto outros tipos de nuvem segura (por exemplo, nuvens governamentais) não são.
Kit de desenvolvimento Oracle Java. Este artigo usa Java versão 8.0.202.
IntelliJ IDEA. Este artigo usa o IntelliJ IDEA Community 2018.3.4.
Kit de Ferramentas do Azure para IntelliJ. Consulte Instalando o Kit de Ferramentas do Azure para IntelliJ.
Instalar o plug-in do Scala para o IntelliJ IDEA
Passos para instalar o plugin Scala:
Abra o IntelliJ IDEA.
Na tela de boas-vindas, navegue até Configurar>plug-ins para abrir a janela Plug-ins.
Selecione Instalar para o plug-in Scala apresentado na nova janela.
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
Inicie o IntelliJ IDEA e selecione Criar novo projeto para abrir a janela Novo projeto .
Selecione Azure Spark/HDInsight no painel esquerdo.
Selecione Spark Project (Scala) na janela principal.
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.
Selecione Seguinte.
Na janela Novo projeto, forneça as seguintes informações:
Property Description Nome do projeto Introduza um nome. Este artigo usa myApp
o .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). Selecione Concluir. Pode demorar alguns minutos até que o projeto fique disponível.
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.
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.
c. Na caixa de diálogo Criar Nova Classe Scala, forneça um nome, selecione Objeto na lista suspensa Tipo e selecione OK.
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
Na barra de menus, navegue até Exibir Ferramenta do>Windows>Azure Explorer.
No Azure Explorer, clique com o botão direito do mouse no nó do Azure e selecione Entrar.
Na caixa de diálogo Entrar do Azure, escolha Logon do Dispositivo e selecione Entrar.
Na caixa de diálogo Logon de Dispositivo do Azure, clique em Copiar e Abrir.
Na interface do navegador, cole o código e clique em Avançar.
Insira suas credenciais do Azure e feche o navegador.
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 .
No Azure Explorer, expanda HDInsight para exibir os clusters HDInsight Spark que estão em suas assinaturas.
Para exibir os recursos (por exemplo, contas de armazenamento) associados ao cluster, você pode expandir ainda mais um nó de nome de cluster.
Vincular um cluster
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.
Na barra de menus, navegue até Exibir Ferramenta do>Windows>Azure Explorer.
No Azure Explorer, clique com o botão direito do mouse no nó HDInsight e selecione Vincular um cluster.
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. 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.
Você pode ver seu cluster vinculado no nó HDInsight .
Você também pode desvincular um cluster do Azure Explorer.
Executar um aplicativo Spark Scala em um cluster HDInsight Spark
Depois de criar um aplicativo Scala, você pode enviá-lo para o cluster.
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).
Na janela de diálogo Enviar aplicativo Spark, selecione 1. Faísca no HDInsight.
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. 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.
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
No Azure Explorer, navegue até HDInsight><Your Cluster>>Jobs.
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.
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.
Para exibir logs usados com freqüência, como Driver Stderr, Driver Stdout e Informações do Diretório, selecione a guia Log .
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
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.
Quando lhe for pedido, introduza as credenciais de administrador do cluster, que especificou quando configurou o cluster.
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
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).
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.
No Azure Explorer, clique com o botão direito do mouse no nó raiz do Azure e selecione Selecionar Assinaturas.
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.
Na barra de menus, navegue até Executar>editar configurações....
Na janela Executar/Depurar Configurações, no painel esquerdo, navegue até Apache Spark on HDInsight>[Spark on HDInsight] myApp.
Na janela principal, selecione a
Locally Run
guia.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. No Project, navegue até myApp>src>main>scala>myApp.
Na barra de menus, navegue até Tools>Spark Console>Run Spark Local Console(Scala).
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.
O console deve ser semelhante à imagem abaixo. Na janela da consola, escreva
sc.appName
e, em seguida, prima ctrl+Enter. O resultado será mostrado. Você pode encerrar o console local clicando no botão vermelho.
Spark Livy Interactive Session Console (Scala)
Na barra de menus, navegue até Executar>editar configurações....
Na janela Executar/Depurar Configurações, no painel esquerdo, navegue até Apache Spark on HDInsight>[Spark on HDInsight] myApp.
Na janela principal, selecione a
Remotely Run in Cluster
guia.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. No Project, navegue até myApp>src>main>scala>myApp.
Na barra de menus, navegue até Tools>Spark Console>Run Spark Livy Interactive Session Console(Scala).
O console deve ser semelhante à imagem abaixo. Na janela da consola, escreva
sc.appName
e, em seguida, prima ctrl+Enter. O resultado será mostrado. Você pode encerrar o console local clicando no botão vermelho.
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.
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.
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.
Vincular cluster a partir do menu de contexto
Inicie sessão com uma conta de função apenas de leitura.
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.
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.
Se o cluster for vinculado com êxito, o HDInsight será atualizado. A fase do cluster ficará ligada.
Vincular cluster expandindo o nó Trabalhos
Clique no nó Trabalhos , a janela Acesso ao Trabalho de Cluster Negado aparece.
Clique em Vincular este cluster para vincular cluster.
Vincular cluster da janela Executar/Depurar Configurações
Crie uma configuração do HDInsight. Em seguida, selecione Executar remotamente no cluster.
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.
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.
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.
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.
Para um aplicativo Spark Scala existente que foi criado por meio do IntelliJ IDEA, abra o arquivo associado
.iml
.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">
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:
Inicie sessão no portal do Azure.
Na caixa Pesquisar na parte superior, digite HDInsight.
Selecione Clusters HDInsight em Serviços.
Na lista de clusters HDInsight exibida, selecione o botão ... ao lado do cluster que você criou para este artigo.
Selecione Eliminar. Selecione Yes (Sim).
Erros e solução
Desmarque a pasta src como Fontes se você receber erros de falha de compilação como abaixo:
Desmarque a pasta src como Fontes para resolver esse problema:
Navegue até Arquivo e selecione a Estrutura do projeto.
Selecione os módulos em Configurações do projeto.
Selecione o arquivo src e desmarque como Fontes.
Clique no botão Aplicar e, em seguida, clique no botão OK para fechar a caixa de diálogo.
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.