Utilizar blocos de notas do Apache Zeppelin com o cluster do Apache Spark no Azure HDInsightUse Apache Zeppelin notebooks with Apache Spark cluster on Azure HDInsight

Os clusters HDInsight Spark incluem cadernos Apache Zeppelin.HDInsight Spark clusters include Apache Zeppelin notebooks. Usa os cadernos para gerir os empregos da Apache Spark.Use the notebooks to run Apache Spark jobs. Neste artigo, você aprende a usar o caderno Zeppelin em um cluster HDInsight.In this article, you learn how to use the Zeppelin notebook on an HDInsight cluster.

Pré-requisitosPrerequisites

  • Um cluster do Apache Spark no HDInsight.An Apache Spark cluster on HDInsight. Para obter instruções, veja Criar clusters do Apache Spark no Azure HDInsight.For instructions, see Create Apache Spark clusters in Azure HDInsight.
  • O esquema URI para o armazenamento primário dos seus clusters.The URI scheme for your clusters primary storage. O esquema seria wasb:// para o Azure Blob Storage, abfs:// para a Azure Data Lake Storage Gen2 ou adl:// para a Azure Data Lake Storage Gen1.The scheme would be wasb:// for Azure Blob Storage, abfs:// for Azure Data Lake Storage Gen2 or adl:// for Azure Data Lake Storage Gen1. Se a transferência segura estiver ativada para o Armazenamento Blob, o URI será wasbs:// .If secure transfer is enabled for Blob Storage, the URI would be wasbs://. Para mais informações, consulte Exigir transferência segura no Azure Storage .For more information, see Require secure transfer in Azure Storage .

