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:
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:
Vytvořte Azure Synapse, vytvořte pravidlo brány firewall na úrovni serveru a připojte se k serveru jako správce serveru. Viz Rychlý start: Vytvoření a dotazování fondu Synapse SQL pomocí webu Azure Portal.
Vytvořte hlavní klíč pro Azure Synapse. Viz Vytvoření hlavního klíče databáze.
Vytvořili jste účet Azure Blob Storage a v něm kontejner. A načetli jste přístupový klíč pro přístup k účtu úložiště. Viz Rychlý start: Nahrávání, stahování a výpis objektů blob pomocí webu Azure Portal.
Vytvořte účet úložiště Azure Data Lake Storage Gen2. Viz Rychlý start: Vytvoření účtu úložiště Azure Data Lake Storage Gen2.
Vytvořte instanční objekt. Viz Postupy: Použití portálu k vytvoření aplikace Microsoft Entra ID (dříve Azure Active Directory) a instančního objektu, který má přístup k prostředkům.
Při provádění kroků v tomto článku je potřeba provést několik konkrétních věcí.
Při provádění kroků v části Přiřazení aplikace k části role článku nezapomeňte k instančnímu objektu služby v oboru účtu Data Lake Storage Gen2 přiřadit roli Přispěvatel dat objektů blob služby Storage. Pokud přiřadíte roli nadřazené skupině prostředků nebo předplatnému, obdržíte chyby související s oprávněními, dokud se tato přiřazení rolí nešíří do účtu úložiště.
Pokud chcete použít seznam řízení přístupu (ACL) k přidružení instančního objektu ke konkrétnímu souboru nebo adresáři, odkazujte na řízení přístupu v Azure Data Lake Storage Gen2.
Při provádění kroků v části Získání hodnot pro přihlášení v článku vložte ID tenanta, ID aplikace a tajné hodnoty do textového souboru.
Přihlaste se k portálu Azure.
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.
Z nabídky portálu Azure vyberte možnost Vytvořit prostředek.
Pak vyberte Analytics>Azure Databricks.
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í. Vytvoření účtu trvá několik minut. Pokud chcete monitorovat stav operace, zobrazte indikátor průběhu v horní části.
Vyberte Připnout na řídicí panel a potom vyberte Vytvořit.
Vytvoření clusteru Spark v Azure Databricks
Na webu Azure Portal přejděte do služby Databricks, kterou jste vytvořili, a vyberte Spustit pracovní prostor.
Budete přesměrováni na portál Azure Databricks. Na portálu vyberte Cluster.
Na stránce New cluster (Nový cluster) zadejte hodnoty pro vytvoření clusteru.
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ě.
Na webu Azure Portal přejděte do služby Azure Databricks, kterou jste vytvořili, a vyberte Spustit pracovní prostor.
Na levé straně vyberte Pracovní prostor. V rozevíracím seznamu Pracovní prostor vyberte Vytvořit>Poznámkový blok.
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.
Vyberte Vytvořit.
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")
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.
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
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")
Stisknutím kláves SHIFT + ENTER spusťte kód v tomto bloku.
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 soubor zachycuje cílovou skupinu pro rádiovou stanici a má celou řadu sloupců. V této části transformujete data tak, aby se z datové sady načítaly jenom konkrétní sloupce.
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| +---------+----------+------+--------------------+-----+
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ý.
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>"
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"
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)
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
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.
Připojte se k databázi SQL a ověřte, že se zobrazí databáze s názvem SampleTable.
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 .
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 .
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