Utilizar blocos de notas do Apache Zeppelin com o cluster do Apache Spark no Azure HDInsight

Os clusters HDInsight Spark incluem notebooks Apache Zeppelin . Use os blocos de anotações para executar trabalhos do Apache Spark. Neste artigo, você aprenderá a usar o bloco de anotações Zeppelin em um cluster HDInsight.

Pré-requisitos

  • Um cluster do Apache Spark no HDInsight. Para obter instruções, veja Criar clusters do Apache Spark no Azure HDInsight.
  • O esquema de URI para o armazenamento primário de clusters. O esquema seria wasb:// para o Armazenamento de Blobs do Azure, abfs:// para o Azure Data Lake Storage Gen2 ou adl:// para o Azure Data Lake Storage Gen1. Se a transferência segura estiver habilitada para o Armazenamento de Blob, o URI será wasbs://. Para obter mais informações, consulte Exigir transferência segura no Armazenamento do Azure .

Iniciar um notebook Apache Zeppelin

  1. Na Visão geral do cluster Spark, selecione Bloco de anotações do Zeppelin nos painéis do Cluster. Insira as credenciais de administrador para o cluster.

    Nota

    Você também pode acessar o Bloco de Anotações do Zeppelin para seu cluster abrindo o seguinte URL em seu navegador. Substitua CLUSTERNAME pelo nome do cluster:

    https://CLUSTERNAME.azurehdinsight.net/zeppelin

  2. Crie um novo bloco de notas. No painel de cabeçalho, navegue até Bloco de Anotações>Criar nova nota.

    Create a new Zeppelin notebook.

    Introduza um nome para o bloco de notas e, em seguida, selecione Criar Nota.

  3. Verifique se o cabeçalho do bloco de anotações mostra um status conectado. É indicado por um ponto verde no canto superior direito.

    Zeppelin notebook status.

  4. Carregue dados de exemplo para uma tabela temporária. Quando você cria um cluster do Spark no HDInsight, o arquivo de dados de exemplo, hvac.csv, é copiado para a conta de armazenamento associada em \HdiSamples\SensorSampleData\hvac.

    No parágrafo vazio criado por padrão no novo bloco de anotações, cole o trecho a seguir.

    %livy2.spark
    //The above magic instructs Zeppelin to use the Livy Scala interpreter
    
    // Create an RDD using the default Spark context, sc
    val hvacText = sc.textFile("wasbs:///HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv")
    
    // Define a schema
    case class Hvac(date: String, time: String, targettemp: Integer, actualtemp: Integer, buildingID: String)
    
    // Map the values in the .csv file to the schema
    val hvac = hvacText.map(s => s.split(",")).filter(s => s(0) != "Date").map(
        s => Hvac(s(0),
                s(1),
                s(2).toInt,
                s(3).toInt,
                s(6)
        )
    ).toDF()
    
    // Register as a temporary table called "hvac"
    hvac.registerTempTable("hvac")
    

    Pressione SHIFT + ENTER ou selecione o botão Reproduzir para o parágrafo para executar o trecho. O status no canto direito do parágrafo deve progredir de PRONTO, PENDENTE, EM EXECUÇÃO para CONCLUÍDO. A saída aparece na parte inferior do mesmo parágrafo. A captura de tela se parece com a seguinte imagem:

    Create a temporary table from raw data.

    Você também pode fornecer um título para cada parágrafo. No canto direito do parágrafo, selecione o ícone Configurações (roda dentada) e, em seguida, selecione Mostrar título.

    Nota

    O interpretador %spark2 não é suportado em blocos de anotações Zeppelin em todas as versões do HDInsight e o interpretador %sh não será suportado a partir do HDInsight 4.0.

  5. Agora você pode executar instruções SQL do hvac Spark na tabela. Cole a consulta a seguir em um novo parágrafo. A consulta recupera o ID do edifício. Também a diferença entre as temperaturas alvo e reais para cada edifício em uma determinada data. Pressione SHIFT + ENTER.

    %sql
    select buildingID, (targettemp - actualtemp) as temp_diff, date from hvac where date = "6/1/13"
    

    A instrução %sql no início diz ao bloco de anotações para usar o interpretador Livy Scala.

  6. Selecione o ícone Gráfico de Barras para alterar a exibição. as configurações aparecem depois que você selecionou Gráfico de Barras, permite que você escolha Chaves e Valores. A captura de tela a seguir mostra a saída.

    Run a Spark SQL statement using the notebook1.

  7. Você também pode executar instruções Spark SQL usando variáveis na consulta. O próximo trecho mostra como definir uma variável, Temp, na consulta com os valores possíveis com os quais você deseja consultar. Quando você executa a consulta pela primeira vez, uma lista suspensa é preenchida automaticamente com os valores especificados para a variável.

    %sql  
    select buildingID, date, targettemp, (targettemp - actualtemp) as temp_diff from hvac where targettemp > "${Temp = 65,65|75|85}"
    

    Cole este trecho em um novo parágrafo e pressione SHIFT + ENTER. Em seguida, selecione 65 na lista suspensa Temp .

  8. Selecione o ícone Gráfico de Barras para alterar a exibição. Em seguida, selecione as configurações e faça as seguintes alterações:

    • Grupos: Adicione targettemp.

    • Valores: 1. Remover data. 2. Adicione temp_diff. 3. Altere o agregador de SOMA para AVG.

      A captura de tela a seguir mostra a saída.

      Run a Spark SQL statement using the notebook2.

