Použití poznámkových bloků Apache Zeppelin s clusterem Apache Spark ve službě Azure HDInsight

Clustery HDInsight Spark zahrnují poznámkové bloky Apache Zeppelin . Pomocí poznámkových bloků můžete spouštět úlohy Apache Sparku. V tomto článku se dozvíte, jak používat poznámkový blok Zeppelin v clusteru HDInsight.

Požadavky

Spuštění poznámkového bloku Apache Zeppelin

  1. V přehledu clusteru Spark vyberte poznámkový blok Zeppelin z řídicích panelů clusteru. Zadejte přihlašovací údaje správce clusteru.

    Poznámka

    Do poznámkového bloku Zeppelin pro váš cluster se můžete dostat také otevřením následující adresy URL v prohlížeči. Nahraďte název clusteru názvem clusteru:

    https://CLUSTERNAME.azurehdinsight.net/zeppelin

  2. Vytvořte nový poznámkový blok. V podokně záhlaví přejděte do poznámkového bloku>Vytvořit novou poznámku.

    Create a new Zeppelin notebook

    Zadejte název poznámkového bloku a pak vyberte Vytvořit poznámku.

  3. Ujistěte se, že záhlaví poznámkového bloku zobrazuje připojený stav. Označuje se zeleným tečkou v pravém horním rohu.

    Zeppelin notebook status

  4. Načtěte vzorová data do dočasné tabulky. Při vytváření clusteru Spark v HDInsight se ukázkový datový soubor hvac.csvzkopíruje do přidruženého účtu úložiště v části \HdiSamples\SensorSampleData\hvac.

    Do prázdného odstavce vytvořeného ve výchozím nastavení v novém poznámkovém bloku vložte následující fragment kódu.

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

    Stiskněte SHIFT+ ENTER nebo vyberte tlačítko Přehrát pro odstavec, aby se spustil fragment kódu. Stav v pravém rohu odstavce by měl probíhat od PŘIPRAVENO, ČEKÁ NA VYŘÍZENÍ a DOKONČENO. Výstup se zobrazí v dolní části stejného odstavce. Snímek obrazovky vypadá jako na následujícím obrázku:

    Create a temporary table from raw data

    Můžete také zadat název každého odstavce. V pravém rohu odstavce vyberte ikonu Nastavení (srocket) a pak vyberte Zobrazit název.

    Poznámka

    Interpret %spark2 není podporován v poznámkových blocích Zeppelin ve všech verzích HDInsight a překladač %sh nebude podporován z HDInsight 4.0 dále.

  5. Teď můžete spouštět příkazy Spark SQL v hvac tabulce. Vložte následující dotaz do nového odstavce. Dotaz načte ID budovy. Rozdíl mezi cílovým a skutečnými teplotami pro každou budovu v daném datu. Stiskněte SHIFT+ENTER.

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

    Příkaz %sql na začátku říká poznámkovému bloku, aby používal interpret Livy Scala.

  6. Pokud chcete změnit zobrazení, vyberte ikonu pruhového grafu . po výběru pruhového grafu se zobrazí nastavení, které vám umožní zvolit klíče a hodnoty. Následující snímek obrazovky ukazuje výstup.

    Run a Spark SQL statement using the notebook1

  7. Příkazy Spark SQL můžete také spouštět pomocí proměnných v dotazu. Následující fragment kódu ukazuje, jak definovat proměnnou, Tempv dotazu s možnými hodnotami, se kterými se chcete dotazovat. Při prvním spuštění dotazu se rozevírací seznam automaticky vyplní hodnotami, které jste zadali pro proměnnou.

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

    Vložte tento fragment kódu do nového odstavce a stiskněte SHIFT+ENTER. Potom v rozevíracím seznamu Temp vyberte 65.

  8. Pokud chcete změnit zobrazení, vyberte ikonu pruhového grafu . Pak vyberte nastavení a proveďte následující změny:

    • Skupiny: Přidejte targettemp.

    • Hodnoty: 1. Odebrat datum. 2. Přidejte temp_diff. 3. Změňte agregátor ze sumy na AVG.

      Následující snímek obrazovky ukazuje výstup.

      Run a Spark SQL statement using the notebook2

Jak s poznámkovým blokem používám externí balíčky?

Poznámkový blok Zeppelin v clusteru Apache Spark v HDInsight může používat externí balíčky, které nejsou součástí clusteru. V úložišti Maven vyhledejte úplný seznam dostupných balíčků. Můžete také získat seznam dostupných balíčků z jiných zdrojů. Úplný seznam balíčků přispívácích komunitou je například k dispozici na webu Spark Packages.

V tomto článku se dozvíte, jak používat balíček spark-csv s poznámkovým blokem Jupyter.

  1. Otevřete nastavení interpreta. V pravém horním rohu vyberte přihlášené uživatelské jméno a pak vyberte Interpret.

    Launch interpreter

  2. Posuňte se na livy2 a vyberte upravit.

    Change interpreter settings1

  3. Přejděte na klíč livy.spark.jars.packagesa nastavte jeho hodnotu ve formátu group:id:version. Pokud tedy chcete použít balíček spark-csv , musíte nastavit hodnotu klíče na com.databricks:spark-csv_2.10:1.4.0.

    Change interpreter settings2

    Výběrem možnosti Uložit a pak ok restartujte interpret Livy.

  4. Pokud chcete pochopit, jak získat hodnotu klíče zadaného výše, tady je postup.

    a. Vyhledejte balíček v úložišti Maven. V tomto článku jsme použili spark-csv.

    b. V úložišti shromážděte hodnoty GroupId, ArtifactId a Version.

    Use external packages with Jupyter Notebook

    c. Zřetězení tří hodnot oddělených dvojtečkam (:).

    com.databricks:spark-csv_2.10:1.4.0
    

