Öğretici: Azure Databricks kullanarak verileri ayıklama, dönüştürme ve yükleme
Bu öğreticide, bir ETL (verileri ayıklama, dönüştürme ve yükleme) işlemi gerçekleştirmek için Azure Databricks. Azure Data Lake Depolama 2. Nesil'den Azure Databricks verileri ayıklar, Azure Databricks'daki veriler üzerinde dönüştürmeler çalıştırarak dönüştürülmüş verileri Azure Synapse Analytics.
Bu öğreticide yer alan adımlarda, Azure Synapse veri aktarımı için Azure Databricks bağlayıcısı Azure Databricks. Bu bağlayıcı da bir Depolama kümesi ile depolama alanı arasında aktarılan veriler için geçici depolama alanı Azure Databricks Azure Blob Azure Synapse.
Aşağıdaki şekilde uygulama akışı gösterilmektedir:

Bu öğretici aşağıdaki görevleri kapsar:
- Bir Azure Databricks oluşturun.
- Azure Databricks'da Spark kümesi oluşturun.
- Data Lake 2. Nesil hesabında Depolama sistemi oluşturun.
- Upload Verileri Azure Data Lake Depolama 2. Nesil hesabına alın.
- Hizmet sorumlusu oluşturun.
- Azure Data Lake 2. Nesil Depolama ayıkla.
- Verileri veri Azure Databricks.
- Verileri Azure Synapse.
Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
Not
Bu öğretici, Azure Ücretsiz Deneme Aboneliği kullanılarak yürütülenemz. Ücretsiz bir hesabınız varsa profilinize gidin ve aboneliğinizi ,'de olduğu gibi öde olarak değiştirebilirsiniz. Daha fazla bilgi için bkz. Ücretsiz Azure hesabı. Ardından harcama limitini kaldırın vebölgenizin vCPUS'ları için kota artışı talep edin. Azure Databricks çalışma alanınızı 14 gün boyunca ücretsiz Premium Azure Databricks DBA'lara erişim vermek için Deneme (Premium - 14 Günlük Ücretsiz DBA'lar) fiyatlandırma katmanını seçin.
Önkoşullar
Bu öğreticiye başlamadan önce şu görevleri gerçekleştirin:
Bir Azure Synapse oluşturun, sunucu düzeyinde bir güvenlik duvarı kuralı oluşturun ve sunucuya sunucu yöneticisi olarak bağlanın. Bkz. Hızlı Başlangıç: Azure portal kullanarak Synapse SQL havuzu oluşturma ve sorgulama.
Uygulama için bir ana anahtar Azure Synapse. Bkz. Veritabanı ana anahtarı oluşturma.
Azure Blob depolama hesabı ve bu hesabın içinde bir kapsayıcı oluşturun. Ayrıca, depolama hesabına erişmek için erişim anahtarını alın. Bkz. Hızlı Başlangıç: Upload ile blobları yükleme, indirme ve Azure portal.
2. Nesil depolama Depolama Azure Data Lake oluşturun. Bkz. Hızlı Başlangıç: Azure Data Lake Depolama 2. Nesil depolama hesabı oluşturma.
Hizmet sorumlusu oluşturun. Bkz. Nasıl: Portalı kullanarak kaynaklara erişen bir Azure AD uygulaması ve hizmet sorumlusu oluşturma.
Bu makaledeki adımları gerçekleştirmeniz için gerçekleştirmeniz gereken birkaç özel işlem vardır.
Makalenin Uygulamayı role atama bölümündeki adımları gerçekleştirerek Data Lake Depolama 2. Nesil hesabı kapsamında Depolama Blob Verileri Katkıda Bulunanı rolünü hizmet sorumlusuna Depolama emin olun. Rolü üst kaynak grubuna veya aboneliğe atarsanız, bu rol atamaları depolama hesabına yaynana kadar izinlerle ilgili hatalar alırsınız.
Hizmet sorumlularını belirli bir dosya veya dizinle ilişkilendirmek için bir erişim denetim listesi (ACL) kullanmayı tercih ederseniz, Azure Data Lake'te erişim denetimi'ne Depolama 2. Nesil'e bakın.
Makalenin Oturum açma için değerleri al bölümündeki adımları gerçekleştirerek kiracı kimliğini, uygulama kimliğini ve gizli değerleri bir metin dosyasına yapıştırın.
Azure Portal oturum açın.
Size gereken bilgileri toplama
Bu öğreticinin önkoşullarını tamamlarsanız emin olun.
Başlamadan önce şu bilgi öğelerine sahipsiniz:
✔️ Veritabanı adı, veritabanı sunucusu adı, kullanıcı adı ve kullanıcı adı Azure Synapse.
✔️ blob depolama hesabının erişim anahtarı.
✔️ Data Lake Depolama 2. Nesil depolama hesabının adı.
✔️ kiracı kimliğini seçin.
✔️ Azure Active Directory (Azure AD) ile Azure Active Directory uygulama kimliği.
✔️ Azure AD'ye kayıtlı uygulamanın kimlik doğrulama anahtarı.
Azure Databricks oluşturma
Bu bölümde, Azure Databricks kullanarak bir Azure portal.
Azure portalı menüsünden Kaynak oluştur'u seçin.

