Kurz: Extrakce, transformace a načítání dat pomocí Azure Databricks

V tomto kurzu provedete operaci ETL (extrakce, transformace a načítání dat) pomocí Azure Databricks. Extrahujete data z Azure Data Lake Storage Gen2 do Azure Databricks, spustíte transformace dat v Azure Databricks a načtete transformovaná data do Azure Synapse Analytics.

Kroky v tomto kurzu používají konektor Azure Synapse pro Azure Databricks k přenosu dat do Azure Databricks. Tento konektor zase používá Azure Blob Storage jako dočasné úložiště pro přenášená data mezi clusterem Azure Databricks a Azure Synapse.

Následující obrázek ukazuje běh aplikace:

Azure Databricks with Data Lake Store and Azure Synapse

Tento kurz se zabývá následujícími úkony:

  • Vytvořte službu Azure Databricks.
  • Vytvořte cluster Spark v Azure Databricks.
  • Vytvořte systém souborů v účtu Data Lake Storage Gen2.
  • Nahrajte ukázková data do účtu Azure Data Lake Storage Gen2.
  • Vytvořte instanční objekt.
  • Extrahujte data z účtu Azure Data Lake Storage Gen2.
  • Transformace dat v Azure Databricks
  • Načtěte data do Azure Synapse.

Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.

Poznámka:

Tento kurz nelze provést pomocí bezplatného zkušebního předplatného Azure. Pokud máte bezplatný účet, přejděte do svého profilu a změňte předplatné na průběžné platby. Další informace najdete na stránce bezplatného účtu Azure. Pak odeberte limit útraty a požádejte o navýšení kvóty pro vCPU ve vaší oblasti. Při vytváření pracovního prostoru Azure Databricks můžete vybrat cenovou úroveň Zkušební verze (Premium – 14denní bezplatná dbU) a udělit tak pracovnímu prostoru přístup k bezplatným dbU Azure Databricks premium na 14 dní.

Požadavky

Než začnete s tímto kurzem, proveďte tyto úkoly:

Shromáždění potřebných informací

Ujistěte se, že jste dokončili požadavky tohoto kurzu.

Než začnete, měli byste mít tyto informace:

✔️ Název databáze, název databázového serveru, uživatelské jméno a heslo služby Azure Synapse.

✔️ Přístupový klíč vašeho účtu úložiště objektů blob.

✔️ Název vašeho účtu úložiště Data Lake Storage Gen2.

✔️ ID tenanta vašeho předplatného.

✔️ ID aplikace, kterou jste zaregistrovali u Microsoft Entra ID (dříve Azure Active Directory).

✔️ Ověřovací klíč pro aplikaci, kterou jste zaregistrovali s ID Microsoft Entra (dříve Azure Active Directory).

Vytvoření služby Azure Databricks

V této části vytvoříte službu Azure Databricks pomocí webu Azure Portal.

  1. Z nabídky portálu Azure vyberte možnost Vytvořit prostředek.

    Create a resource on Azure portal

    Pak vyberte Analytics>Azure Databricks.

    Create Azure Databricks on Azure portal

  2. V části Azure Databricks Service zadejte následující hodnoty pro vytvoření služby Databricks:

    Vlastnost Popis
    Název pracovního prostoru Zadejte název pracovního prostoru Databricks.
    Předplatné Z rozevíracího seznamu vyberte své předplatné Azure.
    Skupina prostředků Určete, jestli chcete vytvořit novou skupinu prostředků, nebo použít existující. Skupina prostředků je kontejner, který obsahuje související prostředky pro řešení Azure. Další informace naleznete v tématu Přehled skupin prostředků v Azure.
    Místo Vyberte USA – západ 2. Další dostupné oblasti najdete v tématu Dostupné služby Azure podle oblastí.
    Cenová úroveň Vyberte položku Standardní.
  3. Vytvoření účtu trvá několik minut. Pokud chcete monitorovat stav operace, zobrazte indikátor průběhu v horní části.

  4. Vyberte Připnout na řídicí panel a potom vyberte Vytvořit.

