หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
บทความนี้เป็นระยะที่ 2 จาก 4 ในชุดแนวทางปฏิบัติที่ดีที่สุดของการโยกย้าย Azure Synapse Spark ไปยัง Microsoft Fabric
ใช้บทความนี้เพื่อย้ายงาน Spark ของคุณจาก Azure Synapse ไปยัง Fabric บทความนี้ครอบคลุมถึงการเรียกใช้ Migration Assistant การปรับโครงสร้างรูปแบบโค้ดที่ไม่สามารถแปลงได้โดยอัตโนมัติ และการโยกย้ายการกําหนดค่า สภาพแวดล้อม และไลบรารีของ Spark Pool
ในบทความนี้ คุณจะได้เรียนรู้วิธีการ:
- ทําความเข้าใจเวิร์กโฟลว์การโยกย้ายสําหรับพื้นที่ทํางาน Synapse มาตรฐาน (ไม่ใช่ Git) และที่เปิดใช้งาน Git
- ใช้ Spark Migration Assistant เพื่อโยกย้ายสมุดบันทึก คําจํากัดความงาน Spark และพูล
- ปรับโครงสร้างรูปแบบโค้ดเฉพาะของ Synapse เพื่อความเข้ากันได้ของ Fabric
- ย้ายการตั้งค่า สภาพแวดล้อม และไลบรารีพูล Spark
- ระบุและแก้ไขช่องว่างความเข้ากันได้ของไลบรารีระหว่าง Synapse และ Fabric
ย้ายข้อมูลด้วย Migration Assistant
Spark Migration Assistant ทําให้การโยกย้ายสมุดบันทึก คําจํากัดความงาน Spark พูล และข้อมูลเมตาของฐานข้อมูลทะเลสาบจาก Synapse ไปยัง Fabric เป็นไปโดยอัตโนมัติ ผู้ช่วยจะคัดลอกและแปลงรายการของคุณ แต่การย้ายข้อมูลไม่เสร็จสมบูรณ์ คุณยังคงต้องปรับโครงสร้างโค้ด กระทบยอดช่องว่างของการกําหนดค่า และตรวจสอบผลลัพธ์
สําหรับคําแนะนําทีละขั้นตอนเกี่ยวกับการเรียกใช้ผู้ช่วย โปรดดู Spark Synapse ไปยัง Fabric Spark Migration Assistant (พรีวิว)
ผู้ช่วยย้ายรายการต่อไปนี้:
- Spark pools จะถูกย้ายไปยัง Fabric Pools และรายการสิ่งแวดล้อมที่เกี่ยวข้อง
- สมุดบันทึกและสภาพแวดล้อมที่เกี่ยวข้องจะถูกโยกย้าย
- ข้อกําหนดงาน Spark จะถูกย้ายด้วยสภาพแวดล้อมที่เกี่ยวข้อง
- ฐานข้อมูล Lake ถูกแมปกับ Schema Fabric ตารางเดลต้าที่มีการจัดการจะถูกย้ายผ่านทางลัดแค็ตตาล็อก OneLake
Important
การกําหนดค่า Spark ไลบรารีแบบกําหนดเอง และการตั้งค่าตัวดําเนินการแบบกําหนดเองจะไม่ถูกโยกย้ายโดยผู้ช่วย คุณต้องกําหนดค่าเหล่านี้ด้วยตนเองในรายการสภาพแวดล้อมใน Fabric พื้นที่ทํางาน Synapse ภายใต้ VNet ไม่สามารถโยกย้ายด้วยผู้ช่วยได้
การโยกย้ายพื้นที่ทํางานมาตรฐาน (ไม่ใช่ Git)
สําหรับพื้นที่ทํางานที่สมุดบันทึกและ SJD ถูกจัดเก็บไว้ใน Synapse โดยตรง (ไม่ได้อยู่ในที่เก็บ Git):
เรียกใช้ Spark Migration Assistant จากพื้นที่ทํางาน Fabric ของคุณ (ย้าย>รายการวิศวกรรมข้อมูล) เลือกพื้นที่ทํางาน Synapse ต้นทางและย้ายรายการ Spark ทั้งหมด
ตรวจสอบความถูกต้องของการขึ้นต่อกัน: ตรวจสอบให้แน่ใจว่าใช้ Spark เวอร์ชันเดียวกัน หากโน้ตบุ๊กอ้างอิงโน้ตบุ๊กอื่นผ่าน
mssparkutils.notebook.run()ให้ตรวจสอบว่ามีการย้ายข้อมูลด้วย Migration Assistant จะรักษาโครงสร้างโฟลเดอร์ (Fabric รองรับการซ้อนกันสูงสุด 10 ระดับ)รหัสรีแฟคเตอร์: แทนที่
mssparkutilsด้วยnotebookutilsแทนที่การอ้างอิงบริการที่เชื่อมโยงด้วย Fabric Connections และอัปเดตเส้นทางไฟล์ ดูส่วน Refactor Spark code สําหรับรายละเอียด
การโยกย้ายพื้นที่ทํางานที่เปิดใช้งาน Git
สําหรับพื้นที่ทํางานที่สมุดบันทึกและ SJD ถูกเก็บไว้ในที่เก็บ Azure DevOps หรือ GitHub โปรดทราบว่า Synapse และ Fabric ใช้รูปแบบการทําให้เป็นอนุกรม Git ที่แตกต่างกัน Synapse จัดเก็บโน้ตบุ๊กเป็น JSON; Fabric ใช้รูปแบบต้นฉบับ .py/.scala หรือ .ipynb คุณไม่สามารถชี้พื้นที่ทํางาน Fabric ที่สาขา Synapse Git เดียวกันได้โดยตรง
ย้ายรายการ ใช้ Spark Migration Assistant เพื่อโยกย้ายสมุดบันทึกและ SJD จากพื้นที่ทํางาน Synapse ไปยังพื้นที่ทํางาน Fabric การดําเนินการนี้จะแปลงรายการเป็นรูปแบบที่เข้ากันได้กับ Fabric
รหัสรีแฟคเตอร์ ใช้การปรับโครงสร้างโค้ดเดียวกันกับสถานการณ์มาตรฐาน — แทนที่
mssparkutilsอัปเดตเส้นทางไฟล์ แทนที่บริการที่เชื่อมโยง ดูส่วน Refactor Spark code สําหรับรายละเอียดเชื่อมต่อพื้นที่ทํางาน Fabric กับ Git เชื่อมต่อพื้นที่ทํางาน Fabric ของคุณกับสาขาหรือโฟลเดอร์ใหม่ในที่เก็บของคุณ (การตั้งค่าพื้นที่ทํางาน>Source Control>Git Integration) ใช้สาขาหรือโฟลเดอร์แยกต่างหากจากเนื้อหา Synapse ของคุณเพื่อหลีกเลี่ยงข้อขัดแย้ง คอมมิตเนื้อหาพื้นที่ทํางาน Fabric เพื่อเติมข้อมูลในสาขาใหม่
ตั้งค่าไปป์ไลน์การปรับใช้ (ไม่บังคับ) กําหนดค่าไปป์ไลน์การปรับใช้ Fabric (Dev → Test → Prod) สําหรับ CI/CD ที่กําลังดําเนินอยู่ Fabric รองรับการผูกอัตโนมัติสําหรับเลคเฮาส์เริ่มต้นและสภาพแวดล้อมที่แนบมาเมื่อปรับใช้ข้ามขั้นตอน
เคล็ดลับ
เก็บสาขา Synapse Git ของคุณไว้เหมือนเดิมเพื่อเป็นข้อมูลอ้างอิงทางประวัติศาสตร์ สร้างสาขาหรือโฟลเดอร์ใหม่สําหรับเนื้อหา Fabric Fabric จัดเก็บสมุดบันทึกเป็นไฟล์ต้นฉบับ (.py สําหรับ PySpark) แทนที่จะเป็น JSON ซึ่งให้ความแตกต่างของ Git ที่สะอาดกว่าสําหรับการตรวจสอบโค้ด
รีแฟคเตอร์โค้ด Spark
หลังจากย้ายข้อมูลสมุดบันทึกและคําจํากัดความงาน Spark แล้ว คุณต้องแก้ไขรูปแบบโค้ดที่ Migration Assistant ไม่สามารถแปลงได้โดยอัตโนมัติ ส่วนนี้จะแนะนําคุณเกี่ยวกับการแทนที่ API เฉพาะของ Synapse การอัปเดตเส้นทางไฟล์ และการเปลี่ยนรูปแบบข้อมูลประจําตัวเพื่อทํางานกับ Fabric
การตรวจสอบการปรับโครงสร้างล่วงหน้า
ก่อนที่จะจัดการกับรูปแบบการปรับโครงสร้างแต่ละรูปแบบ ให้เรียกใช้การค้นหาทั่วทั้งฐานโค้ดในสมุดบันทึกทั้งหมดเพื่อระบุโค้ดเฉพาะของ Synapse ที่ต้องการการเปลี่ยนแปลง
| รูปแบบการค้นหา | ประเภท | การดําเนินการที่จําเป็น |
|---|---|---|
spark.synapse.linkedService |
บริการที่เชื่อมโยงแล้ว | ลบ; แทนที่ด้วยการตรวจสอบสิทธิ์ปลายทางโดยตรงหรือข้อมูลลับของ Key Vault |
getSecretWithLS |
ข้อมูลประจำตัว | แทนที่ด้วย getSecret(vaultUrl, secretName) |
TokenLibrary |
โทเค็น/การรับรองความถูกต้อง | ลบ; ใช้การกําหนดค่า OAuth โดยตรงหรือโน้ตบุ๊คยูทิลิตี้ |
synapsesql |
ตัวเชื่อมต่อ SQL | แทนที่ spark.read.synapsesql() ด้วยการอ่านรูปแบบเดลต้า |
mssparkutils |
ยูทิลิตี้สปาร์ค | แทนที่ด้วย notebookutils (API ส่วนใหญ่เหมือนกัน) |
spark.catalog.listDatabases |
API แค็ตตาล็อก | แทนที่ด้วย spark.sql("SHOW DATABASES") |
spark.catalog.currentDatabase |
API แค็ตตาล็อก | แทนที่ด้วย spark.sql("SELECT CURRENT_DATABASE()") |
spark.catalog.getDatabase |
API แค็ตตาล็อก | แทนที่ด้วย spark.sql("DESCRIBE DATABASE ...") |
spark.catalog.listFunctions |
API แค็ตตาล็อก | ไม่รองรับใน Fabric — ลบ |
spark.catalog.registerFunction |
API แค็ตตาล็อก | ไม่รองรับ — ใช้ spark.udf.register() แทน |
spark.catalog.functionExists |
API แค็ตตาล็อก | ไม่รองรับใน Fabric — ลบ |
LinkedServiceBasedTokenProvider |
ผู้ให้บริการตรวจสอบสิทธิ์ | แทนที่ด้วย ClientCredsTokenProvider |
getPropertiesAsMap |
บริการที่เชื่อมโยงแล้ว | ลบ; กําหนดค่าบัญชีที่เก็บข้อมูลโดยตรง |
spark.storage.synapse |
บริการที่เชื่อมโยงแล้ว | ลบ — ไม่รองรับใน Fabric |
/user/trusted-service-user/ |
เส้นทางไฟล์ | แทนที่ด้วยเส้นทาง OneLake หรือเส้นทางลัด |
cosmos.oltp |
Azure Cosmos DB | อัปเดตเพื่อใช้ Key Vault สําหรับข้อมูลลับแทนบริการที่เชื่อมโยง |
kusto.spark.synapse |
คุสโต/ADX | แทนที่การรับรองความถูกต้องของบริการที่ลิงก์ด้วยaccessTokengetToken() |
เคล็ดลับ
เรียกใช้การค้นหาเหล่านี้ในที่เก็บสมุดบันทึกทั้งหมดของคุณก่อนการโยกย้าย โน้ตบุ๊กที่ไม่มีการจับคู่จะปลอดภัยในการโยกย้าย as-is สมุดบันทึกที่ตรงกันควรได้รับการจัดลําดับความสําคัญสําหรับการปรับโครงสร้างโค้ดโดยใช้คําแนะนําโดยละเอียดในส่วนต่อไปนี้
การใช้เส้นทางไฟล์
อัปเดตสมุดบันทึก Synapse ที่ใช้เส้นทางสัมพัทธ์หรือเส้นทางที่เก็บข้อมูลที่จัดการโดย Synapse เพื่อใช้เส้นทาง abfss:// โดยตรงหรือเส้นทาง OneLake ใน Fabric
| ก่อน (ไซแนปส์) | หลัง (Fabric) |
|---|---|
"abfss://...@<synapse_storage>.dfs.core.windows.net/user/trusted-service-user/deltalake" |
"abfss://<workspace_id>@onelake.dfs.fabric.microsoft.com/<lakehouse_id>/Tables/deltalake" |
spark.read.synapsesql("<pool>.<schema>.<table>") |
spark.read.format("delta").load("abfss://.../<lakehouse>/Tables/<table>") |
เคล็ดลับ
แทนที่เส้นทางที่เก็บข้อมูลที่จัดการโดย Synapse ทั้งหมดด้วยเส้นทาง OneLake (abfss://<workspace_id>@onelake.dfs.fabric.microsoft.com/<item_id>/...) สําหรับข้อมูล ADLS Gen2 ให้สร้างทางลัด OneLake และอ้างอิงเส้นทางทางลัดแทน
API แค็ตตาล็อก Spark
Fabric ไม่รองรับวิธีการ spark.catalog หลายวิธี แทนที่ด้วยรายการที่เทียบเท่ากับ Spark SQL
| ก่อน (ไซแนปส์) | หลัง (Fabric) |
|---|---|
spark.catalog.listDatabases() |
spark.sql("SHOW DATABASES").show() |
spark.catalog.currentDatabase() |
spark.sql("SELECT CURRENT_DATABASE()").first()["current_database()"] |
spark.catalog.getDatabase(db_name) |
spark.sql(f"DESCRIBE DATABASE {db_name}").show() |
spark.catalog.listFunctions() |
ไม่รองรับใน Fabric — ลบหรือข้าม |
spark.catalog.registerFunction(name, fn) |
ไม่รองรับใน Fabric — ใช้ spark.udf.register() แทน |
spark.catalog.functionExists(name) |
ไม่รองรับใน Fabric — ลบหรือข้าม |
Note
spark.catalog วิธีการตาราง เช่น createTable(), tableExists() และ listTables() ทํางานได้ตามปกติใน Fabric เฉพาะวิธีการแค็ตตาล็อกระดับฐานข้อมูลและระดับฟังก์ชันเท่านั้นที่ต้องมีการปรับโครงสร้างใหม่
MSSparkUtils และ NotebookUtils
แทนที่การโทร mssparkutils ด้วยค่าเทียบเท่า Fabric notebookutils การเปลี่ยนแปลงที่เกี่ยวข้องกับข้อมูลประจําตัวที่พบบ่อยที่สุดคือ:
| ก่อน (ไซแนปส์) | หลัง (Fabric) |
|---|---|
mssparkutils.credentials.getSecretWithLS("sampleLS", secretKey) |
notebookutils.credentials.getSecret("https://<vault>.vault.azure.net/", secretKey) |
TokenLibrary.getSecret("foo", "bar") |
notebookutils.credentials.getSecret("https://foo.vault.azure.net/", "bar") |
ใน Fabric ไม่รองรับการเรียกข้อมูลลับตามบริการที่เชื่อมโยง (getSecretWithLS) ให้อ้างอิง URL Key Vault โดยตรงโดยใช้ notebookutils.credentials.getSecret(vaultUrl, secretName) แทน รูปแบบเดียวกันนี้ TokenLibrary.getSecret() ใช้กับการโทร
Note
วิธีการ mssparkutils.fs ส่วนใหญ่ (เช่น ls, cp, mv, rm, mkdirs, head) ทํางานเหมือนกับ notebookutils.fs ใน Fabric การเปลี่ยนแปลงหลักคือข้อมูลประจําตัวและวิธีการลับ และการ notebook.run() อ้างอิงเส้นทาง
ตัวเชื่อมต่อ Azure Data Explorer (Kusto)
สมุดบันทึก Synapse ที่เชื่อมต่อกับ Azure Data Explorer (Kusto) ผ่านบริการที่เชื่อมโยงต้องได้รับการปรับโครงสร้างใหม่เพื่อใช้การรับรองความถูกต้องของปลายทางโดยตรง
| ก่อน (ไซแนปส์) | หลัง (Fabric) |
|---|---|
.option("spark.synapse.linkedService", "AzureDataExplorer1") |
ลบการอ้างอิงบริการที่เชื่อมโยง |
| อ่านด้วยชุดตัวเลือกบริการที่เชื่อมโยง | .option("accessToken", notebookutils.credentials.getToken("https://<cluster>.kusto.windows.net")) |
แทนที่ตัวเลือกบริการที่เชื่อมโยงด้วย accessToken ตัวเลือก ใช้ notebookutils.credentials.getToken() เพื่อรับโทเค็นสําหรับปลายทางคลัสเตอร์ Kusto ของคุณ ตัวเลือกคิวรีที่เหลือ (kustoDatabase, kustoQuery) ยังคงไม่เปลี่ยนแปลง
ขั้วต่อ Cosmos DB
อัปเดตการเชื่อมต่อ Azure Cosmos DB ใน Synapse ที่ใช้บริการที่เชื่อมโยงหรือ getSecretWithLS.
| ก่อน (ไซแนปส์) | หลัง (Fabric) |
|---|---|
.option("spark.synapse.linkedService", "CosmosDbLS") |
ลบการอ้างอิงบริการที่เชื่อมโยง |
mssparkutils.credentials.getSecretWithLS("cosmosKeyLS", "cosmosKey") |
notebookutils.credentials.getSecret("https://<vault>.vault.azure.net/", "cosmosKey") |
แทนที่การอ้างอิงบริการที่ลิงก์ด้วยการกําหนดค่าปลายทาง Azure Cosmos DB โดยตรง เก็บคีย์บัญชี Azure Cosmos DB ไว้ใน Azure Key Vault และดึงข้อมูลโดยใช้ notebookutils.credentials.getSecret(vaultUrl, secretName)getSecretWithLS().
การอ้างอิงบริการที่เชื่อมโยง
แทนที่การอ้างอิงบริการที่เชื่อมโยงกับ Synapse ทั้งหมดใน Fabric
| ก่อน (ไซแนปส์) | หลัง (Fabric) |
|---|---|
spark.conf.set("spark.storage.synapse.linkedServiceName", ls_name) |
ลบ — ไม่รองรับใน Fabric |
spark.conf.set("fs.azure.account.oauth.provider.type", "com.microsoft.azure.synapse.tokenlibrary.LinkedServiceBasedTokenProvider") |
spark.conf.set("fs.azure.account.oauth.provider.type", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider") |
TokenLibrary.getPropertiesAsMap(linked_service_cfg) |
ลบ — ใช้ direct สายอักขระการเชื่อมต่อ หรือการกําหนดค่าบริการหลัก |
ใน Fabric ไม่มีบริการที่เชื่อมโยง แทนที่ผู้ให้บริการโทเค็น Synapse ด้วยข้อมูลประจําตัวไคลเอ็นต์ OAuth มาตรฐาน (บริการหลัก) กําหนดค่า fs.azure.account.auth.type, oauth.provider.type, , client.id, client.secretและclient.endpointโดยตรงโดยใช้spark.conf.set()
ไลบรารีโทเค็น
TokenLibrary ของ Synapse สําหรับการรับโทเค็นและการอ่านคุณสมบัติบริการที่เชื่อมโยงไม่พร้อมใช้งานใน Fabric แทนที่ด้วยรูปแบบที่เทียบเท่า
| ก่อน (ไซแนปส์) | หลัง (Fabric) |
|---|---|
TokenLibrary.getPropertiesAsMap(serviceConnection) |
ลบ — กําหนดค่าบัญชีที่เก็บข้อมูลโดยตรง |
val my_account = conexion("Endpoint").toString.substring(8) |
val my_account = "<storage_account_name>" // Hardcode or retrieve via notebookutils |
mssparkutils.fs.head(internalPath, Int.MaxValue) |
notebookutils.fs.head(internalPath, Int.MaxValue) |
สําหรับการเข้าถึง ADLS Gen2 ที่ใช้ OAuth ให้กําหนดค่าข้อมูลเข้าสู่ระบบบริการหลักโดยตรงโดยใช้ spark.conf.set() คีย์เฉพาะบัญชีพื้นที่เก็บข้อมูล (เช่น fs.azure.account.auth.type.<account>.dfs.core.windows.net) แทนที่จะใช้ผู้ให้บริการโทเค็นบริการที่ลิงก์
Important
ตรวจทานสมุดบันทึกทั้งหมดสําหรับการอ้างอิงบริการที่เชื่อมโยงก่อนการเคลื่อนย้าย การเรียก spark.synapse.linkedService, TokenLibrary หรือ getSecretWithLS ที่เหลืออยู่จะล้มเหลวในรันไทม์ใน Fabric
การโยกย้ายข้อกําหนดงาน Spark
คําจํากัดความงาน Spark (SJD) คือการกําหนดค่าชุดงานที่อ้างอิงไฟล์ปฏิบัติการหลัก (.py, .jar, หรือ .R) ไลบรารีอ้างอิงเสริม อาร์กิวเมนต์บรรทัดคําสั่ง และบริบทเลคเฮาส์ แม้ว่า Spark Migration Assistant จะจัดการการโยกย้าย SJD โดยอัตโนมัติ แต่ความแตกต่างที่สําคัญระหว่าง Synapse และ Fabric SJD จําเป็นต้องได้รับการดูแล
ความแตกต่างที่สําคัญระหว่าง Synapse และ Fabric SJDs
จําเป็นต้องมีบริบทของเลคเฮาส์ ใน Fabric SJD ทุกแห่งต้องมีเลคเฮาส์อย่างน้อยหนึ่งแห่งที่เกี่ยวข้อง เลคเฮาส์นี้ทําหน้าที่เป็นระบบไฟล์เริ่มต้นสําหรับรันไทม์ Spark โค้ดใดๆ ที่ใช้เส้นทางสัมพัทธ์จะอ่านและเขียนจากเลคเฮาส์เริ่มต้น ใน Synapse SJD ใช้ที่เก็บข้อมูลเริ่มต้นของพื้นที่ทํางาน (ADLS Gen2) เป็นระบบไฟล์เริ่มต้น
ภาษาที่รองรับ Fabric รองรับ PySpark (Python), Spark (Scala/Java) และ SparkR .NET for Spark (C#/F#) ไม่รองรับใน Fabric คุณต้องเขียนปริมาณงานเหล่านี้ใหม่ใน Python หรือ Scala ก่อนการย้ายข้อมูล
นโยบายการลองอีกครั้ง Fabric SJD รองรับนโยบายการลองใหม่ในตัว เช่น การลองใหม่สูงสุดและช่วงเวลาการลองใหม่ คุณลักษณะนี้มีประโยชน์สําหรับงาน Spark Structured Streaming ที่ต้องเรียกใช้อย่างไม่มีกําหนด
การผูกมัดสภาพแวดล้อม ใน Synapse SJD จะผูกกับพูล Spark ใน Fabric SJD จะผูกกับรายการสภาพแวดล้อม ซึ่งประกอบด้วยการกําหนดค่าพูล ไลบรารี และคุณสมบัติของ Spark Migration Assistant จะแมปการอ้างอิงพูล Synapse ไปยังรายการสภาพแวดล้อมใน Fabric โดยอัตโนมัติ
การตั้งเวลา Fabric SJD มีการจัดกําหนดการในตัว (Settings>Schedule) โดยไม่ต้องใช้ไปป์ไลน์แยกต่างหาก ใน Synapse การจัดกําหนดการ SJD ต้องใช้ไปป์ไลน์ที่มีกิจกรรม Spark Job หากคุณมีไปป์ไลน์ Synapse ที่ทริกเกอร์เฉพาะ SJD ให้พิจารณาใช้การตั้งเวลา SJD ในตัวของ Fabric แทนการย้ายไปป์ไลน์
นําเข้า/ส่งออก Synapse รองรับการนําเข้าและส่งออก JSON ตาม UI สําหรับ SJD Fabric ไม่รองรับการนําเข้าหรือส่งออก UI ใช้ Spark Migration Assistant หรือ Fabric REST API เพื่อสร้างหรืออัปเดต SJD โดยทางโปรแกรม
รีแฟคเตอร์รหัส SJD
รูปแบบการปรับโครงสร้างโค้ดเดียวกันในบทความนี้ใช้กับไฟล์หลักของ SJD การเปลี่ยนแปลงแบ่งออกเป็นสองประเภท
การเปลี่ยนแปลงซอร์สโค้ด (ภายใน .py, .jar, หรือ .R ไฟล์หลัก):
- แทนที่
mssparkutilsด้วยnotebookutilsสําหรับการทํางานของข้อมูลประจําตัวและระบบไฟล์ - อัปเดตเส้นทางไฟล์ฮาร์ดโค้ดในโค้ดเป็นเส้นทาง OneLake
abfss://หรือเส้นทางทางลัดเมื่อจําเป็น SJD ที่ใช้เฉพาะเส้นทางสัมพัทธ์กับเลคเฮาส์เริ่มต้นอาจไม่จําเป็นต้องมีการเปลี่ยนแปลง - แทนที่การอ้างอิงบริการที่เชื่อมโยงในโค้ดด้วยข้อมูลลับของ Key Vault หรือการเชื่อมต่อ Fabric
Note
การเชื่อมต่อ DMTS ยังไม่ได้รับการสนับสนุนในข้อกําหนดงาน Fabric Spark (ได้รับการสนับสนุนในสมุดบันทึกเท่านั้น) หากรหัส SJD ของคุณใช้ DMTS ให้ปรับโครงสร้างใหม่เพื่อใช้การตรวจสอบสิทธิ์ปลายทางโดยตรง
การเปลี่ยนแปลงการกําหนดค่า SJD (ในการตั้งค่ารายการ SJD Fabric):
- ตรวจสอบว่าเส้นทาง ADLS Gen2 ที่อ้างอิงโดยไฟล์คําจํากัดความหลักยังคงสามารถเข้าถึงได้จากพื้นที่ทํางาน Fabric หากไฟล์ถูกเก็บไว้ในพื้นที่ทํางาน Synapse - ที่เก็บข้อมูลภายใน ให้อัปโหลดอีกครั้งไปยัง Fabric SJD หรือย้ายไปยังตําแหน่ง ADLS Gen2 ที่เข้าถึงได้
- ตรวจสอบว่าไฟล์อ้างอิง (
.py,.R,.jar) ทั้งหมดสามารถเข้าถึงได้หลังจากการย้ายข้อมูล อัปโหลดไฟล์ใดๆ ที่จัดเก็บไว้ในที่เก็บข้อมูลภายในพื้นที่ทํางาน Synapse อีกครั้ง - หากอาร์กิวเมนต์บรรทัดคําสั่งมีเส้นทางเฉพาะ Synapse หรือสตริงการเชื่อมต่อ ให้อัปเดตเป็น Fabric ที่เทียบเท่า
โยกย้ายพูล สภาพแวดล้อม และไลบรารี
หลังจากย้ายสมุดบันทึกและข้อกําหนดงาน Spark แล้ว คุณต้องตัดสินใจเกี่ยวกับกลยุทธ์พูลและสภาพแวดล้อม ส่วนนี้อธิบายว่าเมื่อใดที่คุณสามารถใช้ Fabric Starter Pools (แทนการโยกย้าย) เมื่อใดควรสร้างสภาพแวดล้อมแบบกําหนดเอง และวิธีการระบุและแก้ไขช่องว่างความเข้ากันได้ของไลบรารี
การโยกย้าย Spark Pool
Fabric Starter พูล
Fabric Starter Pools ให้การเริ่มต้นเซสชัน Spark ระดับวินาที ซึ่งเป็นการปรับปรุงที่สําคัญเหนือพูล Synapse Spark ซึ่งต้องใช้เวลานานหลายนาทีในการเริ่มต้นคลัสเตอร์ Starter Pools พร้อมใช้งานจากแพลตฟอร์มและไม่ต้องกําหนดค่า
เคล็ดลับ
หากพูล Synapse Spark ของคุณไม่มีการกําหนดค่าแบบกําหนดเอง ไม่มีไลบรารีแบบกําหนดเอง และไม่มีข้อกําหนดขนาดโหนดเฉพาะนอกเหนือจากขนาดกลาง ให้สมุดบันทึกและข้อกําหนดงาน Spark ของคุณใช้การตั้งค่า Starter Pool เริ่มต้นของพื้นที่ทํางาน Fabric แทน วิธีนี้ช่วยให้คุณมีเวลาเริ่มต้นที่เร็วที่สุดและไม่มีค่าใช้จ่ายในการจัดการพูล สร้างพูลหรือสภาพแวดล้อมแบบกําหนดเองเฉพาะเมื่อคุณมีความต้องการเฉพาะเท่านั้น
เมื่อใดที่ควรสร้างพูลหรือสภาพแวดล้อมแบบกําหนดเอง
สร้างพูลและ/หรือสภาพแวดล้อมแบบกําหนดเองของ Fabric เฉพาะเมื่อปริมาณงานของคุณต้องการ:
- ขนาดโหนดเฉพาะ (เล็ก ใหญ่ XLarge, XXLarge) แตกต่างจาก สื่อ ดีฟอลต์
- ไลบรารีแบบกําหนดเอง (แพ็คเกจ pip, แพ็คเกจ conda, JAR, ล้อ) ที่ไม่ได้อยู่ในรันไทม์ในตัวของ Fabric
- คุณสมบัติ Spark แบบกําหนดเอง (ตัวอย่างเช่น
spark.sql.shuffle.partitions, )spark.executor.memoryนอกเหนือจากค่าเริ่มต้น - Managed Private Endpoints สําหรับการเข้าถึงแหล่งข้อมูลส่วนตัว (ต้องใช้ Custom Pools)
- เวอร์ชันรันไทม์ Spark เฉพาะที่แตกต่างจากค่าเริ่มต้นของพื้นที่ทํางาน
การกําหนดค่าและการโยกย้ายไลบรารี
ย้ายการตั้งค่าและไลบรารีของ Spark ไปยังรายการสภาพแวดล้อมใน Fabric
สําหรับขั้นตอนโดยละเอียดในการย้ายไลบรารีไปยังรายการสภาพแวดล้อม ดูที่ ย้ายไลบรารี Spark จาก Azure Synapse ไปยัง Fabric
ส่งออกการกําหนดค่า Spark ใน Synapse Studio ไปที่ Manage>Spark Pools>เลือกพูล >Configurations + Libraries> ดาวน์โหลดเป็น
.yml/.conf/.jsonนําเข้าไปยังสภาพแวดล้อม ใน Fabric ให้สร้างไอเท็มสิ่งแวดล้อม ไปที่ Spark Compute>> Spark อัปโหลดไฟล์ที่
Sparkproperties.ymlส่งออกย้ายไลบรารี สําหรับไลบรารีระดับพูล ให้อัปโหลดแพ็กเกจ (ล้อ, JAR, tar) ไปยังส่วนไลบรารีของสภาพแวดล้อม สําหรับแพ็กเกจ PyPI/Conda ให้เพิ่มเข้าไปในการกําหนดค่าห้องสมุดสาธารณะของสภาพแวดล้อม
Important
การตั้งค่าไลบรารีระดับพื้นที่ทํางานใน Fabric เลิกใช้แล้ว ย้ายไลบรารีทั้งหมดไปยังรายการสภาพแวดล้อม การย้ายข้อมูลจะลบการตั้งค่าระดับพื้นที่ทํางานที่มีอยู่อย่างถาวร—ดาวน์โหลดการตั้งค่าทั้งหมดก่อนเปิดใช้งานสภาพแวดล้อม
ความเข้ากันได้ของไลบรารี: Synapse กับ Fabric
Fabric Runtime 1.3 (Spark 3.5) มาพร้อมกับไลบรารี Python 223 ตัว, Java/Scala 183 รายการ และไลบรารี R 135 ไลบรารีในตัว ไลบรารี Synapse ส่วนใหญ่มีอยู่ใน Fabric แต่มีช่องว่างที่อาจทําให้เกิดความล้มเหลวในรันไทม์หากไม่ได้รับการแก้ไขก่อนการย้ายข้อมูล
เมื่อต้องการระบุว่าสมุดบันทึกของคุณใช้ไลบรารีใดจริง ให้เรียกใช้การตรวจสอบเหล่านี้ก่อนที่จะตรวจทานตารางช่องว่าง:
- สมุดบันทึก Python: ค้นหาคําสั่ง
importและfrom ... importในไฟล์.py/.ipynbทั้งหมด -
Java/Scala notebooks และ SJDs: ค้นหาคําสั่ง
importและพิกัด Maven มองหาแพ็คเกจ เช่นcom.azure.cosmos.sparkหรือcom.microsoft.kusto.spark -
ส่งออกรายการการขึ้นต่อกันแบบเต็ม:เรียกใช้
pip freezeในสมุดบันทึก Synapse เปรียบเทียบกับรายการ Fabric Runtime 1.3 เฉพาะไลบรารีที่ปรากฏทั้งในผลลัพธ์ของคุณและpip freezeตารางช่องว่างด้านล่างเท่านั้นที่ต้องดําเนินการ - ไลบรารีที่กําหนดเองระดับพูลและพื้นที่ทํางาน: ใน Synapse Studio ไปที่ จัดการ>Apache Spark Pools> เลือก pool >Packages เพื่อดูไลบรารีที่กําหนดเองที่ต้องการอัปโหลดใหม่ไปยังรายการสภาพแวดล้อม
ไลบรารี Python หายไปจาก Fabric
| ประเภท | ไลบ รา รี | การดำเนินการ |
|---|---|---|
| CUDA / GPU (9 ลิตร) | libcublas, libcufft, libcufile, libcurand, libcusolver, libcusparse, libnpp, libnvfatbin, libnvjitlink, libnvjpeg | ไม่พร้อมใช้งาน - Fabric ไม่รองรับพูล GPU ปรับโครงสร้างปริมาณงาน GPU เพื่อใช้ทางเลือกที่ใช้ CPU หรือใช้ Synapse ต่อไป |
| ไคลเอ็นต์ HTTP / API | httpx, httpcore, h11, google-auth, jmespath | ติดตั้งผ่านสภาพแวดล้อม: pip install httpx google-auth jmespath |
| ML / การตีความ | ตีความ ตีความ - หลัก | ติดตั้งผ่านสภาพแวดล้อม: pip install interpret |
| การทําให้เป็นอนุกรมข้อมูล | มาร์ชเมลโล่, jsonpickle, แช่แข็ง, fixedint | ติดตั้งผ่านสภาพแวดล้อมหากต้องการ: pip install marshmallow jsonpickle |
| การบันทึก / การวัดและส่งข้อมูลทางไกล | คล่องแคล่ว-logger, มนุษย์, ห้องสมุด-เมตาดาต้า-หม้อหุงข้าว, แรงกระตุ้น-python-handler | Fluent-Logger: ติดตั้งหากใช้ คนอื่น ๆ เป็นไซแนปส์ภายใน—ไม่น่าจําเป็น |
| ภายใน Jupyter | jupyter-client, jupyter-core, jupyter-ui-poll, jupyterlab-widgets, ipython-pygments-lexers | Fabric จัดการโครงสร้างพื้นฐานของ Jupyter ภายใน ไลบรารีเหล่านี้มักจะไม่จําเป็นในรหัสผู้ใช้ |
| ไลบรารีระบบ / C | libgcc, libstdcxx, libgrpc, libabseil, libexpat, libnsl, libzlib | ลิบระบบระดับต่ํา โดยปกติจะไม่นําเข้าโดยตรง ติดตั้งเฉพาะเมื่อคุณมีส่วนขยาย C ที่ขึ้นอยู่กับส่วนขยายเหล่านั้น |
| ไฟล์ / การทํางานพร้อมกัน | filelock, fsspec, ความสามารถพิเศษ | ติดตั้งผ่านสภาพแวดล้อมหากใช้งาน: pip install filelock fsspec |
ไลบรารี Java/Scala หายไปจาก Fabric
| ไลบรารี | เวอร์ชันไซแนปส์ | การดำเนินการ |
|---|---|---|
| azure-cosmos-analytics-spark | 2.2.5 | ติดตั้งเป็น JAR แบบกําหนดเองในรายการสภาพแวดล้อม หากงาน Spark ของคุณใช้ Cosmos DB analytics connector |
| จูนิต-ดาวพฤหัสบดี-พาราม | 5.5.2 | ไลบรารีแบบทดสอบอย่างเดียว ไม่จําเป็นในสมุดบันทึกการผลิต |
| จูนิท-แพลตฟอร์ม-คอมมอนส์ | 1.5.2 | ไลบรารีแบบทดสอบอย่างเดียว ไม่จําเป็นในสมุดบันทึกการผลิต |
ไลบรารี R
ข้อแตกต่างเพียงอย่างเดียว: Synapse มีแพ็คเกจ lightgbm R (v4.6.0) ซึ่งไม่ได้อยู่ใน Fabric ติดตั้งผ่านสภาพแวดล้อมถ้าจําเป็น Fabric เพิ่ม FabricTelemetry (v1.0.2) ซึ่งเป็น Fabric-internal
ความแตกต่างของเวอร์ชันที่โดดเด่น
ไลบรารี Python 68 ไลบรารีมีอยู่บนทั้งสองแพลตฟอร์ม แต่มีเวอร์ชันต่างกัน ส่วนใหญ่เป็นความแตกต่างของเวอร์ชันเล็กน้อย แต่ 17 มีการกระโดดเวอร์ชันหลักที่อาจส่งผลต่อพฤติกรรม
| ไลบรารี | Fabric เวอร์ชั่น | เวอร์ชันไซแนปส์ | ผลกระทบ |
|---|---|---|---|
| ลิบเอ็กซ์จีบูสต์ | 2.0.3 | 3.0.1 | XGBoost API เปลี่ยนแปลงระหว่าง v2 และ v3 ทดสอบการฝึกอบรมแบบจําลอง/รหัสการคาดคะเน |
| กระติกน้ํา | 2.2.5 | 3.0.3 | Flask 3.x มีการเปลี่ยนแปลงที่ทําลาย หากให้บริการ Flask API จากโน้ตบุ๊ก ให้ทดสอบอย่างละเอียด |
| แอลเอ็กซ์มล | 4.9.3 | 5.3.0 | การเปลี่ยนแปลง API เล็กน้อย ทดสอบเวิร์กโฟลว์การแยกวิเคราะห์ XML |
| ลิบโปรโตบูฟ | 3.20.3 | 4.25.3 | Protobuf 4.x มีการเปลี่ยนแปลงที่ทําลายสําหรับคําจํากัดความของโปรโตที่กําหนดเอง |
| มาร์กอัปเซฟ | 2.1.3 | 3.0.2 | MarkupSafe 3.x เลิกรองรับ Python 3.7 แต่ API เข้ากันได้ |
| ลิบพีคิว | 12.17 | 17.4 | ไลบรารีไคลเอ็นต์ PostgreSQL การกระโดดเวอร์ชันหลัก — ทดสอบการเชื่อมต่อ DB |
| libgcc-ng / libstdcxx-ng | 11.2.0 | 15.2.0 | รันไทม์ GCC อาจส่งผลต่อความเข้ากันได้ของส่วนขยาย C |
Note
โดยทั่วไป Synapse จะจัดส่งไลบรารีระดับระบบเวอร์ชันใหม่กว่า (GCC, protobuf, libpq) ในขณะที่ Fabric จัดส่งไลบรารีข้อมูล/ML เวอร์ชันใหม่กว่า (แพ็คเกจ Python โดยรวมมากขึ้น) ถ้าคุณต้องการเวอร์ชันเฉพาะ ให้ปักหมุดไว้ในการตั้งค่ารายการสิ่งแวดล้อมของคุณ
เคล็ดลับ
ตรวจสอบความเข้ากันได้อย่างรวดเร็ว: ส่งออกไลบรารีของพูล Synapse ของคุณ (pip freeze), เปรียบเทียบกับ manifest ของ Fabric Runtime 1.3 และติดตั้งไลบรารีที่ขาดหายไปในรายการสภาพแวดล้อมของคุณก่อนเรียกใช้โน้ตบุ๊กที่ย้ายมา สําหรับการเปรียบเทียบแบบบรรทัดต่อบรรทัดของไลบรารีและเวอร์ชันที่มีอยู่แล้วภายในทุกรายการระหว่างรันไทม์ Fabric และ Synapse Spark โปรดดูที่เก็บ GitHub microsoft/synapse-spark-runtime