Kde jsou uložené poznámkové bloky Zeppelin?

Poznámkové bloky Zeppelin se ukládají do hlavních uzlů clusteru. Pokud tedy cluster odstraníte, poznámkové bloky se odstraní také. Pokud chcete poznámkové bloky zachovat pro pozdější použití v jiných clusterech, musíte je po dokončení spuštění úloh exportovat. Pokud chcete poznámkový blok exportovat, vyberte ikonu Exportovat , jak je znázorněno na obrázku níže.

Download notebook

Tato akce uloží poznámkový blok jako soubor JSON do umístění pro stažení.

Konfigurace Shiro přístupu k interpretům Zeppelin v clusterech ESP (Enterprise Security Package)

Jak je uvedeno výše, %sh interpret není podporován ve službě HDInsight 4.0 dále. Vzhledem k tomu, že %sh interpret zavádí potenciální problémy se zabezpečením, jako jsou přístupové klávesové zkratky pomocí příkazů prostředí, byly také odebrány z clusterů ESP HDInsight 3.6. Znamená to, že %sh interpret není ve výchozím nastavení dostupný při kliknutí na Vytvořit novou poznámku nebo v uživatelském rozhraní interpreta.

Uživatelé privilegované domény můžou soubor použít Shiro.ini k řízení přístupu k uživatelskému rozhraní interpreta. Pouze tito uživatelé můžou vytvářet nové %sh interprety a nastavit oprávnění pro každý nový %sh interpret. Pokud chcete řídit přístup pomocí shiro.ini souboru, postupujte následovně:

  1. Definujte novou roli pomocí existujícího názvu skupiny domén. V následujícím příkladu adminGroupName je skupina privilegovaných uživatelů v AAD. Nepoužívejte speciální znaky ani prázdné mezery v názvu skupiny. Znaky po = udělení oprávnění pro tuto roli. * znamená, že skupina má úplná oprávnění.

    [roles]
    adminGroupName = *
    
  2. Přidejte novou roli pro přístup k interpretům Zeppelin. V následujícím příkladu mají všichni uživatelé adminGroupName přístup k interpretům Zeppelin a mohou vytvářet nové interprety. Mezi hranaté závorky roles[]můžete umístit více rolí , oddělené čárkami. Uživatelé, kteří mají potřebná oprávnění, pak mají přístup k interpretům Zeppelin.

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

Příklad shiro.ini pro více skupin domén:

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

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

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

Správa relací Livy

První odstavec kódu v poznámkovém bloku Zeppelin vytvoří novou relaci Livy ve vašem clusteru. Tato relace se sdílí ve všech poznámkových blocích Zeppelin, které později vytvoříte. Pokud je relace Livy z nějakého důvodu zabita, úlohy se nespustí z poznámkového bloku Zeppelin.

V takovém případě musíte provést následující kroky, abyste mohli začít spouštět úlohy z poznámkového bloku Zeppelin.

  1. Restartujte interpret Livy z poznámkového bloku Zeppelin. Pokud to chcete udělat, otevřete nastavení interpretu tak, že v pravém horním rohu vyberete přihlášené uživatelské jméno a pak vyberete Interpret.

    Launch interpreter

  2. Posuňte se na livy2 a vyberte restartovat.

    Restart the Livy interpreter

  3. Spusťte buňku kódu z existujícího poznámkového bloku Zeppelin. Tento kód vytvoří novou relaci Livy v clusteru HDInsight.

Obecné informace

Ověření služby

Pokud chcete službu ověřit z Ambari, přejděte na https://CLUSTERNAME.azurehdinsight.net/#/main/services/ZEPPELIN/summary místo, kde clusterNAME je název vašeho clusteru.

Pokud chcete službu ověřit z příkazového řádku, přes SSH do hlavního uzlu. Přepněte uživatele na zeppelin pomocí příkazu sudo su zeppelin. Příkazy stavu:

Příkaz Popis
/usr/hdp/current/zeppelin-server/bin/zeppelin-daemon.sh status Stav služby.
/usr/hdp/current/zeppelin-server/bin/zeppelin-daemon.sh --version Verze služby.
ps -aux | grep zeppelin Identifikace PID

Umístění protokolů

Služba Cesta
zeppelin-server /usr/hdp/current/zeppelin-server/
Protokoly serveru /var/log/zeppelin
Interpret konfigurace, Shirosite.xml, log4j /usr/hdp/current/zeppelin-server/conf nebo /etc/zeppelin/conf
Adresář PID /var/run/zeppelin

Povolení protokolování ladění

  1. Přejděte do https://CLUSTERNAME.azurehdinsight.net/#/main/services/ZEPPELIN/summary umístění CLUSTERNAME název vašeho clusteru.

  2. Přejděte na log4j_properties_content configs>Advanced zeppelin-log4j-properties>.

  3. Upravit log4j.appender.dailyfile.Threshold = INFO na log4j.appender.dailyfile.Threshold = DEBUG.

  4. Přidat log4j.logger.org.apache.zeppelin.realm=DEBUG.

  5. Uložte změny a restartujte službu.

Další kroky