Ardından Analytics'i Azure Databricks.

Hizmet Azure Databricks altında,Databricks hizmeti oluşturmak için aşağıdaki değerleri sağlar:
Özellik Açıklama Çalışma alanı adı Databricks çalışma alanınız için bir ad sağlayın. Abonelik Açılan listeden Azure aboneliğinizi seçin. Kaynak grubu Yeni bir kaynak grubu oluşturmayı veya mevcut bir kaynak grubunu kullanmayı seçin. Kaynak grubu, bir Azure çözümüne ilişkin kaynakları tutan bir kapsayıcıdır. Daha fazla bilgi için bkz. Azure Kaynak Grubuna genel bakış. Konum Batı ABD 2'yi seçin. Kullanılabilir diğer bölgeler için bkz. Bölgeye göre kullanılabilir Azure hizmetleri. Fiyatlandırma Katmanı Standart'ı seçin. Hesabın oluşturulması birkaç dakika sürer. İşlem durumunu izlemek için üstteki ilerleme çubuğunu görüntüleme.
Panoya sabitle’yi ve sonra Oluştur’u seçin.
Azure Databricks’te Spark kümesi oluşturma
Veri Azure portal oluşturduğunuz Databricks hizmetine gidin ve Çalışma Alanını Başlat'ı seçin.
Azure Databricks portalına yönlendiriliyoruz. Portaldan Küme’yi seçin.

Yeni küme sayfasında, bir küme oluşturmak için değerleri girin.

Aşağıdaki alanlara değerleri girin ve diğer alanlar için varsayılan değerleri kabul edin:
Küme için bir ad girin.
__ dakika sürenin ardından sonlandır onay kutusunu işaretladığınızdan emin olun. Küme kullanılmazsa, kümeyi sonlandırmak için bir süre (dakika) sağlar.
Küme oluştur'a seçin. Küme çalıştır edildikten sonra, kümeye not defterleri iliştirin ve Spark işlerini çalıştırabilirsiniz.
Azure Data Lake 2. Nesil hesabında Depolama sistemi oluşturma
Bu bölümde, çalışma alanında bir not Azure Databricks ve ardından depolama hesabını yapılandırmak için kod parçacıkları çalıştıracaksınız
Uygulamanın Azure portal,oluşturduğunuz Azure Databricks hizmetine gidin ve Çalışma Alanını Başlat'ı seçin.
Sol tarafta Çalışma Alanı'ı seçin. Çalışma Alanı açılır listesinden OluşturNot Defteri’ni seçin.