Lançar um caderno Apache ZeppelinLaunch an Apache Zeppelin notebook

  1. A partir do conjunto spark, selecione o caderno Zeppelin dos dashboards cluster.From the Spark cluster Overview, select Zeppelin notebook from Cluster dashboards. Introduza as credenciais de administração para o cluster.Enter the admin credentials for the cluster.

    Nota

    Pode também chegar ao Bloco de Notas zeppelin para o seu cluster abrindo o seguinte URL no seu browser.You may also reach the Zeppelin Notebook for your cluster by opening the following URL in your browser. Substitua CLUSTERNAME pelo nome do cluster:Replace CLUSTERNAME with the name of your cluster:

    https://CLUSTERNAME.azurehdinsight.net/zeppelin

  2. Crie um novo bloco de notas.Create a new notebook. A partir do painel de cabeçalho, navegue para Notebook > Crie uma nova nota.From the header pane, navigate to Notebook > Create new note.

    Criar um novo caderno Zeppelin

    Introduza um nome para o caderno e, em seguida, selecione Criar Nota.Enter a name for the notebook, then select Create Note.

  3. Certifique-se de que o cabeçalho do caderno mostra um estado ligado.Ensure the notebook header shows a connected status. É denotado por um ponto verde no canto superior direito.It's denoted by a green dot in the top-right corner.

    Estado do caderno zeppelin

  4. Carregue dados de exemplo para uma tabela temporária.Load sample data into a temporary table. Quando cria um cluster Spark em HDInsight, o ficheiro de dados da hvac.csv amostra, é copiado para a conta de armazenamento associada em \HdiSamples\SensorSampleData\hvac .When you create a Spark cluster in HDInsight, the sample data file, hvac.csv, is copied to the associated storage account under \HdiSamples\SensorSampleData\hvac.

    No parágrafo vazio que é criado por defeito no novo caderno, cole o seguinte corte.In the empty paragraph that is created by default in the new notebook, paste the following snippet.

    %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")
    

    Prima SHIFT + ENTER ou selecione o botão Reproduzir para o parágrafo executar o corte.Press SHIFT + ENTER or select the Play button for the paragraph to run the snippet. O estado no canto direito do parágrafo deve progredir de PRONTO, PENDENTE, RUNNING para TERMINADO.The status on the right-corner of the paragraph should progress from READY, PENDING, RUNNING to FINISHED. A saída aparece na parte inferior do mesmo parágrafo.The output shows up at the bottom of the same paragraph. A imagem parece a seguinte imagem:The screenshot looks like the following image:

    Criar uma tabela temporária a partir de dados brutos

    Também pode fornecer um título a cada parágrafo.You can also provide a title to each paragraph. A partir do canto direito do parágrafo, selecione o ícone Definições (sprocket) e, em seguida, selecione o título de Show.From the right-hand corner of the paragraph, select the Settings icon (sprocket), and then select Show title.

    Nota

    O intérprete %spark2 não é suportado em cadernos Zeppelin em todas as versões HDInsight, e o intérprete %sh não será suportado a partir de HDInsight 4.0 em diante.%spark2 interpreter is not supported in Zeppelin notebooks across all HDInsight versions, and %sh interpreter will not be supported from HDInsight 4.0 onwards.

  5. Agora pode executar declarações spark SQL na hvac mesa.You can now run Spark SQL statements on the hvac table. Cole a seguinte consulta num novo parágrafo.Paste the following query in a new paragraph. A consulta recupera a identificação do edifício.The query retrieves the building ID. Também a diferença entre o alvo e as temperaturas reais para cada edifício numa dada data.Also the difference between the target and actual temperatures for each building on a given date. MUDANÇA DE IMPRENSA + ENTER.Press SHIFT + ENTER.

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

    A declaração de %sql no início diz ao caderno para usar o intérprete Livy Scala.The %sql statement at the beginning tells the notebook to use the Livy Scala interpreter.

  6. Selecione o ícone 'Gráfico de barras' para alterar o visor.Select the Bar Chart icon to change the display. definições, apareça depois de ter selecionado o Gráfico de Barras, permite-lhe escolher Chaves e Valores.settings, appear after you have selected Bar Chart, allows you to choose Keys, and Values. A imagem que se segue mostra a saída.The following screenshot shows the output.

    Executar uma declaração de Spark SQL usando o caderno1

  7. Também pode executar declarações Spark SQL usando variáveis na consulta.You can also run Spark SQL statements using variables in the query. O próximo corte mostra como definir uma variável, Temp na consulta com os possíveis valores com os quais pretende consultar.The next snippet shows how to define a variable, Temp, in the query with the possible values you want to query with. Quando se faz a consulta pela primeira vez, uma queda é automaticamente povoada com os valores especificados para a variável.When you first run the query, a drop-down is automatically populated with the values you specified for the variable.

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

    Cole este corte num novo parágrafo e prima SHIFT + ENTER.Paste this snippet in a new paragraph and press SHIFT + ENTER. Em seguida, selecione 65 da lista de abandono temporário.Then select 65 from the Temp drop-down list.

  8. Selecione o ícone 'Gráfico de barras' para alterar o visor.Select the Bar Chart icon to change the display. Em seguida, selecione as definições e faça as seguintes alterações:Then select settings and make the following changes:

    • Grupos: Adicione o targettemp.Groups: Add targettemp.

    • Valores: 1.Values: 1. Remover a data.Remove date. 2.2. Adicione temp_diff.Add temp_diff. 3.3. Mude o agregador de SUM para AVG.Change the aggregator from SUM to AVG.

      A imagem que se segue mostra a saída.The following screenshot shows the output.

      Executar uma declaração de Spark SQL usando o caderno2

Como uso pacotes externos com o caderno?How do I use external packages with the notebook?

O caderno Zeppelin no cluster Apache Spark em HDInsight pode usar pacotes externos e colaborativos que não estão incluídos no cluster.Zeppelin notebook in Apache Spark cluster on HDInsight can use external, community-contributed packages that aren't included in the cluster. Pesque o repositório Maven para obter a lista completa de pacotes disponíveis.Search the Maven repository for the complete list of packages that are available. Também pode obter uma lista de pacotes disponíveis de outras fontes.You can also get a list of available packages from other sources. Por exemplo, uma lista completa de pacotes com contribuições comunitárias está disponível nos Pacotes Spark.For example, a complete list of community-contributed packages is available at Spark Packages.

