Bagikan melalui


Memigrasikan metadata Apache Hive Metastore dari Azure Synapse Analytics ke Fabric

Langkah awal dalam migrasi Apache Hive Metastore (HMS) melibatkan penentuan database, tabel, dan partisi yang ingin Anda transfer. Tidak perlu memigrasikan semuanya; Anda dapat memilih database tertentu. Saat mengidentifikasi database untuk migrasi, pastikan untuk memverifikasi apakah ada tabel Spark terkelola atau eksternal.

Untuk pertimbangan HMS, lihat perbedaan antara Azure Synapse Spark dan Fabric.

Catatan

Atau, jika ADLS Gen2 berisi tabel Delta, Anda dapat membuat pintasan OneLake ke tabel Delta di ADLS Gen2.

Prasyarat

  • Jika Anda belum memilikinya, buat ruang kerja Fabric di penyewa Anda.
  • Jika Anda belum memilikinya, buat rumah danau Fabric di ruang kerja Anda.

Opsi 1: Ekspor dan impor HMS ke metastore lakehouse

Ikuti langkah-langkah utama ini untuk migrasi:

  • Langkah 1: Ekspor metadata dari HMS sumber
  • Langkah 2: Impor metadata ke Fabric lakehouse
  • Langkah-langkah pascamigrasi: Memvalidasi konten

Catatan

Skrip hanya menyalin objek katalog Spark ke Fabric lakehouse. Asumsinya adalah bahwa data sudah disalin (misalnya, dari lokasi gudang ke ADLS Gen2) atau tersedia untuk tabel terkelola dan eksternal (misalnya, melalui pintasan—pilihan) ke dalam Fabric lakehouse.

Langkah 1: Ekspor metadata dari HMS sumber

Fokus Langkah 1 adalah mengekspor metadata dari HMS sumber ke bagian File lakehouse Fabric Anda. Proses ini adalah sebagai berikut:

  • 1.1) Impor notebook ekspor metadata HMS ke ruang kerja Azure Synapse Anda. Notebook ini mengkueri dan mengekspor metadata HMS database, tabel, dan partisi ke direktori perantara di OneLake (fungsi belum disertakan). API katalog internal Spark digunakan dalam skrip ini untuk membaca objek katalog.

  • 1.2) Konfigurasikan parameter dalam perintah pertama untuk mengekspor informasi metadata ke penyimpanan menengah (OneLake). Cuplikan berikut digunakan untuk mengonfigurasi parameter sumber dan tujuan. Pastikan untuk menggantinya dengan nilai Anda sendiri.

    
    // Azure Synapse workspace config
    var SynapseWorkspaceName = "<synapse_workspace_name>"
    
    var DatabaseNames = "<db1_name>;<db2_name>"
    var SkipExportTablesWithUnrecognizedType:Boolean = false
    
    // Fabric config
    var WorkspaceId = "<workspace_id>"
    var LakehouseId = "<lakehouse_id>"
    var ExportFolderName = f"export/${SynapseWorkspaceName}/sparkCatalogMetadata"
    
    var OutputFolder = f"abfss://${WorkspaceId}@onelake.dfs.fabric.microsoft.com/${LakehouseId}/Files/${ExportFolderName}/"
    
    
  • 1.3) Jalankan semua perintah buku catatan untuk mengekspor objek katalog ke OneLake. Setelah sel selesai, struktur folder ini di bawah direktori output menengah dibuat.

    Cuplikan layar memperlihatkan ekspor HMS di OneLake.

Langkah 2: Impor metadata ke Fabric lakehouse

