Usare i notebook di Apache Zeppelin con cluster Apache Spark in Azure HDInsight

I cluster HDInsight Spark includono notebook Apache Zeppelin . Usare i notebook per eseguire processi Apache Spark. Questo articolo illustra come usare il notebook Zeppelin in un cluster HDInsight.

Prerequisiti

Avviare un notebook di Apache Zeppelin

  1. Nella panoramica del cluster Spark selezionare Notebook Zeppelin dai dashboard del cluster. Immettere le credenziali di amministratore per il cluster.

    Nota

    È anche possibile raggiungere il notebook di Zeppelin per il cluster aprendo l'URL seguente nel browser. Sostituire CLUSTERNAME con il nome del cluster:

    https://CLUSTERNAME.azurehdinsight.net/zeppelin

  2. Creare un nuovo notebook. Nel riquadro intestazione passare aCrea nuova nota nel notebook>.

    Creare un nuovo notebook Zeppelin

    Immettere un nome per il notebook e quindi selezionare Crea nota.

  3. Verificare che l'intestazione del notebook mostri uno stato connesso. È denotato da un punto verde nell'angolo superiore destro.

    Stato di notebook Zeppelin

  4. Caricare i dati di esempio in una tabella temporanea. Quando si crea un cluster Spark in HDInsight, il file di dati di esempio, hvac.csvviene copiato nell'account di archiviazione associato in \HdiSamples\SensorSampleData\hvac.

    Nel paragrafo vuoto creato per impostazione predefinita del nuovo notebook, incollare il frammento di codice riportato di seguito.

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

    Premere MAIUSC + INVIO o selezionare il pulsante Play per il paragrafo per eseguire il frammento di codice. Lo stato nell'angolo destro del paragrafo deve passare da PRONTO, IN ATTESA, IN ESECUZIONE, a COMPLETATO. L'output viene visualizzato nella parte inferiore dello stesso paragrafo. Lo screenshot è simile all'immagine seguente:

    Crea una tabella temporanea dai dati non elaborati

    È inoltre possibile fornire un titolo a ogni paragrafo. Nell'angolo destro del paragrafo selezionare l'icona Impostazioni (sprocket) e quindi selezionare Mostra titolo.

    Nota

    L'interprete %spark2 non è supportato nei notebook Zeppelin in tutte le versioni di HDInsight e l'interprete %sh non sarà supportato a partire da HDInsight 4.0.

  5. È ora possibile eseguire istruzioni SPARK SQL nella hvac tabella. Incollare la query seguente in un nuovo paragrafo. La query recupera l'ID predefinito. Inoltre, la differenza tra la destinazione e le temperature effettive per ogni edificio in una data specificata. Premere MAIUSC + INVIO.

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

    L'istruzione %sql all'inizio indica al notebook di usare l'interprete Livy Scala.

  6. Selezionare l'icona Grafico a barre per modificare la visualizzazione. le impostazioni vengono visualizzate dopo aver selezionato grafico a barre, consente di scegliere Chiavi e Valori. Nella schermata riportata di seguito sono illustrate questo output.

    Eseguire un'istruzione Spark SQL usando il notebook1

  7. È inoltre possibile eseguire istruzioni SQL Spark tramite le variabili nella query. Il frammento di codice successivo illustra come definire una variabile, , Tempnella query con i valori possibili con cui eseguire una query. Quando si esegue la query per la prima volta, un elenco a tendina viene popolato automaticamente con i valori specificati per la variabile.

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

    Incollare questo frammento di codice in un nuovo paragrafo e premere MAIUSC+INVIO. Selezionare quindi 65 dall'elenco a discesa Temp .

  8. Selezionare l'icona Grafico a barre per modificare la visualizzazione. Selezionare quindi le impostazioni e apportare le modifiche seguenti:

    • Gruppi: Aggiungere targettemp.

    • Valori: 1. Rimuovere la data. 2. Aggiungere temp_diff. 3. Modificare l'aggregatore da SUM a AVG.

      Nella schermata riportata di seguito sono illustrate questo output.

      Eseguire un'istruzione Spark SQL usando il notebook2

Come usare pacchetti esterni con il notebook

Il notebook Zeppelin nel cluster Apache Spark in HDInsight può usare pacchetti esterni con contributi della community che non sono inclusi nel cluster. Cercare il repository Maven per l'elenco completo di pacchetti disponibili. È anche possibile ottenere un elenco dei pacchetti disponibili da altre origini. Ad esempio, un elenco completo dei pacchetti creati dalla community è disponibile nel sito Web spark-packages.org.

In questo articolo verrà illustrato come usare il pacchetto spark-csv con il Jupyter Notebook.

  1. Aprire le impostazioni dell'interprete. Nell'angolo in alto a destra selezionare il nome utente connesso e quindi selezionare Interprete.

    Avviare l'interprete

  2. Scorrere fino a livy2, quindi selezionare Modifica.

    Modificare le impostazioni dell'interprete1

  3. Passare a chiave livy.spark.jars.packagese impostare il relativo valore nel formato group:id:version. Se si vuole usare il pacchetto spark-csv, è quindi necessario impostare il valore della chiave su com.databricks:spark-csv_2.10:1.4.0.

    Modificare le impostazioni dell'interprete2

    Selezionare Salva e quindi OK per riavviare l'interprete Livy.

  4. il valore della chiave immesso sopra si determina come illustrato di seguito.

    a. Individuare un pacchetto nel repository Maven. Per questo articolo è stato usato spark-csv.

    b. Recuperare dal repository i valori per GroupId, ArtifactId e Version.

    Usare pacchetti esterni con Jupyter Notebook

    c. Concatenare i tre valori, separati da due punti (:).

    com.databricks:spark-csv_2.10:1.4.0
    

