Menyambungkan ke Azure Data Lake Storage Gen2 dan Blob Storage

Catatan

Artikel ini menjelaskan pola warisan untuk mengonfigurasi akses ke Azure Data Lake Storage Gen2. Databricks merekomendasikan penggunaan Unity Catalog untuk mengonfigurasi akses ke Azure Data Lake Storage Gen2 dan volume untuk interaksi langsung dengan file. Lihat Koneksi ke penyimpanan objek cloud menggunakan Unity Catalog.

Artikel ini menjelaskan cara menyambungkan ke Azure Data Lake Storage Gen2 dan Blob Storage dari Azure Databricks.

Catatan

Koneksi ke Azure Data Lake Storage Gen2 atau Blob Storage menggunakan kredensial Azure

Kredensial berikut dapat digunakan untuk mengakses Azure Data Lake Storage Gen2 atau Blob Storage:

  • OAuth 2.0 dengan perwakilan layanan MICROSOFT Entra ID: Databricks merekomendasikan penggunaan perwakilan layanan ID Microsoft Entra untuk menyambungkan ke penyimpanan Azure. Untuk membuat perwakilan layanan ID Microsoft Entra dan menyediakannya akses ke akun penyimpanan Azure, lihat Mengakses penyimpanan menggunakan perwakilan layanan & ID Microsoft Entra(Azure Active Directory).

    Untuk membuat perwakilan layanan ID Microsoft Entra, Anda harus memiliki Application Administrator peran atau Application.ReadWrite.All izin di ID Microsoft Entra (sebelumnya Azure Active Directory). Untuk menetapkan peran pada akun penyimpanan, Anda harus menjadi Pemilik atau pengguna dengan peran Administrator Akses Pengguna Azure RBAC di akun penyimpanan.

  • Tanda tangan akses bersama (SAS): Anda dapat menggunakan token SAS penyimpanan untuk mengakses penyimpanan Azure. Dengan SAS, Anda dapat membatasi akses ke akun penyimpanan menggunakan token sementara dengan kontrol akses terperinci.

    Anda hanya dapat memberikan izin token SAS yang Anda miliki di akun penyimpanan, kontainer, atau file sendiri.

  • Kunci akun: Anda dapat menggunakan kunci akses akun penyimpanan untuk mengelola akses ke Azure Storage. Kunci akses akun penyimpanan menyediakan akses penuh ke konfigurasi akun penyimpanan, serta data. Databricks merekomendasikan penggunaan perwakilan layanan ID Microsoft Entra atau token SAS untuk menyambungkan ke penyimpanan Azure alih-alih kunci akun.

    Untuk melihat kunci akses akun, Anda harus memiliki peran Pemilik, Kontributor, atau Layanan Operator Kunci Akun Penyimpanan di akun penyimpanan.

Databricks merekomendasikan penggunaan cakupan rahasia untuk menyimpan semua mandat. Anda dapat memberikan akses kepada pengguna, prinsipal layanan, dan grup di ruang kerja Anda untuk membaca cakupan rahasia. Ini melindungi kredensial Azure sambil memungkinkan pengguna mengakses penyimpanan Azure. Untuk membuat cakupan rahasia, lihat Cakupan rahasia.

Mengatur properti Spark untuk mengonfigurasi kredensial Azure untuk mengakses penyimpanan Azure

Anda dapat mengatur properti Spark untuk mengonfigurasi kredensial Azure untuk mengakses penyimpanan Azure. Kredensial dapat dilingkup ke kluster atau buku catatan. Gunakan kontrol akses kluster dan kontrol akses notebook bersama-sama untuk melindungi akses ke penyimpanan Azure. Lihat Izin komputasi dan Berkolaborasi menggunakan notebook Databricks.

Catatan

Perwakilan layanan ID Microsoft Entra juga dapat digunakan untuk mengakses penyimpanan Azure dari gudang SQL, lihat Mengaktifkan konfigurasi akses data.

Untuk mengatur properti Spark, gunakan cuplikan berikut dalam konfigurasi Spark kluster atau buku catatan:

Perwakilan layanan Azure

Gunakan format berikut untuk mengatur konfigurasi Spark kluster:

