Cara menggunakan API pemasangan/pelepasan file di Synapse

Tim studio Synapse membangun dua API mount/unmount baru dalam paket Microsoft Spark Utilities (MSSparkUtils), Anda dapat menggunakan mount untuk melampirkan penyimpanan jarak jauh (Azure Blob Storage, Azure Data Lake Storage (ADLS) Gen2) ke semua node yang berfungsi (node driver dan node pekerja). Setelah diberlakukan, Anda dapat mengakses data dalam penyimpanan seolah-olah data berada dalam satu sistem file lokal yang sama dengan API file lokal. Untuk informasi selengkapnya, lihat Pengantar Utilitas Microsoft Spark.

Dokumen tersebut akan menunjukkan kepada Anda cara menggunakan mount/unmount API di ruang kerja Anda, terutama mencakup bagian di bawah ini:

  • Cara memasang Azure Data Lake Storage (ADLS) Gen2 atau Azure Blob Storage
  • Cara mengakses file pada bagian titik pemasangan melalui API sistem file lokal
  • Cara mengakses file di bagian titik mount menggunakan fs API mssparktuils
  • Cara mengakses file pada bagian titik pemasangan menggunakan Spark Read API
  • Cara melepaskan titik pemasangan

Peringatan

  • Pemasangan Azure Fileshare dinonaktifkan untuk sementara, Anda dapat menggunakan pemasangan ADLS Gen2/blob dengan mengikuti Cara memasang Penyimpanan Gen2/blob.

  • Penyimpanan Azure Storage Data Lake Gen1 tidak didukung, Anda dapat bermigrasi ke ADLS Gen2 dengan mengikuti Panduan migrasi sebelum menggunakan API mount.

Cara memasang penyimpanan

Di sini kami akan mengilustrasikan langkah demi langkah memasang Azure Data Lake Storage (ADLS) Gen2 atau Azure Blob Storage sebagai contoh, pemasangan blob storage bekerja dengan cara yang sama.

Dengan asumsi Anda memiliki satu akun ADLS Gen2 bernama storegen2 dan akun tersebut memiliki satu nama kontainer mycontainer, dan Anda ingin memasang mycontainer ke /test dari kumpulan Spark Anda.

Cuplikan layar akun penyimpanan ADLS Gen2

Untuk memasang kontainer mycontainer, mssparkutils perlu memeriksa apakah Anda memiliki izin untuk mengakses kontainer terlebih dahulu, saat ini kami mendukung tiga metode autentikasi untuk memicu operasi pemasangan, LinkedService, accountKey, dan sastoken.

Melalui Layanan Tertaut (disarankan):

Memicu mount melalui Layanan tertaut adalah cara yang kami sarankan, tidak akan ada masalah kebocoran keamanan dengan cara ini, karena mssparkutils tidak menyimpan nilai rahasia/autentikasi itu sendiri, dan akan selalu mengambil nilai autentikasi dari layanan tertaut ke permintaan blob data dari penyimpanan jarak jauh.

Cuplikan layar layanan tautan

Anda dapat membuat layanan tertaut untuk ADLS Gen2 atau penyimpanan blob. Saat ini, dua metode autentikasi didukung saat membuat layanan tertaut, satu menggunakan kunci akun, yang lain menggunakan identitas terkelola.

  • Membuat layanan tertaut menggunakan kunci akunCuplikan layar layanan link menggunakan kunci akun

  • Membuat layanan tertaut menggunakan Identitas TerkelolaCuplikan layar layanan link menggunakan identitas terkelola

Catatan

  • Jika Anda membuat layanan tertaut menggunakan identitas terkelola sebagai metode autentikasi, pastikan bahwa ruang kerja MSI memiliki peran Kontributor Data Blob Storage dari kontainer yang dipasang.
  • Harap selalu periksa koneksi layanan tertaut untuk menjamin bahwa layanan tertaut berhasil dibuat.

Setelah berhasil membuat layanan tertaut, Anda dapat dengan mudah memasang kontainer ke kolam Spark Anda dengan kode Python di bawah ini.

mssparkutils.fs.mount( 
    "abfss://mycontainer@<accountname>.dfs.core.windows.net", 
    "/test", 
    {"linkedService":"mygen2account"} 
) 

Pemberitahuan:

  • Anda mungkin perlu mengimpor mssparkutils jika tidak tersedia.

    From notebookutils import mssparkutils 
    
  • Tidak disarankan untuk memasang folder root, apa pun metode autentikasi yang digunakan.

Melalui Token Tanda Tangan Akses Bersama atau Kunci Akun

Selain memasang dengan layanan tertaut, mssparkutils juga mendukung secara eksplisit meneruskan kunci akun atau token SAS (tanda tangan akses bersama) sebagai parameter untuk memasang target.

Untuk alasan keamanan, disarankan untuk menyimpan kunci Akun atau token SAS di Azure Key Vaults (seperti yang ditunjukkan oleh contoh gambar di bawah), lalu mengambilnya dengan API mssparkutil.credentials.getSecret. Untuk informasi selengkapnya, lihat Mengelola kunci akun penyimpanan dengan Key Vault dan Azure CLI (lama).

Cuplikan layar brankas kunci

Berikut adalah sampel kodenya.

from notebookutils import mssparkutils  

accountKey = mssparkutils.credentials.getSecret("MountKV","mySecret")  
mssparkutils.fs.mount(  
    "abfss://mycontainer@<accountname>.dfs.core.windows.net",  
    "/test",  
    {"accountKey":accountKey}
) 