Como faço para usar pacotes externos com o notebook?

O notebook Zeppelin no cluster Apache Spark no HDInsight pode usar pacotes externos contribuídos pela comunidade que não estão incluídos no cluster. Pesquise no repositório Maven a lista completa de pacotes disponíveis. Você também pode obter uma lista de pacotes disponíveis de outras fontes. Por exemplo, uma lista completa de pacotes contribuídos pela comunidade está disponível em Pacotes Spark.

Neste artigo, você verá como usar o pacote spark-csv com o Jupyter Notebook.

  1. Abra as configurações do intérprete. No canto superior direito, selecione o nome de usuário conectado e, em seguida, selecione Intérprete.

    Launch interpreter.

  2. Desloque-se para livy2 e, em seguida, selecione editar.

    Change interpreter settings1.

  3. Navegue até a tecla livy.spark.jars.packagese defina seu valor no formato group:id:version. Portanto, se você quiser usar o pacote spark-csv , você deve definir o valor da chave como com.databricks:spark-csv_2.10:1.4.0.

    Change interpreter settings2.

    Selecione Salvar e, em seguida, OK para reiniciar o intérprete Livy.

  4. Se você quiser entender como chegar ao valor da chave inserida acima, veja como.

    a. Localize o pacote no repositório Maven. Para este artigo, usamos spark-csv.

    b. No repositório, reúna os valores para GroupId, ArtifactId e Version.

    Use external packages with Jupyter Notebook.

    c. Concatene os três valores, separados por dois pontos (:).

    com.databricks:spark-csv_2.10:1.4.0
    

Onde estão guardados os cadernos Zeppelin?

Os blocos de anotações do Zeppelin são salvos nos nós principais do cluster. Assim, se você excluir o cluster, os blocos de anotações também serão excluídos. Se quiser preservar seus blocos de anotações para uso posterior em outros clusters, exporte-os depois de concluir a execução dos trabalhos. Para exportar um bloco de anotações, selecione o ícone Exportar , conforme mostrado na imagem abaixo.

Download notebook.

Esta ação salva o bloco de anotações como um arquivo JSON no local de download.

Nota

  • No HDI 4.0, o caminho do diretório do notebook zeppelin é: /usr/hdp/<version>/zeppelin/notebook/<notebook_session_id>/

    Por ex. /usr/hdp/4.1.17.10/zeppelin/2JMC9BZ8X/

    Onde como no IDH 5.0 e acima este caminho é diferente /usr/hdp/<version>/zeppelin/notebook/<Kernel_name>/

    Por ex. /usr/hdp/5.1.4.5/zeppelin/notebook/Scala/

  • O nome do arquivo armazenado é diferente no HDI 5.0. É armazenado como <notebook_name>_<sessionid>.zpln

    Por ex. testzeppelin_2JJK53XQA.zpln

    No HDI 4.0, o nome do arquivo é apenas note.json armazenado em session_id diretório.

    Por ex. /2JMC9BZ8X/note.json

  • O HDI Zeppelin sempre salva o notebook no caminho /usr/hdp/<version>/zeppelin/notebook/ no disco local hn0.

    Se quiser que o bloco de anotações esteja disponível mesmo após a exclusão do cluster, você pode tentar usar o armazenamento de arquivos azure (Usando o protocolo SMB) e vinculá-lo ao caminho local. Para obter mais detalhes, consulte Montar compartilhamento de arquivos do Azure SMB no Linux

    Depois de montá-lo, você pode modificar a configuração do zeppelin zeppelin.notebook.dir para o caminho montado na interface do usuário do ambari.

  • O compartilhamento de arquivos SMB como armazenamento GitNotebookRepo não é recomendado para zeppelin versão 0.10.1

