Använda Apache Zeppelin-anteckningsböcker med Apache Spark-kluster i Azure HDInsight

HDInsight Spark-kluster innehåller Apache Zeppelin-notebook-filer . Använd notebook-filerna för att köra Apache Spark-jobb. I den här artikeln får du lära dig hur du använder Zeppelin-notebook-filen i ett HDInsight-kluster.

Förutsättningar

Starta en Apache Zeppelin-anteckningsbok

  1. I Översikt över Spark-klustret väljer du Zeppelin Notebook från klusterinstrumentpaneler. Ange administratörsautentiseringsuppgifterna för klustret.

    Kommentar

    Du kan också nå Zeppelin Notebook för klustret genom att öppna följande URL i webbläsaren. Ersätt CLUSTERNAME med namnet på klustret:

    https://CLUSTERNAME.azurehdinsight.net/zeppelin

  2. Skapa en ny anteckningsbok. Gå till Anteckningsbok>Skapa ny anteckning i rubrikfönstret.

    Create a new Zeppelin notebook.

    Ange ett namn på anteckningsboken och välj sedan Skapa anteckning.

  3. Kontrollera att notebook-huvudet visar en ansluten status. Den betecknas med en grön punkt i det övre högra hörnet.

    Zeppelin notebook status.

  4. Läs in exempeldata i en tillfällig tabell. När du skapar ett Spark-kluster i HDInsight kopieras exempeldatafilen, hvac.csv, till det associerade lagringskontot under \HdiSamples\SensorSampleData\hvac.

    I det tomma stycket som skapas som standard i den nya notebook-filen klistrar du in följande kodfragment.

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

    Tryck på SKIFT + RETUR eller välj knappen Spela upp för stycket för att köra kodfragmentet. Statusen till höger i stycket ska gå från KLAR, VÄNTAR, KÖRS till KLAR. Utdata visas längst ned i samma stycke. Skärmbilden ser ut som följande bild:

    Create a temporary table from raw data.

    Du kan också ange en rubrik för varje stycke. I det högra hörnet i stycket väljer du ikonen Inställningar (sprocket) och väljer sedan Visa rubrik.

    Kommentar

    %spark2-tolk stöds inte i Zeppelin-notebook-filer i alla HDInsight-versioner, och %sh-tolken stöds inte från HDInsight 4.0 och senare.

  5. Nu kan du köra Spark SQL-instruktioner i hvac tabellen. Klistra in följande fråga i ett nytt stycke. Frågan hämtar byggnads-ID:t. Också skillnaden mellan målet och faktiska temperaturer för varje byggnad på ett visst datum. Tryck på SKIFT + RETUR.

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

    Instruktionen %sql i början instruerar notebook-filen att använda Livy Scala-tolken.

  6. Välj ikonen Stapeldiagram för att ändra visningen. inställningar visas när du har valt stapeldiagram, låter dig välja Nycklar och Värden. Följande skärmbild visar utdata.

    Run a Spark SQL statement using the notebook1.

  7. Du kan också köra Spark SQL-instruktioner med hjälp av variabler i frågan. Nästa kodfragment visar hur du definierar en variabel, Temp, i frågan med de möjliga värden som du vill fråga med. När du först kör frågan fylls en listruta automatiskt med de värden som du har angett för variabeln.

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

    Klistra in det här kodfragmentet i ett nytt stycke och tryck på SKIFT + RETUR. Välj sedan 65 i listrutan Temp .

  8. Välj ikonen Stapeldiagram för att ändra visningen. Välj sedan inställningar och gör följande ändringar:

    • Grupper: Lägg till måltemp.

    • Värden: 1. Ta bort datum. 2. Lägg till temp_diff. 3. Ändra aggregatorn från SUM till AVG.

      Följande skärmbild visar utdata.

      Run a Spark SQL statement using the notebook2.

Hur gör jag för att använda externa paket med notebook-filen?