Catatan

Untuk alasan keamanan, jangan simpan kredensial dalam kode.

Cara mengakses file pada bagian titik pemasangan menggunakan mssparktuils fs API

Tujuan utama dari operasi pemasangan adalah untuk memungkinkan pelanggan mengakses data yang disimpan di akun penyimpanan jarak jauh menggunakan API sistem file lokal, Anda juga dapat mengakses data menggunakan API mssparkutils fs dengan jalur terpasang sebagai parameter. Format jalur yang digunakan di sini sedikit berbeda.

Dengan asumsi Anda memasang ke kontainer ADLS Gen2 mycontainer ke /test menggunakan mount API.

Saat Anda mengakses data menggunakan API sistem file lokal, seperti yang dibagikan bagian di atas, format jalurnya seperti

/synfs/{jobId}/test/{filename}

Sedangkan saat ingin mengakses data dengan API mssparkutils fs, format pathnya seperti:

synfs:/{jobId}/test/{filename}

Anda dapat melihat synfs digunakan sebagai skema dalam kasus ini, bukan sebagai bagian dari jalur yang dipasang.

Di bawah ini adalah tiga contoh untuk menunjukkan cara mengakses file dengan jalur titik mount menggunakan mssparkutils fs, sedangkan 49 adalah ID pekerjaan Spark yang kami dapatkan dari memanggil mssparkutils.env.getJobId().

  • Mencantumkan dirs:

    mssparkutils.fs.ls("synfs:/49/test") 
    
  • Membaca konten file:

    mssparkutils.fs.head("synfs:/49/test/myFile.txt") 
    
  • Membuat direktori:

    mssparkutils.fs.mkdirs("synfs:/49/test/newdir") 
    

Cara mengakses file pada bagian titik pemasangan menggunakan Spark Read API

Anda juga dapat menggunakan API baca Spark dengan jalur terpasang sebagai parameter untuk mengakses data setelah pemasangan juga, format jalur di sini sama dengan format menggunakan API mssparkutils fs:

synfs:/{jobId}/test/{filename}

Di bawah ini adalah dua contoh kode, satu untuk penyimpanan ADLS Gen2 terpasang, satu lagi untuk penyimpanan blob terpasang.

Baca file dari akun penyimpanan ADLS Gen2 yang terpasang

Contoh di bawah ini mengasumsikan penyimpanan ADLS Gen2 sudah terpasang, kemudian membaca file menggunakan jalur pemasangan.

%%pyspark 

# Assume a ADLS Gen2 storage was already mounted then read file using mount path 

df = spark.read.load("synfs:/49/test/myFile.csv", format='csv') 
df.show() 

Membaca file dari akun penyimpanan blob yang terpasang

Perhatikan bahwa jika Anda memasang akun penyimpanan blob kemudian ingin mengaksesnya menggunakan mssparkutils atau API Spark, Anda harus mengonfigurasi token sas secara eksplisit melalui konfigurasi spark terlebih dahulu sebelum mencoba memasang kontainer menggunakan API pemasangan.

  1. Perbarui konfigurasi Spark seperti contoh kode di bawah ini jika Anda ingin mengaksesnya menggunakan mssparkutils atau API Spark setelah memicu pemasangan, Anda dapat melewati langkah ini jika Anda hanya ingin mengaksesnya menggunakan file api lokal setelah pemasangan:

    blob_sas_token = mssparkutils.credentials.getConnectionStringOrCreds("myblobstorageaccount") 
    
    spark.conf.set('fs.azure.sas.mycontainer.<blobStorageAccountName>.blob.core.windows.net', blob_sas_token) 
    
  2. Buat layanan tautan myblobstorageaccount dan pasang akun penyimpanan blob dengan layanan tautan:

    %%spark 
    mssparkutils.fs.mount( 
        "wasbs://mycontainer@<blobStorageAccountName>.blob.core.windows.net", 
        "/test", 
        Map("linkedService" -> "myblobstorageaccount") 
    ) 
    
  3. Pasang kontainer penyimpanan blob dan kemudian baca file menggunakan jalur pemasangan melalui API file lokal:

    # mount blob storage container and then read file using mount path
    with open("/synfs/64/test/myFile.txt") as f:
        print(f.read())
    
  4. Baca data dari penyimpanan blob yang dipasang melalui API baca Spark:

    %%spark
    // mount blob storage container and then read file using mount path
    val df = spark.read.text("synfs:/49/test/myFile.txt")
    df.show()
    

Cara melepaskan titik pemasangan

Lepaskan dengan titik pemasangan Anda, /test dalam contoh:

mssparkutils.fs.unmount("/test") 

Batasan yang diketahui

  • Fungsi mssparkutils fs help belum menambahkan deskripsi tentang bagian mount/unmount.

  • Selanjutnya, kami akan mendukung mekanisme pelepasan otomatis untuk menghapus titik pemasangan saat aplikasi selesai dijalankan, saat ini belum diterapkan. Jika Anda ingin melepaskan titik pemasangan untuk melepaskan ruang disk, Anda perlu secara eksplisit memanggil API pelepasan dalam kode Anda, jika tidak, titik pemasangan akan tetap ada di node bahkan setelah aplikasi selesai dijalankan.

  • Memasang akun penyimpanan ADLS Gen1 tidak didukung untuk saat ini.

Langkah berikutnya