Öğretici: Azure Databricks kullanarak verileri ayıklama, dönüştürme ve yükleme

Bu öğreticide, Azure Databricks kullanarak bir ETL (verileri ayıklama, dönüştürme ve yükleme) işlemi gerçekleştirebilirsiniz. verileri Azure Data Lake Storage 2. Nesil Azure Databricks'e ayıklar, Azure Databricks'teki verilerde dönüştürmeleri çalıştırır ve dönüştürülen verileri Azure Synapse Analytics'e yüklersiniz.

Bu öğreticideki adımlar, Azure Databricks'e veri aktarmak için Azure Databricks için Azure Synapse bağlayıcısını kullanır. Bu bağlayıcı da azure Databricks kümesi ile Azure Synapse arasında aktarılan veriler için geçici depolama alanı olarak Azure Blob Depolama kullanır.

Aşağıdaki şekilde uygulama akışı gösterilmektedir:

Azure Databricks with Data Lake Store and Azure Synapse

Bu öğretici aşağıdaki görevleri kapsar:

  • Azure Databricks hizmeti oluşturma.
  • Azure Databricks'te spark kümesi oluşturma.
  • Data Lake Storage 2. Nesil hesabında bir dosya sistemi oluşturun.
  • Örnek verileri Azure Data Lake Storage 2. Nesil hesabına yükleyin.
  • Hizmet sorumlusu oluşturma.
  • Azure Data Lake Storage 2. Nesil hesabından verileri ayıklayın.
  • Azure Databricks'te verileri dönüştürme.
  • Azure Synapse'e veri yükleme.

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Not

Bu öğretici, Azure Ücretsiz Deneme Aboneliği kullanılarak gerçekleştirilemez. Ücretsiz bir hesabınız varsa profilinize gidin ve aboneliğinizi kullandıkça öde olarak değiştirin. Daha fazla bilgi için bkz. Ücretsiz Azure hesabı. Ardından harcama limitini kaldırın ve bölgenizdeki sanal CPU’lar için kota artışı isteyin. Azure Databricks çalışma alanınızı oluştururken, çalışma alanına 14 gün boyunca ücretsiz Premium Azure Databricks DBU erişimi vermek için Deneme (Premium - 14 Günlük Ücretsiz DBU) fiyatlandırma katmanını seçebilirsiniz.

Önkoşullar

Bu öğreticiye başlamadan önce bu görevleri tamamlayın:

  • 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ını kullanarak Synapse SQL havuzu oluşturma ve sorgulama.

  • Azure Synapse için bir ana anahtar oluşturun. 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ıç: Azure portalı ile blobları karşıya yükleme, indirme ve listeleme.

  • bir Azure Data Lake Storage 2. Nesil depolama hesabı oluşturun. Bkz. Hızlı Başlangıç: Azure Data Lake Storage 2. Nesil depolama hesabı oluşturma.

  • Hizmet sorumlusu oluşturma. Bkz . Nasıl yapılır: Kaynaklara erişebilen bir Microsoft Entra Id (eski adıyla Azure Active Directory) uygulaması ve hizmet sorumlusu oluşturmak için portalı kullanma.

    Bu makaledeki adımları gerçekleştirirken yapmanız gereken birkaç özel işlem vardır.

    • Makalenin Bir role uygulamayı atama bölümündeki adımları gerçekleştirirken, Data Lake Storage 2. Nesil hesabı kapsamında hizmet sorumlusuna Depolama Blob Veri Katkıda Bulunanı rolünü atadığınızdan emin olun. Rolü üst kaynak grubuna veya aboneliğe atarsanız, bu rol atamaları depolama hesabına yayılana kadar izinlerle ilgili hatalar alırsınız.

      Hizmet sorumlusunu belirli bir dosya veya dizinle ilişkilendirmek için erişim denetim listesi (ACL) kullanmayı tercih ederseniz, Azure Data Lake Storage 2. Nesil'de Erişim denetimine başvurun.

    • Makalenin Oturum açmak için değerleri alma bölümündeki adımları gerçekleştirirken, kiracı kimliğini, uygulama kimliğini ve gizli dizi değerlerini bir metin dosyasına yapıştırın.

  • Azure Portal’ında oturum açın.

İhtiyacınız olan bilgileri toplayın