Neste artigo, você verá como usar o pacote spark-csv com o Caderno Jupyter.In this article, you'll see how to use the spark-csv package with the Jupyter Notebook.

  1. Abra as definições do intérprete.Open interpreter settings. A partir do canto superior direito, selecione o nome de utilizador registado e, em seguida, selecione Interpreter.From the top-right corner, select the logged in user name, then select Interpreter.

    Intérprete de lançamento

  2. Percorra para livy2 e, em seguida, selecione editar.Scroll to livy2, then select edit.

    Alterar definições de intérprete1

  3. Navegue para a livy.spark.jars.packages tecla, e desave o seu valor no formato group:id:version .Navigate to key livy.spark.jars.packages, and set its value in the format group:id:version. Por isso, se quiser utilizar o pacote spark-csv, deve definir o valor da chave para com.databricks:spark-csv_2.10:1.4.0 .So, if you want to use the spark-csv package, you must set the value of the key to com.databricks:spark-csv_2.10:1.4.0.

    Alterar definições de intérprete2

    Selecione Save e, em seguida, OK para reiniciar o intérprete Livy.Select Save and then OK to restart the Livy interpreter.

  4. Se quiser entender como chegar ao valor da chave que está acima, eis como.If you want to understand how to arrive at the value of the key entered above, here's how.

    a.a. Localize o pacote no Repositório De Maven.Locate the package in the Maven Repository. Para este artigo, usamos spark-csv.For this article, we used spark-csv.

    b.b. A partir do repositório, reúna os valores para GroupId, ArtifactId e Versão.From the repository, gather the values for GroupId, ArtifactId, and Version.

    Use pacotes externos com Caderno Jupyter

    c.c. Concatenar os três valores, separados por um cólon .Concatenate the three values, separated by a colon (:).

    com.databricks:spark-csv_2.10:1.4.0
    

Onde estão guardados os cadernos zeppelin?Where are the Zeppelin notebooks saved?

Os cadernos zeppelin são guardados para os headnodes do cluster.The Zeppelin notebooks are saved to the cluster headnodes. Assim, se eliminar o cluster, os cadernos também serão apagados.So, if you delete the cluster, the notebooks will be deleted as well. Se quiser preservar os seus cadernos para posterior utilização noutros clusters, deve exportá-los depois de terminar de gerir os trabalhos.If you want to preserve your notebooks for later use on other clusters, you must export them after you have finished running the jobs. Para exportar um caderno, selecione o ícone Exportação como mostrado na imagem abaixo.To export a notebook, select the Export icon as shown in the image below.

Baixar o caderno

Esta ação guarda o caderno como um ficheiro JSON na sua localização de descarregamento.This action saves the notebook as a JSON file in your download location.

Utilizar Shiro para configurar o acesso a intérpretes zeppelin em clusters de pacotes de segurança empresarial (ESP)Use Shiro to Configure Access to Zeppelin Interpreters in Enterprise Security Package (ESP) Clusters

Como referido acima, o %sh intérprete não é suportado a partir de HDInsight 4.0 em diante.As noted above, the %sh interpreter isn't supported from HDInsight 4.0 onwards. Além disso, uma vez %sh que o intérprete introduz potenciais problemas de segurança, tais como os keytabs de acesso utilizando comandos de concha, foi removido também dos clusters HDInsight 3.6 ESP.Furthermore, since %sh interpreter introduces potential security issues, such as access keytabs using shell commands, it has been removed from HDInsight 3.6 ESP clusters as well. Significa que %sh o intérprete não está disponível ao clicar em Criar nova nota ou na UI intérprete por padrão.It means %sh interpreter isn't available when clicking Create new note or in the Interpreter UI by default.

Os utilizadores privilegiados de domínio podem usar o Shiro.ini ficheiro para controlar o acesso à UI intérprete.Privileged domain users can use the Shiro.ini file to control access to the Interpreter UI. Apenas estes utilizadores podem criar novos %sh intérpretes e definir permissões em cada novo %sh intérprete.Only these users can create new %sh interpreters and set permissions on each new %sh interpreter. Para controlar o acesso utilizando o shiro.ini ficheiro, utilize os seguintes passos:To control access using the shiro.ini file, use the following steps:

  1. Defina um novo papel utilizando um nome de grupo de domínio existente.Define a new role using an existing domain group name. No exemplo seguinte, adminGroupName está um grupo de utilizadores privilegiados na AAD.In the following example, adminGroupName is a group of privileged users in AAD. Não utilize caracteres especiais ou espaços brancos no nome de grupo.Don't use special characters or white spaces in the group name. Os personagens depois = dão as permissões para este papel.The characters after = give the permissions for this role. * significa que o grupo tem permissões completas.* means the group has full permissions.

    [roles]
    adminGroupName = *
    
  2. Adicione o novo papel de acesso aos intérpretes zeppelin.Add the new role for access to Zeppelin interpreters. No exemplo seguinte, todos os utilizadores adminGroupName têm acesso a intérpretes Zeppelin e podem criar novos intérpretes.In the following example, all users in adminGroupName are given access to Zeppelin interpreters and can create new interpreters. Pode colocar várias funções entre os roles[] suportes, separadas por vírgulas.You can put multiple roles between the brackets in roles[], separated by commas. Em seguida, os utilizadores que tenham as permissões necessárias, podem aceder aos intérpretes zeppelin.Then, users that have the necessary permissions, can access Zeppelin interpreters.

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