Zeppelin Notebook i Apache Spark-kluster i HDInsight kan använda externa, community-bidragna paket som inte ingår i klustret. Sök på Maven-lagringsplatsen efter den fullständiga listan över paket som är tillgängliga. Du kan också hämta en lista över tillgängliga paket från andra källor. En fullständig lista över community-bidragda paket finns till exempel på Spark Packages.

I den här artikeln får du se hur du använder spark-csv-paketet med Jupyter Notebook.

  1. Öppna tolkinställningar. I det övre högra hörnet väljer du det inloggade användarnamnet och väljer sedan Tolk.

    Launch interpreter.

  2. Rulla till livy2 och välj sedan redigera.

    Change interpreter settings1.

  3. Navigera till nyckeln livy.spark.jars.packagesoch ange dess värde i formatet group:id:version. Om du vill använda spark-csv-paketet måste du ange värdet för nyckeln till com.databricks:spark-csv_2.10:1.4.0.

    Change interpreter settings2.

    Välj Spara och sedan OK för att starta om Livy-tolken.

  4. Om du vill förstå hur du anländer till värdet för nyckeln som anges ovan gör du så här.

    a. Leta upp paketet på Maven-lagringsplatsen. I den här artikeln använde vi spark-csv.

    b. Från lagringsplatsen samlar du in värdena för GroupId, ArtifactId och Version.

    Use external packages with Jupyter Notebook.

    c. Sammanfoga de tre värdena, avgränsade med ett kolon (:).

    com.databricks:spark-csv_2.10:1.4.0
    

Var sparas Zeppelin-anteckningsböckerna?

Zeppelin-notebook-filerna sparas i klustrets huvudnoder. Om du tar bort klustret tas även notebook-filerna bort. Om du vill bevara dina notebook-filer för senare användning i andra kluster måste du exportera dem när du har kört jobben. Om du vill exportera en notebook-fil väljer du ikonen Exportera enligt bilden nedan.

Download notebook.

Den här åtgärden sparar notebook-filen som en JSON-fil på nedladdningsplatsen.

Kommentar

  • I HDI 4.0 är sökvägen till zeppelin notebook-katalogen, /usr/hdp/<version>/zeppelin/notebook/<notebook_session_id>/

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

    Var som i HDI 5.0 och ovanför den här sökvägen är annorlunda /usr/hdp/<version>/zeppelin/notebook/<Kernel_name>/

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

  • Filnamnet som lagras är annorlunda i HDI 5.0. Den lagras som <notebook_name>_<sessionid>.zpln

    T.ex testzeppelin_2JJK53XQA.zpln

    I HDI 4.0 lagras filnamnet bara note.json under session_id katalog.

    T.ex /2JMC9BZ8X/note.json

  • HDI Zeppelin sparar alltid notebook-filen i sökvägen /usr/hdp/<version>/zeppelin/notebook/ på en lokal hn0-disk.

    Om du vill att notebook-filen ska vara tillgänglig även efter att klustret har tagits bort kan du försöka använda Azure File Storage (Använda SMB-protokoll) och länka den till den lokala sökvägen. Mer information finns i Mount SMB Azure file share on Linux (Montera SMB Azure-filresurs på Linux)

    När du har monterat den kan du ändra zeppelin-konfigurationen zeppelin.notebook.dir till den monterade sökvägen i ambari-användargränssnittet.

  • SMB-filresursen som GitNotebookRepo-lagring rekommenderas inte för zeppelin version 0.10.1

Använd Shiro för att konfigurera åtkomst till Zeppelin-tolkar i ESP-kluster (Enterprise Security Package)

Som nämnts ovan stöds inte tolken %sh från HDInsight 4.0 och senare. Eftersom tolken introducerar potentiella säkerhetsproblem, till exempel åtkomstnyckelflikar med shell-kommandon, har den dessutom %sh tagits bort från HDInsight 3.6 ESP-kluster. Det innebär att %sh tolken inte är tillgänglig när du klickar på Skapa ny anteckning eller i tolkgränssnittet som standard.