Not Defteri Oluştur iletişim kutusunda, not defterinizin adını girin. Dil olarak Scala’yı seçin ve daha önce oluşturduğunuz Spark kümesini seçin.
ayrıntılarını sağlamaOluştur’u seçin.
Aşağıdaki kod bloğu, Spark oturumunda erişilen herhangi bir ADLS 2. Nesil hesabı için varsayılan hizmet sorumlusu kimlik bilgilerini ayarlar. İkinci kod bloğu, belirli bir ADLS 2. Nesil hesabının kimlik bilgilerini belirtmek için ayara hesap adını ekler. Kod bloklarını kopyalayıp not defterinizin ilk hücresine Azure Databricks yapıştırın.
Oturum yapılandırması
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")Hesap yapılandırması
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")Bu kod bloğunda, bu kod bloğundaki , , ve yer tutucu değerlerini bu öğreticinin önkoşullarını tamamladıktan sonra
<app-id><secret><tenant-id><storage-account-name>toplanmış değerlerle değiştirin. Yer tutucu<file-system-name>değerini dosya sistemine vermek istediğiniz adla değiştirin.<app-id>ve,<secret>bir hizmet sorumlusu oluşturmanın bir parçası olarak Active Directory'ye kayıtlı olan uygulamadandır.,
<tenant-id>aboneliğinize göredir.<storage-account-name>, Azure Data Lake Depolama 2. Nesil depolama hesabınızdır.
Bu blokta kodu çalıştırmak için SHIFT + ENTER tuşlarına basın.
Örnek verileri Azure Data Lake Depolama 2. Nesil hesabına alın
Bu bölüme başlamadan önce aşağıdaki önkoşulları tamamlamanız gerekir:
Aşağıdaki kodu bir not defteri hücresine girin:
%sh wget -P /tmp https://raw.githubusercontent.com/Azure/usql/master/Examples/Samples/Data/json/radiowebsite/small_radio_json.json
Kodu çalıştırmak için hücrede SHIFT + ENTER tuşlarına basın.
Şimdi bunun altındaki yeni bir hücreye aşağıdaki kodu girin ve köşeli ayraç içinde görünen değerleri daha önce kullanılan değerlerle değiştirin:
dbutils.fs.cp("file:///tmp/small_radio_json.json", "abfss://" + fileSystemName + "@" + storageAccountName + ".dfs.core.windows.net/")
Kodu çalıştırmak için hücrede SHIFT + ENTER tuşlarına basın.
Azure Data Lake Depolama 2. Nesil hesabından veri ayıklama
Artık örnek json dosyasını dosyanın içinde veri çerçevesi olarak Azure Databricks. Aşağıdaki kodu yeni bir hücreye yapıştırın. Köşeli ayraç içinde gösterilen yer tutucuları değerleriyle değiştirin.
val df = spark.read.json("abfss://" + fileSystemName + "@" + storageAccountName + ".dfs.core.windows.net/small_radio_json.json")Bu blokta kodu çalıştırmak için SHIFT + ENTER tuşlarına basın.
Veri çerçevesinin içeriğini görmek için aşağıdaki kodu çalıştırın:
df.show()Aşağıdaki kod parçacığına benzer bir çıkış görürsünüz:
+---------------------+---------+---------+------+-------------+----------+---------+-------+--------------------+------+--------+-------------+---------+--------------------+------+-------------+------+ | 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| ... ...Artık verileri Azure Data Lake Storage Gen2'den Azure Databricks'e ayıkladınız.
Azure Databricks'te verileri dönüştürme
small_radio_json.json dosyası, radyo istasyonunun hedef kitlesini yakalar ve çeşitli sütunlara sahip olur. Bu bölümde, verileri yalnızca veri kümesinden belirli sütunları almak için dönüştürebilirsiniz.
İlk olarak, oluşturduğunuz veri çerçevesinin yalnızca firstName , lastName, gender,locationve level sütunlarını alın.
val specificColumnsDf = df.select("firstname", "lastname", "gender", "location", "level") specificColumnsDf.show()Çıktıyı aşağıdaki kod parçacığında gösterildiği gibi alırsınız:
+---------+----------+------+--------------------+-----+ |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| +---------+----------+------+--------------------+-----+Bu verilerde başka dönüştürmeler de yaparak level sütununun adını subscription_type olarak değiştirebilirsiniz.
val renamedColumnsDF = specificColumnsDf.withColumnRenamed("level", "subscription_type") renamedColumnsDF.show()Çıktıyı aşağıdaki kod parçacığında gösterildiği gibi alırsınız.
+---------+----------+------+--------------------+-----------------+ |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| +---------+----------+------+--------------------+-----------------+
Verileri Azure Synapse
Bu bölümde, dönüştürülen verileri Azure Synapse. Synapse Spark Azure Synapse tablo Azure Databricks veri çerçevesini doğrudan karşıya yüklemek için Azure Synapse bağlayıcısı kullanırsınız.
Daha önce de belirtildiği gibi, Azure Synapse bağlayıcısı, azure blob depolama alanını geçici depolama alanı olarak kullanarak Azure Databricks ve Azure Synapse. Bu nedenle, depolama hesabına bağlanmak için kullanılacak yapılandırmayı sağlayarak başlarsınız. Bu makalenin önkoşulları kapsamında hesabı zaten oluşturulmuş olması gerekir.
Azure Databricks'ten Azure Depolama hesabına erişmek için yapılandırmayı sağlayın.
val blobStorage = "<blob-storage-account-name>.blob.core.windows.net" val blobContainer = "<blob-container-name>" val blobAccessKey = "<access-key>"Veri depolama alanı ile depolama alanı arasında veri taşıma sırasında Azure Databricks Azure Synapse.
val tempDir = "wasbs://" + blobContainer + "@" + blobStorage +"/tempDirs"Aşağıdaki kod parçacığını çalıştırarak Azure Blob depolama erişim anahtarlarını yapılandırmada depolayın. Bu eylem, not defterindeki erişim anahtarını düz metin olarak tutmanıza gerek olmadığını sağlar.
val acntInfo = "fs.azure.account.key."+ blobStorage sc.hadoopConfiguration.set(acntInfo, blobAccessKey)Azure Synapse örneğine bağlanmak için Azure Synapse sağlar. Önkoşul olarak bir Azure Synapse Analytics hizmeti oluşturulmuş olması gerekir. dwServer için tam sunucu adını kullanın. Örneğin,
<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=" + dwPassDönüştürülmüş veri çerçevesini renamedColumnsDFolarak yüklemek için aşağıdaki kod parçacığını Azure Synapse. Bu kod parçacığı SQL veritabanında SampleTable adlı bir tablo oluşturur.
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()Not
Bu örnek, bir Erişim Anahtarı Azure Synapse blob depolamadan verilere
forward_spark_azure_storage_credentialserişmelerine neden olan bayrağını kullanır. Bu, desteklenen tek kimlik doğrulama yöntemidir.Azure Blob Depolama sanal ağları seçmekle sınırlı ise, Azure Synapse anahtarları yerine Yönetilen Hizmet Kimliği gerekir. Bu, "Bu isteğin bu işlemi gerçekleştirme yetkisi yok" hatasına neden olur.
Bağlan veritabanına SQL ve SampleTable adlı bir veritabanı gördüğünüzden emin olun.