Use Shiro para configurar o acesso a interpretadores do Zeppelin em clusters ESP (Enterprise Security Package)

Como mencionado acima, o %sh intérprete não é suportado a partir do HDInsight 4.0. Além disso, como %sh o interpretador introduz possíveis problemas de segurança, como guias de teclas de acesso usando comandos shell, ele também foi removido dos clusters ESP do HDInsight 3.6. Isso significa %sh que o intérprete não está disponível ao clicar em Criar nova nota ou na interface do usuário do intérprete por padrão.

Os usuários de domínio privilegiado podem usar o arquivo para controlar o Shiro.ini acesso à interface do usuário do Interpretador. Somente esses usuários podem criar novos %sh intérpretes e definir permissões em cada novo %sh intérprete. Para controlar o acesso usando o shiro.ini arquivo, use as seguintes etapas:

  1. Defina uma nova função usando um nome de grupo de domínio existente. No exemplo a seguir, adminGroupName é um grupo de usuários privilegiados no AAD. Não use caracteres especiais ou espaços em branco no nome do grupo. Os caracteres depois = dão as permissões para essa função. * significa que o grupo tem permissões completas.

    [roles]
    adminGroupName = *
    
  2. Adicione a nova função para acesso aos intérpretes do Zeppelin. No exemplo a seguir, todos os usuários adminGroupName recebem acesso aos intérpretes do Zeppelin e podem criar novos intérpretes. Você pode colocar várias funções entre os colchetes em roles[], separadas por vírgulas. Em seguida, os usuários que têm as permissões necessárias, podem acessar os intérpretes do Zeppelin.

    [urls]
    /api/interpreter/** = authc, roles[adminGroupName]
    

Exemplo shiro.ini para vários grupos de domínio:

[main]
anyofrolesuser = org.apache.zeppelin.utils.AnyOfRolesUserAuthorizationFilter

[roles]
group1 = *
group2 = *
group3 = *

[urls]
/api/interpreter/** = authc, anyofrolesuser[group1, group2, group3]

Gestão de sessões Livy

O primeiro parágrafo de código em seu bloco de anotações do Zeppelin cria uma nova sessão do Livy em seu cluster. Esta sessão é compartilhada em todos os blocos de anotações do Zeppelin criados posteriormente. Se a sessão de Livy for morta por qualquer motivo, os trabalhos não serão executados a partir do caderno do Zeppelin.

Nesse caso, você deve executar as etapas a seguir antes de começar a executar trabalhos a partir de um notebook do Zeppelin.

  1. Reinicie o intérprete de Livy a partir do caderno do Zeppelin. Para fazer isso, abra as configurações do intérprete selecionando o nome de usuário conectado no canto superior direito e, em seguida, selecione Intérprete.

    Launch interpreter.

  2. Desloque-se para livy2 e, em seguida, selecione reiniciar.

    Restart the Livy interpreter.

  3. Execute uma célula de código a partir de um bloco de anotações Zeppelin existente. Esse código cria uma nova sessão do Livy no cluster HDInsight.

Informações gerais

Validar serviço

Para validar o serviço do Ambari, navegue até https://CLUSTERNAME.azurehdinsight.net/#/main/services/ZEPPELIN/summary onde CLUSTERNAME é o nome do cluster.

Para validar o serviço a partir de uma linha de comando, SSH para o nó principal. Mude o usuário para o zeppelin usando o comando sudo su zeppelin. Comandos de status:

Comando Description
/usr/hdp/current/zeppelin-server/bin/zeppelin-daemon.sh status Estado do serviço.
/usr/hdp/current/zeppelin-server/bin/zeppelin-daemon.sh --version Versão do serviço.
ps -aux | grep zeppelin Identificar PID.

Locais de registo

Serviço Caminho
zeppelin-servidor /usr/hdp/current/zeppelin-server/
Registos do Servidor /var/log/zepelim
Interpretador de configuração, Shiro, site.xml, log4j /usr/hdp/current/zeppelin-server/conf ou /etc/zeppelin/conf
Diretório PID /var/run/zepelim

Ativar o registo de depuração

  1. Navegue até https://CLUSTERNAME.azurehdinsight.net/#/main/services/ZEPPELIN/summary onde CLUSTERNAME é o nome do cluster.

  2. Navegue até CONFIGS>Advanced zeppelin-log4j-properties>log4j_properties_content.

  3. Modificar log4j.appender.dailyfile.Threshold = INFO para log4j.appender.dailyfile.Threshold = DEBUG.

  4. Adicionar log4j.logger.org.apache.zeppelin.realm=DEBUG.

  5. Salve as alterações e reinicie o serviço.

Próximos passos