Vytvoření clusteru Spark v Azure Databricks

  1. Na webu Azure Portal přejděte do služby Databricks, kterou jste vytvořili, a vyberte Spustit pracovní prostor.

  2. Budete přesměrováni na portál Azure Databricks. Na portálu vyberte Cluster.

    Databricks on Azure

  3. Na stránce New cluster (Nový cluster) zadejte hodnoty pro vytvoření clusteru.

    Create Databricks Spark cluster on Azure

  4. Zadejte hodnoty následujících polí a potvrďte výchozí hodnoty dalších polí:

    • Zadejte název clusteru.

    • Nezapomeňte zaškrtnout políčko Ukončit po __ minutách nečinnosti . Pokud se cluster nepoužívá, zadejte dobu trvání (v minutách) pro ukončení clusteru.

    • Vyberte Vytvořit cluster. Po spuštění clusteru můžete k clusteru připojit poznámkové bloky a spustit úlohy Sparku.

Vytvoření systému souborů v účtu Azure Data Lake Storage Gen2

V této části vytvoříte poznámkový blok v pracovním prostoru Azure Databricks a pak spustíte fragmenty kódu a nakonfigurujete účet úložiště.

  1. Na webu Azure Portal přejděte do služby Azure Databricks, kterou jste vytvořili, a vyberte Spustit pracovní prostor.

  2. Na levé straně vyberte Pracovní prostor. V rozevíracím seznamu Pracovní prostor vyberte Vytvořit>Poznámkový blok.

    Create a notebook in Databricks

  3. V dialogovém okně Vytvořit poznámkový blok zadejte název poznámkového bloku. Vyberte jazyk Scala a vyberte cluster Spark, který jste vytvořili v předchozí části.

    Provide details for a notebook in Databricks

  4. Vyberte Vytvořit.

  5. Následující blok kódu nastaví výchozí přihlašovací údaje instančního objektu pro libovolný účet ADLS Gen2, ke který se přistupuje v relaci Sparku. Druhý blok kódu připojí název účtu k nastavení pro zadání přihlašovacích údajů pro konkrétní účet ADLS Gen2. Zkopírujte a vložte jeden blok kódu do první buňky poznámkového bloku Azure Databricks.

    Konfigurace relace

    val appID = "<appID>"
    val secret = "<secret>"
    val tenantID = "<tenant-id>"
    
    spark.conf.set("fs.azure.account.auth.type", "OAuth")
    spark.conf.set("fs.azure.account.oauth.provider.type", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
    spark.conf.set("fs.azure.account.oauth2.client.id", "<appID>")
    spark.conf.set("fs.azure.account.oauth2.client.secret", "<secret>")
    spark.conf.set("fs.azure.account.oauth2.client.endpoint", "https://login.microsoftonline.com/<tenant-id>/oauth2/token")
    spark.conf.set("fs.azure.createRemoteFileSystemDuringInitialization", "true")
    

    Konfigurace účtu

    val storageAccountName = "<storage-account-name>"
    val appID = "<app-id>"
    val secret = "<secret>"
    val fileSystemName = "<file-system-name>"
    val tenantID = "<tenant-id>"
    
    spark.conf.set("fs.azure.account.auth.type." + storageAccountName + ".dfs.core.windows.net", "OAuth")
    spark.conf.set("fs.azure.account.oauth.provider.type." + storageAccountName + ".dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
    spark.conf.set("fs.azure.account.oauth2.client.id." + storageAccountName + ".dfs.core.windows.net", "" + appID + "")
    spark.conf.set("fs.azure.account.oauth2.client.secret." + storageAccountName + ".dfs.core.windows.net", "" + secret + "")
    spark.conf.set("fs.azure.account.oauth2.client.endpoint." + storageAccountName + ".dfs.core.windows.net", "https://login.microsoftonline.com/" + tenantID + "/oauth2/token")
    spark.conf.set("fs.azure.createRemoteFileSystemDuringInitialization", "true")
    dbutils.fs.ls("abfss://" + fileSystemName  + "@" + storageAccountName + ".dfs.core.windows.net/")
    spark.conf.set("fs.azure.createRemoteFileSystemDuringInitialization", "false")
    
  6. V tomto bloku kódu nahraďte <app-id>hodnoty , a <tenant-id><secret><storage-account-name> zástupné hodnoty v tomto bloku kódu hodnotami, které jste shromáždili při dokončování požadavků tohoto kurzu. <file-system-name> Nahraďte zástupnou hodnotu jakýmkoli názvem, který chcete systému souborů udělit.

    • Jedná se <app-id>o aplikaci, <secret> kterou jste zaregistrovali ve službě Active Directory jako součást vytváření instančního objektu.

    • Je <tenant-id> z vašeho předplatného.

    • Jedná se <storage-account-name> o název vašeho účtu úložiště Azure Data Lake Storage Gen2.

  7. Stisknutím kláves SHIFT + ENTER spusťte kód v tomto bloku.

Ingestování ukázkových dat do účtu Azure Data Lake Storage Gen2

Než se pustíte do této části, je potřeba nejprve splnit následující požadavky:

Do buňky poznámkového bloku zadejte následující kód:

%sh wget -P /tmp https://raw.githubusercontent.com/Azure/usql/master/Examples/Samples/Data/json/radiowebsite/small_radio_json.json

V buňce stiskněte SHIFT +ENTER a spusťte kód.

Teď do nové buňky pod touto buňkou zadejte následující kód a nahraďte hodnoty, které se zobrazí v závorkách, stejnými hodnotami, které jste použili dříve:

dbutils.fs.cp("file:///tmp/small_radio_json.json", "abfss://" + fileSystemName + "@" + storageAccountName + ".dfs.core.windows.net/")

V buňce stiskněte SHIFT +ENTER a spusťte kód.

Extrahování dat z účtu Azure Data Lake Storage Gen2

  1. Teď můžete ukázkový soubor JSON načíst jako datový rámec v Azure Databricks. Do nové buňky vložte následující kód. Zástupné symboly zobrazené v závorkách nahraďte hodnotami.

    val df = spark.read.json("abfss://" + fileSystemName + "@" + storageAccountName + ".dfs.core.windows.net/small_radio_json.json")
    
  2. Stisknutím kláves SHIFT + ENTER spusťte kód v tomto bloku.

  3. Spuštěním následujícího kódu zobrazte obsah datového rámce:

    df.show()
    

    Zobrazí se výstup, který bude podobný následujícímu fragmentu kódu:

    +---------------------+---------+---------+------+-------------+----------+---------+-------+--------------------+------+--------+-------------+---------+--------------------+------+-------------+------+
    |               artist|     auth|firstName|gender|itemInSession|  lastName|   length|  level|            location|method|    page| registration|sessionId|                song|status|           ts|userId|
    +---------------------+---------+---------+------+-------------+----------+---------+-------+--------------------+------+--------+-------------+---------+--------------------+------+-------------+------+
    | El Arrebato         |Logged In| Annalyse|     F|            2|Montgomery|234.57914| free  |  Killeen-Temple, TX|   PUT|NextSong|1384448062332|     1879|Quiero Quererte Q...|   200|1409318650332|   309|
    | Creedence Clearwa...|Logged In|   Dylann|     M|            9|    Thomas|340.87138| paid  |       Anchorage, AK|   PUT|NextSong|1400723739332|       10|        Born To Move|   200|1409318653332|    11|
    | Gorillaz            |Logged In|     Liam|     M|           11|     Watts|246.17751| paid  |New York-Newark-J...|   PUT|NextSong|1406279422332|     2047|                DARE|   200|1409318685332|   201|
    ...
    ...
    

    Tím jste extrahovali data z Azure Data Lake Storage Gen2 do Azure Databricks.

Transformace dat v Azure Databricks

Nezpracovaná ukázková data small_radio_json.json zachytává cílovou skupinu rádiové stanice a má celou řadu sloupců. V této části transformujete data tak, aby se z datové sady načítaly jenom konkrétní sloupce.

  1. Nejprve načtěte pouze sloupce firstName, lastName, gender, location a level z datového rámce, který jste vytvořili.

    val specificColumnsDf = df.select("firstname", "lastname", "gender", "location", "level")
    specificColumnsDf.show()
    

    Zobrazí se výstup, jak je znázorněno v následujícím fragmentu kódu:

    +---------+----------+------+--------------------+-----+
    |firstname|  lastname|gender|            location|level|
    +---------+----------+------+--------------------+-----+
    | Annalyse|Montgomery|     F|  Killeen-Temple, TX| free|
    |   Dylann|    Thomas|     M|       Anchorage, AK| paid|
    |     Liam|     Watts|     M|New York-Newark-J...| paid|
    |     Tess|  Townsend|     F|Nashville-Davidso...| free|
    |  Margaux|     Smith|     F|Atlanta-Sandy Spr...| free|
    |     Alan|     Morse|     M|Chicago-Napervill...| paid|
    |Gabriella|   Shelton|     F|San Jose-Sunnyval...| free|
    |   Elijah|  Williams|     M|Detroit-Warren-De...| paid|
    |  Margaux|     Smith|     F|Atlanta-Sandy Spr...| free|
    |     Tess|  Townsend|     F|Nashville-Davidso...| free|
    |     Alan|     Morse|     M|Chicago-Napervill...| paid|
    |     Liam|     Watts|     M|New York-Newark-J...| paid|
    |     Liam|     Watts|     M|New York-Newark-J...| paid|
    |   Dylann|    Thomas|     M|       Anchorage, AK| paid|
    |     Alan|     Morse|     M|Chicago-Napervill...| paid|
    |   Elijah|  Williams|     M|Detroit-Warren-De...| paid|
    |  Margaux|     Smith|     F|Atlanta-Sandy Spr...| free|
    |     Alan|     Morse|     M|Chicago-Napervill...| paid|
    |   Dylann|    Thomas|     M|       Anchorage, AK| paid|
    |  Margaux|     Smith|     F|Atlanta-Sandy Spr...| free|
    +---------+----------+------+--------------------+-----+
    
  2. Teď můžete v datech sloupec level přejmenovat na subscription_type.

    val renamedColumnsDF = specificColumnsDf.withColumnRenamed("level", "subscription_type")
    renamedColumnsDF.show()
    

    Zobrazí se výstup, jak je znázorněno v následujícím fragmentu kódu.

    +---------+----------+------+--------------------+-----------------+
    |firstname|  lastname|gender|            location|subscription_type|
    +---------+----------+------+--------------------+-----------------+
    | Annalyse|Montgomery|     F|  Killeen-Temple, TX|             free|
    |   Dylann|    Thomas|     M|       Anchorage, AK|             paid|
    |     Liam|     Watts|     M|New York-Newark-J...|             paid|
    |     Tess|  Townsend|     F|Nashville-Davidso...|             free|
    |  Margaux|     Smith|     F|Atlanta-Sandy Spr...|             free|
    |     Alan|     Morse|     M|Chicago-Napervill...|             paid|
    |Gabriella|   Shelton|     F|San Jose-Sunnyval...|             free|
    |   Elijah|  Williams|     M|Detroit-Warren-De...|             paid|
    |  Margaux|     Smith|     F|Atlanta-Sandy Spr...|             free|
    |     Tess|  Townsend|     F|Nashville-Davidso...|             free|
    |     Alan|     Morse|     M|Chicago-Napervill...|             paid|
    |     Liam|     Watts|     M|New York-Newark-J...|             paid|
    |     Liam|     Watts|     M|New York-Newark-J...|             paid|
    |   Dylann|    Thomas|     M|       Anchorage, AK|             paid|
    |     Alan|     Morse|     M|Chicago-Napervill...|             paid|
    |   Elijah|  Williams|     M|Detroit-Warren-De...|             paid|
    |  Margaux|     Smith|     F|Atlanta-Sandy Spr...|             free|
    |     Alan|     Morse|     M|Chicago-Napervill...|             paid|
    |   Dylann|    Thomas|     M|       Anchorage, AK|             paid|
    |  Margaux|     Smith|     F|Atlanta-Sandy Spr...|             free|
    +---------+----------+------+--------------------+-----------------+
    

Načtení dat do Azure Synapse

V této části nahrajete transformovaná data do Azure Synapse. Pomocí konektoru Azure Synapse pro Azure Databricks můžete přímo nahrát datový rámec jako tabulku ve fondu Synapse Spark.

Jak už bylo zmíněno dříve, konektor Azure Synapse používá úložiště objektů blob v Azure jako dočasné úložiště k nahrání dat mezi Azure Databricks a Azure Synapse. Proto musíte napřed zadat konfiguraci pro připojení k účtu tohoto úložiště. V rámci požadavků tohoto článku už musíte mít účet vytvořený.

  1. Zadejte konfiguraci pro přístup k účtu Azure Storage z Azure Databricks.

    val blobStorage = "<blob-storage-account-name>.blob.core.windows.net"
    val blobContainer = "<blob-container-name>"
    val blobAccessKey =  "<access-key>"
    
  2. Zadejte dočasnou složku, která se má použít při přesouvání dat mezi Azure Databricks a Azure Synapse.

    val tempDir = "wasbs://" + blobContainer + "@" + blobStorage +"/tempDirs"
    
  3. Spusťte následující fragment kódu, který v konfiguraci uloží přístupové klíče služby Azure Blob Storage. Tato akce zajistí, že v poznámkovém bloku nebudete muset zachovat přístupový klíč ve formátu prostého textu.

    val acntInfo = "fs.azure.account.key."+ blobStorage
    sc.hadoopConfiguration.set(acntInfo, blobAccessKey)
    
  4. Zadejte hodnoty pro připojení k instanci Azure Synapse. Jako předpoklad musíte vytvořit službu Azure Synapse Analytics. Použijte plně kvalifikovaný název serveru pro dwServer. Například <servername>.database.windows.net.

    //Azure Synapse related settings
    val dwDatabase = "<database-name>"
    val dwServer = "<database-server-name>"
    val dwUser = "<user-name>"
    val dwPass = "<password>"
    val dwJdbcPort =  "1433"
    val dwJdbcExtraOptions = "encrypt=true;trustServerCertificate=true;hostNameInCertificate=*.database.windows.net;loginTimeout=30;"
    val sqlDwUrl = "jdbc:sqlserver://" + dwServer + ":" + dwJdbcPort + ";database=" + dwDatabase + ";user=" + dwUser+";password=" + dwPass + ";$dwJdbcExtraOptions"
    val sqlDwUrlSmall = "jdbc:sqlserver://" + dwServer + ":" + dwJdbcPort + ";database=" + dwDatabase + ";user=" + dwUser+";password=" + dwPass
    
  5. Spuštěním následujícího fragmentu kódu načtěte transformovaný datový rámec, přejmenováníColumnsDF jako tabulku v Azure Synapse. Tento fragment kódu vytvoří v SQL databázi tabulku s názvem SampleTable.

    spark.conf.set(
        "spark.sql.parquet.writeLegacyFormat",
        "true")
    
    renamedColumnsDF.write.format("com.databricks.spark.sqldw").option("url", sqlDwUrlSmall).option("dbtable", "SampleTable")       .option( "forward_spark_azure_storage_credentials","True").option("tempdir", tempDir).mode("overwrite").save()
    

    Poznámka:

    Tato ukázka používá forward_spark_azure_storage_credentials příznak, který způsobí, že Azure Synapse přistupuje k datům z úložiště objektů blob pomocí přístupového klíče. Toto je jediná podporovaná metoda ověřování.

    Pokud je vaše služba Azure Blob Storage omezená na výběr virtuálních sítí, Azure Synapse místo přístupových klíčů vyžaduje identitu spravované služby. Tato chyba způsobí, že tato žádost nemá oprávnění k provedení této operace.

  6. Připojení do databáze SQL a ověřte, že se zobrazí databáze s názvem SampleTable.

    Verify the sample table

  7. Spusťte výběrový dotaz, kterým ověříte obsah tabulky. Tabulka by měla mít stejná data jako přejmenovaný datový rámecColumnsDF .

    Verify the sample table content

Vyčištění prostředků

Po dokončení kurzu můžete cluster ukončit. V pracovním prostoru Azure Databricks vyberte clustery na levé straně. Aby se cluster ukončil, v části Akce přejděte na tři tečky (...) a vyberte ikonu Ukončit .

Stop a Databricks cluster

Pokud cluster ručně neukončíte, automaticky se zastaví, pokud jste při vytváření clusteru zaškrtli políčko Ukončit po __ minutách nečinnosti . V takovém případě se cluster po zadanou dobu automaticky zastaví, pokud je neaktivní.

Další kroky

V tomto kurzu jste se naučili, jak:

  • Vytvoření služby Azure Databricks
  • Vytvoření clusteru Spark v Azure Databricks
  • Vytvoření poznámkového bloku v Azure Databricks
  • Extrahování dat z účtu Data Lake Storage Gen2
  • Transformace dat v Azure Databricks
  • Načtení dat do Azure Synapse