Privilegierade domänanvändare kan använda Shiro.ini filen för att styra åtkomsten till tolkgränssnittet. Endast dessa användare kan skapa nya %sh tolkar och ange behörigheter för varje ny %sh tolk. Använd följande steg för att styra åtkomsten shiro.ini med hjälp av filen:

  1. Definiera en ny roll med ett befintligt domännamn för domängruppen. I följande exempel adminGroupName är en grupp privilegierade användare i AAD. Använd inte specialtecken eller blanksteg i gruppnamnet. Tecknen efter = ger behörighet för den här rollen. * innebär att gruppen har fullständiga behörigheter.

    [roles]
    adminGroupName = *
    
  2. Lägg till den nya rollen för åtkomst till Zeppelin-tolkar. I följande exempel får alla användare i adminGroupName åtkomst till Zeppelin-tolkar och kan skapa nya tolkar. Du kan placera flera roller mellan hakparenteserna i roles[], avgränsade med kommatecken. Sedan kan användare som har nödvändiga behörigheter komma åt Zeppelin-tolkar.

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

Exempel shiro.ini för flera domängrupper:

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

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

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

Livy sessionshantering

Det första kodstycket i zeppelinanteckningsboken skapar en ny Livy-session i klustret. Den här sessionen delas över alla Zeppelin-anteckningsböcker som du senare skapar. Om Livy-sessionen av någon anledning avlivas körs inte jobb från Zeppelin-anteckningsboken.

I sådana fall måste du utföra följande steg innan du kan börja köra jobb från en Zeppelin-anteckningsbok.

  1. Starta om Livy-tolken från Zeppelin-anteckningsboken. Det gör du genom att öppna tolkinställningarna genom att välja det inloggade användarnamnet i det övre högra hörnet och sedan välja Tolk.

    Launch interpreter.

  2. Rulla till livy2 och välj sedan starta om.

    Restart the Livy interpreter.

  3. Kör en kodcell från en befintlig Zeppelin-anteckningsbok. Den här koden skapar en ny Livy-session i HDInsight-klustret.

Allmän information

Verifiera tjänsten

Om du vill verifiera tjänsten från Ambari går du till https://CLUSTERNAME.azurehdinsight.net/#/main/services/ZEPPELIN/summary platsen där CLUSTERNAME är namnet på klustret.

För att verifiera tjänsten från en kommandorad, SSH till huvudnoden. Växla användare till zeppelin med kommandot sudo su zeppelin. Statuskommandon:

Kommando beskrivning
/usr/hdp/current/zeppelin-server/bin/zeppelin-daemon.sh status Tjänststatus.
/usr/hdp/current/zeppelin-server/bin/zeppelin-daemon.sh --version Tjänstversion.
ps -aux | grep zeppelin Identifiera PID.

Loggplatser

Tjänst Sökväg
zeppelin-server /usr/hdp/current/zeppelin-server/
Serverloggar /var/log/zeppelin
Konfigurationstolkare, Shiro, site.xml, log4j /usr/hdp/current/zeppelin-server/conf eller /etc/zeppelin/conf
PID-katalog /var/run/zeppelin

Aktivera felsökningsloggning

  1. Navigera till https://CLUSTERNAME.azurehdinsight.net/#/main/services/ZEPPELIN/summary platsen där CLUSTERNAME är namnet på klustret.

  2. Gå till CONFIGS>Advanced zeppelin-log4j-properties>log4j_properties_content.

  3. Ändra log4j.appender.dailyfile.Threshold = INFO till log4j.appender.dailyfile.Threshold = DEBUG.

  4. Lägg till log4j.logger.org.apache.zeppelin.realm=DEBUG.

  5. Spara ändringar och starta om tjänsten.

Nästa steg