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 ouadl://
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
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
Crie um novo bloco de notas. No painel de cabeçalho, navegue até Bloco de Anotações>Criar nova nota.
Introduza um nome para o bloco de notas e, em seguida, selecione Criar Nota.
Verifique se o cabeçalho do bloco de anotações mostra um status conectado. É indicado por um ponto verde no canto superior direito.
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:
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.
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.
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.
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 .
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.
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.
Abra as configurações do intérprete. No canto superior direito, selecione o nome de usuário conectado e, em seguida, selecione Intérprete.
Desloque-se para livy2 e, em seguida, selecione editar.
Navegue até a tecla
livy.spark.jars.packages
e defina seu valor no formatogroup:id:version
. Portanto, se você quiser usar o pacote spark-csv , você deve definir o valor da chave comocom.databricks:spark-csv_2.10:1.4.0
.Selecione Salvar e, em seguida, OK para reiniciar o intérprete Livy.
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.
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.
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:
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 = *
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 emroles[]
, 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.
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.
Desloque-se para livy2 e, em seguida, selecione reiniciar.
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
Navegue até
https://CLUSTERNAME.azurehdinsight.net/#/main/services/ZEPPELIN/summary
onde CLUSTERNAME é o nome do cluster.Navegue até CONFIGS>Advanced zeppelin-log4j-properties>log4j_properties_content.
Modificar
log4j.appender.dailyfile.Threshold = INFO
paralog4j.appender.dailyfile.Threshold = DEBUG
.Adicionar
log4j.logger.org.apache.zeppelin.realm=DEBUG
.Salve as alterações e reinicie o serviço.