Gestão de sessão de LivyLivy session management

O primeiro parágrafo de código no seu caderno Zeppelin cria uma nova sessão livy no seu cluster.The first code paragraph in your Zeppelin notebook creates a new Livy session in your cluster. Esta sessão é partilhada em todos os cadernos zeppelin que mais tarde cria.This session is shared across all Zeppelin notebooks that you later create. Se a sessão da Livy for morta por alguma razão, os empregos não fugirão do caderno zeppelin.If the Livy session is killed for any reason, jobs won't run from the Zeppelin notebook.

Neste caso, deve fazer os seguintes passos antes de começar a trabalhar a partir de um caderno Zeppelin.In such a case, you must do the following steps before you can start running jobs from a Zeppelin notebook.

  1. Reinicie o intérprete Livy do caderno Zeppelin.Restart the Livy interpreter from the Zeppelin notebook. Para tal, abra as definições do intérprete selecionando o nome de utilizador registado no canto superior direito e, em seguida, selecione Interpreter.To do so, open interpreter settings by selecting the logged in user name from the top-right corner, then select Interpreter.

    Intérprete de lançamento

  2. Percorra para livy2 e, em seguida, selecione reiniciar.Scroll to livy2, then select restart.

    Reiniciar o intérprete Livy

  3. Executar uma célula de código de um caderno Zeppelin existente.Run a code cell from an existing Zeppelin notebook. Este código cria uma nova sessão livy no cluster HDInsight.This code creates a new Livy session in the HDInsight cluster.

Informações geraisGeneral information

Validar serviçoValidate service

Para validar o serviço a partir de Ambari, navegue https://CLUSTERNAME.azurehdinsight.net/#/main/services/ZEPPELIN/summary até onde clustername é o nome do seu cluster.To validate the service from Ambari, navigate to https://CLUSTERNAME.azurehdinsight.net/#/main/services/ZEPPELIN/summary where CLUSTERNAME is the name of your cluster.

Para validar o serviço a partir de uma linha de comando, SSH para o nó de cabeça.To validate the service from a command line, SSH to the head node. Mude o utilizador para zeppelin utilizando o comando sudo su zeppelin .Switch user to zeppelin using command sudo su zeppelin. Comandos de estado:Status commands:

ComandoCommand DescriçãoDescription
/usr/hdp/current/zeppelin-server/bin/zeppelin-daemon.sh status Estado de serviço.Service status.
/usr/hdp/current/zeppelin-server/bin/zeppelin-daemon.sh --version Versão de serviço.Service version.
ps -aux | grep zeppelin Identifique o PID.Identify PID.

Locais de registoLog locations

ServiçoService CaminhoPath
zeppelin-servidorzeppelin-server /usr/hdp/current/zeppelin-server//usr/hdp/current/zeppelin-server/
Registos do ServidorServer Logs /var/log/zeppelin/var/log/zeppelin
Intérprete de Shiro configuração, site.xml, log4jConfiguration Interpreter, Shiro, site.xml, log4j /usr/hdp/current/zeppelin-server/conf ou /etc/zeppelin/conf/usr/hdp/current/zeppelin-server/conf or /etc/zeppelin/conf
Diretório PIDPID directory /var/run/zeppelin/var/run/zeppelin

Ativar a exploração madeireira de depurarEnable debug logging

  1. Navegue para https://CLUSTERNAME.azurehdinsight.net/#/main/services/ZEPPELIN/summary onde clustername é o nome do seu cluster.Navigate to https://CLUSTERNAME.azurehdinsight.net/#/main/services/ZEPPELIN/summary where CLUSTERNAME is the name of your cluster.

  2. Navegue para CONFIGS > Advanced zeppelin-log4j-properties > log4j_properties_content.Navigate to CONFIGS > Advanced zeppelin-log4j-properties > log4j_properties_content.

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

  4. Adicione log4j.logger.org.apache.zeppelin.realm=DEBUG .Add log4j.logger.org.apache.zeppelin.realm=DEBUG.

  5. Guarde as alterações e reinicie o serviço.Save changes and restart service.

Passos seguintesNext steps