Bu öğreticinin önkoşullarını tamamladığınızdan emin olun.

Başlamadan önce şu bilgi öğelerine sahip olmanız gerekir:

✔️ Azure Synapse'inizin veritabanı adı, veritabanı sunucusu adı, kullanıcı adı ve parolası.

✔️ Blob depolama hesabınızın erişim anahtarı.

✔️ Data Lake Storage 2. Nesil depolama hesabınızın adı.

✔️ Aboneliğinizin kiracı kimliği.

✔️ Microsoft Entra Id (eski adıyla Azure Active Directory) ile kaydettiğiniz uygulamanın uygulama kimliği.

✔️ Microsoft Entra Id (eski adıyla Azure Active Directory) ile kaydettiğiniz uygulamanın kimlik doğrulama anahtarı.

Azure Databricks hizmeti oluşturma

Bu bölümde, Azure portalını kullanarak bir Azure Databricks hizmeti oluşturacaksınız.

  1. Azure portalı menüsünden, Kaynak oluştur'u seçin.

    Create a resource on Azure portal

    Ardından Analytics>Azure Databricks'i seçin.

    Create Azure Databricks on Azure portal

  2. Azure Databricks Hizmeti altında, bir Databricks hizmeti oluşturmak için aşağıdaki değerleri sağlayın:

    Ö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ü için ilgili kaynakları bir arada tutan 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.
  3. Hesabın oluşturulması birkaç dakika sürer. İşlem durumunu izlemek için üstteki ilerleme çubuğunu görüntüleyin.

  4. Panoya sabitle’yi ve sonra Oluştur’u seçin.

Azure Databricks’te Spark kümesi oluşturma

  1. Azure portalında, oluşturduğunuz Databricks hizmetine gidin ve Çalışma Alanını Başlat'ı seçin.

  2. Azure Databricks portalına yönlendirilirsiniz. Portaldan Küme’yi seçin.

    Databricks on Azure

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

    Create Databricks Spark cluster on Azure

  4. 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 etkinlik dışı kalma süresinden sonra sonlandır onay kutusunu seçtiğinizden emin olun. Küme kullanılmıyorsa, kümeyi sonlandırmak için bir süre (dakika) sağlayın.

    • Küme oluştur’u seçin. Küme çalıştırıldıktan sonra, kümeye not defterleri ekleyebilir ve Spark işlerini çalıştırabilirsiniz.

Azure Data Lake Storage 2. Nesil hesabında dosya sistemi oluşturma

Bu bölümde, Azure Databricks çalışma alanında bir not defteri oluşturacak ve ardından depolama hesabını yapılandırmak için kod parçacıkları çalıştıracaksınız

  1. Azure portalında, oluşturduğunuz Azure Databricks hizmetine gidin ve Çalışma Alanını Başlat'ı seçin.

  2. Sol tarafta Çalışma Alanı'nı seçin. Çalışma Alanı açılır listesinden Oluştur>Not Defteri’ni seçin.

    Create a notebook in Databricks

  3. 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.

    Provide details for a notebook in Databricks

  4. Oluştur'u belirleyin.

  5. Aşağıdaki kod bloğu, Spark oturumunda erişilen tüm ADLS 2. Nesil hesapları 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 bloğunu kopyalayıp Azure Databricks not defterinizin ilk hücresine 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")
    
  6. Bu kod bloğunda, bu kod bloğundaki <app-id>, <secret>, <tenant-id>ve <storage-account-name> yer tutucu değerlerini, bu öğreticinin önkoşullarını tamamlarken topladığınız değerlerle değiştirin. <file-system-name> Yer tutucu 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 kaydettiğiniz uygulamadandır.

    • <tenant-id> aboneliğinizden alınmıştı.

    • <storage-account-name>, Azure Data Lake Storage 2. Nesil depolama hesabınızın adıdır.

  7. Kodu bu blokta çalıştırmak için SHIFT + ENTER tuşlarına basın.

Örnek verileri Azure Data Lake Storage 2. Nesil hesabına alma

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üntülenen değerleri daha önce kullandığınız 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 Storage 2. Nesil hesabından veri ayıklama

  1. Artık örnek json dosyasını Azure Databricks'te veri çerçevesi olarak yükleyebilirsiniz. Aşağıdaki kodu yeni bir hücreye yapıştırın. Köşeli ayraç içinde gösterilen yer tutucuları değerlerinizle değiştirin.

    val df = spark.read.json("abfss://" + fileSystemName + "@" + storageAccountName + ".dfs.core.windows.net/small_radio_json.json")
    
  2. Kodu bu blokta çalıştırmak için SHIFT + ENTER tuşlarına basın.

  3. 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

Ham örnek veri small_radio_json.json dosyası, bir radyo istasyonunun hedef kitlesini yakalar ve çeşitli sütunlara sahiptir. Bu bölümde, verileri yalnızca veri kümesinden belirli sütunları alacak şekilde dönüştürebilirsiniz.

  1. İlk olarak, oluşturduğunuz veri çerçevesinden yalnızca firstName, lastName, gender, location ve 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|
    +---------+----------+------+--------------------+-----+
    
  2. 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|
    +---------+----------+------+--------------------+-----------------+
    

Azure Synapse'e veri yükleme

Bu bölümde, dönüştürülmüş verileri Azure Synapse'e yüklersiniz. Bir veri çerçevesini doğrudan Synapse Spark havuzuna tablo olarak yüklemek için Azure Databricks için Azure Synapse bağlayıcısını kullanırsınız.

Daha önce belirtildiği gibi Azure Synapse bağlayıcısı, Azure Databricks ile Azure Synapse arasında veri yüklemek için geçici depolama alanı olarak Azure Blob depolamayı kullanır. 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şturmuş olmanız gerekir.

  1. 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>"
    
  2. Verileri Azure Databricks ile Azure Synapse arasında taşırken kullanılacak geçici bir klasör belirtin.

    val tempDir = "wasbs://" + blobContainer + "@" + blobStorage +"/tempDirs"
    
  3. 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 tutmak zorunda kalmamanızı sağlar.

    val acntInfo = "fs.azure.account.key."+ blobStorage
    sc.hadoopConfiguration.set(acntInfo, blobAccessKey)
    
  4. Azure Synapse örneğine bağlanmak için değerleri sağlayın. Önkoşul olarak bir Azure Synapse Analytics hizmeti oluşturmuş olmanız 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=" + dwPass
    
  5. Dönüştürülen veri çerçevesini (renamedColumnsDF) Azure Synapse'te tablo olarak yüklemek için aşağıdaki kod parçacığını çalıştırın. 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, Azure Synapse'in Bir Erişim Anahtarı kullanarak blob depolamadan verilere erişmesine neden olan bayrağını kullanır forward_spark_azure_storage_credentials . Desteklenen tek kimlik doğrulama yöntemi budur.

    Azure Blob Depolama belirli sanal ağlarla sınırlıysa Azure Synapse, Erişim Anahtarları yerine Yönetilen Hizmet Kimliği gerektirir. Bu, "Bu isteğin bu işlemi gerçekleştirme yetkisi yok" hatasına neden olur.

  6. SQL veritabanına Bağlan ve adlı bir veritabanı gördüğünüzden emin olunSampleTable.

    Verify the sample table

  7. 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.

    Verify the sample table content

Kaynakları temizleme

Öğreticiyi tamamladıktan sonra kümeyi sonlandırabilirsiniz. Azure Databricks çalışma alanından soldaki Kümeler'i seçin. Kümenin sonlandırılması için Eylemler'in altında üç noktanın (...) üzerine gelin ve Sonlandır simgesini seçin.

Stop a Databricks cluster

Kümeyi el ile sonlandırmazsanız, kümeyi oluştururken __ dakika etkinlik dışı kalma süresinden sonra sonlandır onay kutusunu seçtiğinizde otomatik olarak durdurulur. Böyle bir durumda, küme belirtilen süre boyunca etkin değilse otomatik olarak durdurulur.

Sonraki adımlar

Bu öğreticide, şunların nasıl yapıldığını öğrendiniz:

  • Azure Databricks hizmeti oluşturma
  • Azure Databricks’te Spark kümesi oluşturma
  • Azure Databricks’te not defteri oluşturma
  • Data Lake Storage 2. Nesil hesabından veri ayıklama
  • Azure Databricks'te verileri dönüştürme
  • Azure Synapse'e veri yükleme