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

Bu öğreticide, Azure Databricks kullanarak bir ETL (ayıklama, dönüştürme ve veri yükleme) işlemi gerçekleştirirsiniz. Azure Data Lake Storage 2. verileri Azure Databricks ayıklayın, Azure Databricks verilerde dönüşümler çalıştırın ve dönüştürülmüş verileri Azure Synapse Analytics 'e yükleyin.

Bu öğreticideki adımlarda, Azure Databricks verileri aktarmak için Azure Databricks için Azure SYNAPSE bağlayıcısını kullanın. bu bağlayıcı, bir Azure Databricks kümesi ve 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:

Data Lake Store ve Azure SYNAPSE ile Azure Databricks

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

  • Azure Databricks bir hizmet oluşturun.
  • Azure Databricks bir Spark kümesi oluşturun.
  • Data Lake Storage 2. hesapta bir dosya sistemi oluşturun.
  • Azure Data Lake Storage 2. hesaba örnek verileri Upload.
  • Hizmet sorumlusu oluşturun.
  • Azure Data Lake Storage 2. hesabından veri ayıklayın.
  • Azure Databricks verileri dönüştürme.
  • Verileri Azure SYNAPSE 'a yükleyin.

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 hesabınız varsa, profilinize gidin ve aboneliğinizi Kullandıkça Öde ile değiştirin. Daha fazla bilgi için bkz. Ücretsiz Azure hesabı. Ardından, harcama limitini kaldırınve bölgenizdeki vCPU 'lar için bir kota artışı isteyin . Azure Databricks çalışma alanınızı oluşturduğunuzda, çalışma alanının 14 gün boyunca Premium Azure Databricks dbus 'a erişmesini sağlamak için deneme (Premium-14 gün ücretsiz dbus) fiyatlandırma katmanını seçebilirsiniz.

Önkoşullar

Bu öğreticiye başlamadan önce bu görevleri doldurun:

İhtiyaç duyduğunuz bilgileri toplayın

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

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

: heavy_check_mark: veritabanı adı, veritabanı sunucu adı, Kullanıcı adı ve Azure SYNAPSE parolası.

: heavy_check_mark: BLOB depolama hesabınızın erişim anahtarı.

: heavy_check_mark: Data Lake Storage 2. depolama hesabınızın adı.

: heavy_check_mark: aboneliğinizin kiracı KIMLIĞI.

: heavy_check_mark: Azure Active Directory (Azure AD) ile kaydettiğiniz uygulamanın uygulama KIMLIĞI.

: heavy_check_mark: Azure AD ile kaydettiğiniz uygulamanın kimlik doğrulama anahtarı.

Azure Databricks hizmeti oluşturma

Bu bölümde, Azure portal kullanarak bir Azure Databricks hizmeti oluşturursunuz.

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

    Azure portal kaynak oluşturma

    Ardından analiz > Azure Databricks seçin.

    Azure portal üzerinde Azure Databricks oluşturma

  2. Azure Databricks hizmeti altında, 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ü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.
  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, 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.

    Azure 'da databricks

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

    Azure 'da Databricks Spark kümesi oluşturma

  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.

    • _ _ Etkinliksizlik süresi dolduktan 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 cinsinden) belirtin.

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

Azure Data Lake Storage 2. hesapta bir dosya sistemi oluşturma

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

  1. Azure Portal, 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.

    Databricks 'te Not defteri oluşturma

  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.

    Databricks içindeki bir not defterinin ayrıntılarını sağlama

  4. Oluştur’u seçin.

  5. Aşağıdaki kod bloğu, Spark oturumunda erişilen herhangi bir ADLS Gen 2 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")
    
  6. 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 2. Nesil Depolama adıdır.

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

  1. Artık örnek json dosyasını bir 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")
    
  2. Bu blokta kodu ç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

small_radio_json.json dosyasının ham örnek verileri, bir radyo istasyonunun hedef kitlesini yakalar ve çeşitli sütunları vardır. Bu bölümde, verileri yalnızca veri kümesinden belirli sütunları almak için dönüştürebilirsiniz.

  1. İlk olarak, oluşturduğunuz veri çerçevesinin 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|
    +---------+----------+------+--------------------+-----------------+
    

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.

  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. Veri taşıma ve depolama alanı arasında veri taşıma sırasında Azure Databricks Azure Synapse.

    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 tutmanıza gerek olmadığını sağlar.

    val acntInfo = "fs.azure.account.key."+ blobStorage
    sc.hadoopConfiguration.set(acntInfo, blobAccessKey)
    
  4. Azure Synapse örneğine bağlanmak için Azure Synapse sağlama. Ö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=" + dwPass
    
  5. Dönüştürülmüş veri çerçevesini renamedColumnsDF olarak 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, blob depolamadan erişim Azure Synapse Erişim Anahtarı kullanarak verilere forward_spark_azure_storage_credentials eriş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.

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

    Örnek tabloyu doğrulama

  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.

    Örnek tablo içeriğini doğrulama

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'in altında üç noktanın (...) üzerine gelin ve Sonlandır simgesini seçin.

Databricks kümesi durdurma

Kümeyi oluşturulduğunda dakikalarca bir süre sonra sonlandır _ _ onay kutusunu işaretledikten sonra kümeyi el ile sonlandıramıyorsanız küme otomatik olarak durur. 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.