Langkah 2 adalah ketika metadata aktual diimpor dari penyimpanan perantara ke lakehouse Fabric. Output dari langkah ini adalah memigrasikan semua metadata HMS (database, tabel, dan partisi). Proses ini adalah sebagai berikut:

  • 2.1) Buat pintasan dalam bagian "File" di lakehouse. Pintasan ini perlu menunjuk ke direktori gudang Spark sumber dan digunakan nanti untuk melakukan penggantian untuk tabel terkelola Spark. Lihat contoh pintasan yang menunjuk ke direktori gudang Spark:

    • Jalur pintasan ke direktori gudang Azure Synapse Spark: abfss://<container>@<storage_name>.dfs.core.windows.net/synapse/workspaces/<workspace_name>/warehouse
    • Jalur pintasan ke direktori gudang Azure Databricks: dbfs:/mnt/<warehouse_dir>
    • Jalur pintasan ke direktori gudang HDInsight Spark: abfss://<container>@<storage_name>.dfs.core.windows.net/apps/spark/warehouse
  • 2.2) Impor notebook impor metadata HMS ke ruang kerja Fabric Anda. Impor buku catatan ini untuk mengimpor database, tabel, dan objek partisi dari penyimpanan perantara. API katalog internal Spark digunakan dalam skrip ini untuk membuat objek katalog di Fabric.

  • 2.3) Konfigurasikan parameter dalam perintah pertama. Di Apache Spark, saat Anda membuat tabel terkelola, data untuk tabel tersebut disimpan di lokasi yang dikelola oleh Spark itu sendiri, biasanya dalam direktori gudang Spark. Lokasi yang tepat ditentukan oleh Spark. Ini kontras dengan tabel eksternal, di mana Anda menentukan lokasi dan mengelola data yang mendasar. Saat Anda memigrasikan metadata tabel terkelola (tanpa memindahkan data aktual), metadata masih berisi informasi lokasi asli yang menunjuk ke direktori gudang Spark lama. Oleh karena itu, untuk tabel terkelola, WarehouseMappings digunakan untuk melakukan penggantian menggunakan pintasan yang dibuat di Langkah 2.1. Semua tabel terkelola sumber dikonversi sebagai tabel eksternal menggunakan skrip ini. LakehouseId mengacu pada lakehouse yang dibuat di Langkah 2.1 yang berisi pintasan.

    
    // Azure Synapse workspace config
    var ContainerName = "<container_name>"
    var StorageName = "<storage_name>"
    var SynapseWorkspaceName = "<synapse_workspace_name>"
    
    // Fabric config
    var WorkspaceId = "<workspace_id>"
    var LakehouseId = "<lakehouse_id>"
    var ExportFolderName = f"export/${SynapseWorkspaceName}/sparkCatalogMetadata"
    var ShortcutName = "<warehouse_dir_shortcut_name>"
    
    var WarehouseMappings:Map[String, String] = Map(
        f"abfss://${ContainerName}@${StorageName}.dfs.core.windows.net/synapse/workspaces/${SynapseWorkspaceName}/warehouse"-> f"abfss://${WorkspaceId}@onelake.dfs.fabric.microsoft.com/${LakehouseId}/Files/${ShortcutName}"
    )
    
    var OutputFolder = f"abfss://${WorkspaceId}@onelake.dfs.fabric.microsoft.com/${LakehouseId}/Files/${ExportFolderName}/"
    
    var DatabasePrefix = ""
    var TablePrefix = ""
    var IgnoreIfExists = true
    
    
  • 2.4) Jalankan semua perintah notebook untuk mengimpor objek katalog dari jalur perantara.

Catatan

Saat mengimpor beberapa database, Anda dapat (i) membuat satu lakehouse per database (pendekatan yang digunakan di sini), atau (ii) memindahkan semua tabel dari database yang berbeda ke satu lakehouse. Untuk yang terakhir, semua tabel yang dimigrasikan bisa menjadi <lakehouse>.<db_name>_<table_name>, dan Anda harus menyesuaikan notebook impor yang sesuai.

Langkah 3: Memvalidasi konten

Langkah 3 adalah tempat Anda memvalidasi bahwa metadata telah berhasil dimigrasikan. Lihat contoh yang berbeda.

Anda bisa melihat database yang diimpor dengan menjalankan:

%%sql
SHOW DATABASES

Anda dapat memeriksa semua tabel di lakehouse (database) dengan menjalankan:

%%sql
SHOW TABLES IN <lakehouse_name>

Anda dapat melihat detail tabel tertentu dengan menjalankan:

%%sql
DESCRIBE EXTENDED <lakehouse_name>.<table_name>

Atau, semua tabel yang diimpor terlihat di dalam bagian Tabel UI penjelajah Lakehouse untuk setiap lakehouse.

Cuplikan layar memperlihatkan metadata HMS yang diimpor di lakehouse.

Pertimbangan lain

  • Skalabilitas: Solusinya di sini menggunakan API katalog Spark internal untuk melakukan impor/ekspor, tetapi tidak terhubung langsung ke HMS untuk mendapatkan objek katalog, sehingga solusi tidak dapat diskalakan dengan baik jika katalog besar. Anda perlu mengubah logika ekspor menggunakan HMS DB.
  • Akurasi data: Tidak ada jaminan isolasi, yang berarti bahwa jika mesin komputasi Spark melakukan modifikasi bersamaan ke metastore saat notebook migrasi berjalan, data yang tidak konsisten dapat diperkenalkan di Fabric lakehouse.