Posizione di salvataggio dei notebook Zeppelin

I notebook Zeppelin vengono salvati nei nodi head del cluster. Se si elimina il cluster, verranno quindi eliminati anche i notebook. Se si vogliono mantenere i notebook per usarli successivamente in altri cluster, è necessario esportarli al termine dell'esecuzione dei processi. Per esportare un notebook, selezionare l'icona Esporta come illustrato nell'immagine seguente.

Scaricare un notebook

Questa azione salva il notebook come file JSON nel percorso di download.

Usare Shiro per configurare l'accesso a interpreti Zeppelin nei cluster Enterprise Security Package (ESP)

Come indicato in precedenza, l'interprete %sh non è supportato da HDInsight 4.0 in avanti. Inoltre, poiché %sh l'interprete introduce potenziali problemi di sicurezza, ad esempio i keytab di accesso usando i comandi della shell, è stato rimosso anche dai cluster HDInsight 3.6 ESP. %sh Significa che l'interprete non è disponibile quando si fa clic su Crea nuova nota o nell'interfaccia utente dell'interprete per impostazione predefinita.

Gli utenti di dominio con privilegi possono usare il Shiro.ini file per controllare l'accesso all'interfaccia utente dell'interprete. Solo questi utenti possono creare nuovi %sh interpreti e impostare le autorizzazioni per ogni nuovo %sh interprete. Per controllare l'accesso usando il shiro.ini file, seguire questa procedura:

  1. Definire un nuovo ruolo usando un nome di gruppo di dominio esistente. Nell'esempio seguente è adminGroupName un gruppo di utenti con privilegi in AAD. Non usare caratteri speciali o spazi vuoti nel nome del gruppo. I caratteri dopo = aver dato le autorizzazioni per questo ruolo. * significa che il gruppo dispone di autorizzazioni complete.

    [roles]
    adminGroupName = *
    
  2. Aggiungere il nuovo ruolo per l'accesso agli interpreti Zeppelin. Nell'esempio seguente tutti gli utenti in adminGroupName hanno accesso agli interpreti Zeppelin e possono creare nuovi interpreti. È possibile inserire più ruoli tra parentesi quadre in roles[], separati da virgole. Gli utenti che dispongono delle autorizzazioni necessarie possono quindi accedere agli interpreti Zeppelin.

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

Esempio di shiro.ini per più gruppi di dominio:

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

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

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

Gestione delle sessioni di Livy

Il primo paragrafo di codice nel notebook Zeppelin crea una nuova sessione Livy nel cluster. Questa sessione viene condivisa in tutti i notebook zeppelin creati in un secondo momento. Se la sessione Livy viene terminata per qualsiasi motivo, i processi non verranno eseguiti dal notebook Zeppelin.

In questo caso, è necessario eseguire la procedura seguente prima di iniziare a eseguire processi da un notebook Zeppelin.

  1. Riavviare l'interprete Livy dal notebook Zeppelin. A tale scopo, aprire le impostazioni dell'interprete selezionando il nome utente connesso nell'angolo in alto a destra, quindi selezionare Interprete.

    Avviare l'interprete

  2. Scorrere fino a livy2, quindi selezionare Riavvia.

    Riavviare l'interprete Livy

  3. Eseguire una cella di codice da un notebook Zeppelin esistente. Questo codice crea una nuova sessione Livy nel cluster HDInsight.

Informazioni generali

Convalida del servizio

Per convalidare il servizio da Ambari, passare a https://CLUSTERNAME.azurehdinsight.net/#/main/services/ZEPPELIN/summary dove CLUSTERNAME è il nome del cluster.

Per convalidare il servizio da una riga di comando, SSH al nodo head. Passare all'utente a zeppelin usando il comando sudo su zeppelin. Comandi di stato:

Comando Descrizione
/usr/hdp/current/zeppelin-server/bin/zeppelin-daemon.sh status Stato del servizio.
/usr/hdp/current/zeppelin-server/bin/zeppelin-daemon.sh --version Versione del servizio.
ps -aux | grep zeppelin Identificare PID.

Percorsi dei log

Servizio Percorso
zeppelin-server /usr/hdp/current/zeppelin-server/
Log del server /var/log/zeppelin
Interprete di configurazione, Shiro, site.xml, log4j /usr/hdp/current/zeppelin-server/conf o /etc/zeppelin/conf
Directory PID /var/run/zeppelin

Abilitazione della registrazione di debug

  1. Passare a https://CLUSTERNAME.azurehdinsight.net/#/main/services/ZEPPELIN/summary dove CLUSTERNAME è il nome del cluster.

  2. Passare a CONFIGS>Advanced zeppelin-log4j-properties>log4j_properties_content.

  3. Modificare log4j.appender.dailyfile.Threshold = INFO in log4j.appender.dailyfile.Threshold = DEBUG.

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

  5. Salvare le modifiche e riavviare il servizio.

Passaggi successivi