Tablonun içindekileri doğrulamak için bir seçme sorgusu çalıştırın. Tabloda renamedColumnsDF veri çerçevesiyle aynı veriler olmalıdır.

Kaynakları temizleme
Öğreticiyi bitirdikten sonra kümeyi sonlandırabilirsiniz. Çalışma Azure Databricks sol tarafta Kümeler'i seçin. Kümenin sonlandırılma şekli için Eylemler'inaltında üç noktanın (...) üzerine gelin ve Sonlandır simgesini seçin.

Kümeyi el ile sonlandıramıyorsanız, kümeyi oluşturulduğunda __ dakikalar içinde tamamla onay kutusunu işaretledikten sonra sonlandır onay kutusunu seçtiyebilirsiniz. Böyle bir durumda, belirtilen süre boyunca etkin olmayan küme otomatik olarak durur.
Sonraki adımlar
Bu öğreticide, şunların nasıl yapıldığını öğrendiniz:
- Azure Databricks oluşturma
- Azure Databricks’te Spark kümesi oluşturma
- Azure Databricks’te not defteri oluşturma
- Data Lake Depolama 2. Nesil hesabından veri ayıklama
- Azure Databricks'te verileri dönüştürme
- Verileri Azure Synapse
Azure Event Hubs kullanarak Azure Databricks'e gerçek zamanlı veri akışı yapmayı öğrenmek için sonraki öğreticiye ilerleyin.