spark.hadoop.fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net OAuth
spark.hadoop.fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider
spark.hadoop.fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net <application-id>
spark.hadoop.fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net {{secrets/<secret-scope>/<service-credential-key>}}
spark.hadoop.fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net https://login.microsoftonline.com/<directory-id>/oauth2/token

Anda bisa menggunakan spark.conf.set di buku catatan, seperti yang diperlihatkan dalam contoh berikut:

service_credential = dbutils.secrets.get(scope="<secret-scope>",key="<service-credential-key>")

spark.conf.set("fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net", "OAuth")
spark.conf.set("fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
spark.conf.set("fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net", "<application-id>")
spark.conf.set("fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net", service_credential)
spark.conf.set("fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net", "https://login.microsoftonline.com/<directory-id>/oauth2/token")

Menggantikan

  • <secret-scope> dengan nama cakupan rahasia Databricks.
  • <service-credential-key> dengan nama kunci yang berisi rahasia klien.
  • <storage-account> dengan nama akun penyimpanan Azure.
  • <application-id>dengan ID Aplikasi (klien) untuk aplikasi ID Microsoft Entra.
  • <directory-id>dengan ID Direktori (penyewa) untuk aplikasi ID Microsoft Entra.

Token Sas

Anda dapat mengonfigurasi token SAS untuk beberapa akun penyimpanan dalam sesi Spark yang sama.

spark.conf.set("fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net", "SAS")
spark.conf.set("fs.azure.sas.token.provider.type.<storage-account>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.sas.FixedSASTokenProvider")
spark.conf.set("fs.azure.sas.fixed.token.<storage-account>.dfs.core.windows.net", dbutils.secrets.get(scope="<scope>", key="<sas-token-key>"))

Menggantikan

  • <storage-account> dengan nama akun Azure Storage.
  • <scope> dengan nama cakupan rahasia Azure Databricks.
  • <sas-token-key> dengan nama kunci yang berisi token SAS penyimpanan Azure.

Kunci akun

spark.conf.set(
    "fs.azure.account.key.<storage-account>.dfs.core.windows.net",
    dbutils.secrets.get(scope="<scope>", key="<storage-account-access-key>"))

Menggantikan

  • <storage-account> dengan nama akun Azure Storage.
  • <scope> dengan nama cakupan rahasia Azure Databricks.
  • <storage-account-access-key> dengan nama kunci yang berisi kunci akses akun penyimpanan Azure.

Mengakses penyimpanan Azure

Setelah mengonfigurasi kredensial dengan benar untuk mengakses kontainer penyimpanan Azure, Anda dapat berinteraksi dengan sumber daya di akun penyimpanan menggunakan URI. Databricks merekomendasikan penggunaan driver abfss untuk keamanan yang lebih besar.

spark.read.load("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<path-to-data>")

dbutils.fs.ls("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<path-to-data>")
CREATE TABLE <database-name>.<table-name>;

COPY INTO <database-name>.<table-name>
FROM 'abfss://container@storageAccount.dfs.core.windows.net/path/to/folder'
FILEFORMAT = CSV
COPY_OPTIONS ('mergeSchema' = 'true');

Contoh notebook

Buku catatan perwakilan layanan ADLS Gen2 OAuth 2.0 dengan Microsoft Entra ID (sebelumnya Azure Active Directory)

Dapatkan buku catatan

Masalah umum Azure Data Lake Storage Gen2

Jika Anda mencoba mengakses kontainer penyimpanan yang dibuat melalui portal Azure, Anda mungkin menerima kesalahan berikut:

StatusCode=404
StatusDescription=The specified filesystem does not exist.
ErrorCode=FilesystemNotFound
ErrorMessage=The specified filesystem does not exist.

Saat namespace hierarki diaktifkan, Anda tidak perlu membuat kontainer melalui portal Azure. Jika Anda menjumpai masalah ini, hapus kontainer Blob melalui portal Azure. Setelah beberapa menit, Anda dapat mengakses kontainer. Jika tidak, Anda dapat mengubah URI abfss untuk menggunakan kontainer yang berbeda, selama kontainer ini tidak dibuat melalui portal Azure.

Lihat Masalah umum seputar Azure Data Lake Storage Gen2 di dokumentasi Microsoft.

Pola yang tidak digunakan lagi untuk menyimpan dan mengakses data dari Azure Databricks

Berikut ini adalah pola penyimpanan yang tidak digunakan lagi: