กลไกการดําเนินการแบบเนทีฟสําหรับ Fabric Spark
กลไกการดําเนินการแบบดั้งเดิมคือการเพิ่มประสิทธิภาพแบบใหม่สําหรับการดําเนินการงาน Apache Spark ใน Microsoft Fabric กลไกแบบเวกเตอร์นี้ปรับประสิทธิภาพและประสิทธิภาพของคิวรี Spark ของคุณให้เหมาะสมโดยการเรียกใช้โดยตรงบนโครงสร้างพื้นฐานของเลคเฮ้าส์ของคุณ การรวมที่ราบรื่นของเครื่องยนต์หมายความว่าไม่จําเป็นต้องแก้ไขรหัสและหลีกเลี่ยงการล็อคผู้จัดจําหน่าย รองรับ Apache Spark API และเข้ากันได้กับ Runtime 1.3 (Apache Spark 3.5) และทํางานกับทั้งรูปแบบ Parquet และ Delta ได้ โดยไม่คํานึงถึงตําแหน่งที่ตั้งของข้อมูลของคุณภายใน OneLake หรือถ้าคุณเข้าถึงข้อมูลผ่านทางลัด กลไกการดําเนินการแบบดั้งเดิมจะเพิ่มประสิทธิภาพและประสิทธิภาพสูงสุด
กลไกการดําเนินการแบบดั้งเดิมช่วยยกระดับประสิทธิภาพคิวรีได้อย่างมากในขณะที่ลดค่าใช้จ่ายในการดําเนินงาน มอบการปรับปรุงความเร็วที่น่าทึ่งซึ่งบรรลุประสิทธิภาพที่เร็วขึ้นถึงสี่เท่าเมื่อเทียบกับ OSS (ซอฟต์แวร์โอเพนซอร์ส (Open Source)) Spark แบบเดิมตามที่ตรวจสอบโดยเกณฑ์มาตรฐาน TPC-DS 1TB กลไกจัดการอย่างเหมาะสมในการจัดการสถานการณ์การประมวลผลข้อมูลที่หลากหลาย ตั้งแต่การนําเข้าข้อมูลประจํา ชุดงาน และ ETL (แยก แปลง โหลด) ไปจนถึงการวิเคราะห์วิทยาศาสตร์ข้อมูลที่ซับซ้อนและคิวรีแบบโต้ตอบแบบตอบสนอง ผู้ใช้ได้รับประโยชน์จากเวลาการประมวลผลที่เร่ง ความเร็วที่สูงขึ้น และการใช้ทรัพยากรที่ดีที่สุด
กลไกการดําเนินการแบบเนทีฟนั้นยึดตามส่วนประกอบ OSS หลักสองส่วน: Velox, ไลบรารีการเร่งฐานข้อมูล C++ ที่นําเสนอโดยเมตาและ Apache Gluten (incubating) เลเยอร์กลางที่รับผิดชอบในการถ่ายเอกสารการดําเนินการของกลไก SQL ที่ใช้ JVM ไปยังกลไกดั้งเดิมที่เปิดตัวโดย Intel
หมายเหตุ
ขณะนี้กลไกการดําเนินการแบบดั้งเดิมอยู่ในการแสดงตัวอย่างสาธารณะ สําหรับข้อมูลเพิ่มเติม โปรดดูข้อจํากัดปัจจุบัน เราขอแนะนําให้คุณเปิดใช้งานกลไกจัดการการดําเนินการแบบดั้งเดิมบนปริมาณงานของคุณโดยไม่มีค่าใช้จ่ายเพิ่มเติม คุณจะได้รับประโยชน์จากการทํางานที่รวดเร็วยิ่งขึ้นโดยไม่ต้องจ่ายเพิ่ม - มีประสิทธิภาพมากขึ้นคุณจ่ายน้อยลงสําหรับงานเดียวกัน
เมื่อต้องใช้กลไกจัดการการดําเนินการดั้งเดิม
กลไกการดําเนินการแบบดั้งเดิมเสนอโซลูชันสําหรับการเรียกใช้คิวรีบนชุดข้อมูลขนาดใหญ่ ซึ่งปรับประสิทธิภาพให้เหมาะสมโดยใช้ความสามารถดั้งเดิมของแหล่งข้อมูลต้นแบบ และลดค่าใช้จ่ายที่เกี่ยวข้องกับการเคลื่อนไหวของข้อมูลและการจัดเรียงเป็นอนุกรมในสภาพแวดล้อม Spark แบบดั้งเดิม กลไกจัดการสนับสนุนตัวดําเนินการและชนิดข้อมูลต่าง ๆ รวมถึงการรวมแฮชค่าสะสม การออกอากาศแบบซ้อนกันการรวม (BNLJ) และรูปแบบประทับเวลาอย่างแม่นยํา อย่างไรก็ตามเพื่อให้ได้รับประโยชน์อย่างเต็มที่จากความสามารถของเครื่องยนต์ คุณควรพิจารณากรณีการใช้งานที่เหมาะสมที่สุด:
- กลไกจัดการมีประสิทธิภาพเมื่อทํางานกับข้อมูลในรูปแบบ Parquet และ Delta ซึ่งสามารถประมวลผลได้อย่างสมบูรณ์และมีประสิทธิภาพ
- คิวรีที่เกี่ยวข้องกับการแปลงและการรวมที่สลับซับซ้อนจะได้รับประโยชน์อย่างมากจากการประมวลผลแบบคอลัมน์และความสามารถของเวกเตอร์ของกลไกจัดการ
- การปรับปรุงประสิทธิภาพการทํางานที่โดดเด่นที่สุดในสถานการณ์ที่คิวรีไม่สามารถทริกเกอร์กลไกการแสดงแทนโดยการหลีกเลี่ยงคุณลักษณะหรือนิพจน์ที่ไม่สนับสนุน
- กลไกนี้เหมาะอย่างยิ่งสําหรับคิวรีที่ใช้การคํานวณมากกว่าแบบง่ายหรือ I/O-bound
สําหรับข้อมูลเกี่ยวกับตัวดําเนินการและฟังก์ชันที่ได้รับการสนับสนุนโดยกลไกการดําเนินการดั้งเดิม โปรดดู เอกสารกํากับ Apache Gluten
เปิดใช้งานกลไกการดําเนินการแบบดั้งเดิม
หากต้องการใช้ความสามารถแบบเต็มของกลไกการดําเนินการแบบดั้งเดิมในระหว่างขั้นตอนการแสดงตัวอย่าง จําเป็นต้องมีการกําหนดค่าเฉพาะ ขั้นตอนต่อไปนี้แสดงวิธีการเปิดใช้งานคุณลักษณะนี้สําหรับสมุดบันทึก ข้อกําหนดงาน Spark และสภาพแวดล้อมทั้งหมด
สำคัญ
กลไกการดําเนินการแบบดั้งเดิมสนับสนุนเวอร์ชันรันไทม์ GA ล่าสุดซึ่งเป็น Runtime 1.3 (Apache Spark 3.5, Delta Lake 3.2) ด้วยการเปิดตัวของกลไกการดําเนินการแบบดั้งเดิมในรันไทม์ 1.3 การสนับสนุนเวอร์ชันก่อนหน้า - รันไทม์ 1.2 (Apache Spark 3.4, Delta Lake 2.4) ถูกยกเลิกการใช้งาน เราขอแนะนําให้ลูกค้าทุกรายอัปเกรดเป็น Runtime 1.3 ล่าสุด โปรดทราบว่าถ้าคุณกําลังใช้กลไกการดําเนินการดั้งเดิมบนรันไทม์ 1.2 การเร่งความเร็วดั้งเดิมจะถูกปิดใช้งานในไม่ช้า
เปิดใช้งานในระดับสภาพแวดล้อม
เพื่อให้แน่ใจว่าการปรับปรุงประสิทธิภาพการทํางานสม่ําเสมอ ให้เปิดใช้งานกลไกการดําเนินการแบบดั้งเดิมทั่วทั้งงานและสมุดบันทึกทั้งหมดที่เกี่ยวข้องกับสภาพแวดล้อมของคุณ:
นําทางไปยังการตั้งค่าสภาพแวดล้อมของคุณ
ไปยัง การคํานวณ Spark
ไปที่ แท็บเร่ง ความเร็ว
เลือกกล่องที่มี ป้ายชื่อ เปิดใช้งานกลไกจัดการการดําเนินการแบบดั้งเดิม
บันทึกและเผยแพร่ การเปลี่ยนแปลง
เมื่อเปิดใช้งานในระดับสภาพแวดล้อม งานและสมุดบันทึกที่ตามมาทั้งหมดจะสืบทอดการตั้งค่า การรับช่วงนี้ช่วยให้มั่นใจได้ว่าเซสชันใหม่หรือทรัพยากรใด ๆ ที่สร้างขึ้นในสภาพแวดล้อมจะได้รับประโยชน์โดยอัตโนมัติจากความสามารถในการดําเนินการที่ได้รับการปรับปรุง
สำคัญ
ก่อนหน้านี้ กลไกการดําเนินการดั้งเดิมถูกเปิดใช้งานผ่านการตั้งค่า Spark ภายในการกําหนดค่าสภาพแวดล้อม ด้วยการอัปเดตล่าสุดของเรา (ที่กําลังดําเนินการ) เราได้ทําให้สิ่งนี้ง่ายขึ้นโดยการแนะนําปุ่มสลับในแท็บเร่งความเร็วของการตั้งค่าสภาพแวดล้อม เปิดใช้งานกลไกการดําเนินการแบบดั้งเดิมโดยใช้ตัวสลับใหม่ - เพื่อใช้งานกลไกจัดการการดําเนินการแบบดั้งเดิมต่อไป โปรดไปที่แท็บ Acceleration ในการตั้งค่าสภาพแวดล้อมและเปิดใช้งานผ่านปุ่มสลับ การตั้งค่าการสลับใหม่ใน UI ตอนนี้จะมีความสําคัญมากกว่าการกําหนดค่าคุณสมบัติ Spark ก่อนหน้านี้ ถ้าคุณเคยเปิดใช้งานกลไกการดําเนินการดั้งเดิมผ่านการตั้งค่า Spark กลไกดังกล่าวจะถูกปิดใช้งานจนกว่าจะเปิดใช้งานอีกครั้งผ่านการสลับ UI
เปิดใช้งานสําหรับสมุดบันทึกหรือข้อกําหนดงาน Spark
เมื่อต้องการเปิดใช้งานกลไกการดําเนินการแบบดั้งเดิมสําหรับสมุดบันทึกเดี่ยวหรือข้อกําหนดงาน Spark คุณต้องรวมการกําหนดค่าที่จําเป็นที่จุดเริ่มต้นของสคริปต์การดําเนินการของคุณ:
%%configure
{
"conf": {
"spark.native.enabled": "true",
}
}
สําหรับสมุดบันทึก ให้ใส่คําสั่งการกําหนดค่าที่จําเป็นในเซลล์แรก สําหรับข้อกําหนดงาน Spark ให้รวมการกําหนดค่าไว้ที่ด้านหน้าข้อกําหนดงาน Spark ของคุณ กลไกการดําเนินการแบบดั้งเดิมถูกรวมเข้ากับพูลสด ดังนั้นเมื่อคุณเปิดใช้งานคุณลักษณะจะมีผลทันทีโดยที่คุณไม่จําเป็นต้องเริ่มต้นเซสชันใหม่
สำคัญ
การกําหนดค่าของกลไกการดําเนินการแบบดั้งเดิมจะต้องทําก่อนที่จะเริ่มต้นเซสชัน Spark หลังจากเริ่มต้น spark.shuffle.manager
เซสชัน Spark การตั้งค่าจะไม่สามารถเปลี่ยนแปลงได้และไม่สามารถเปลี่ยนแปลงได้ ตรวจสอบให้แน่ใจว่าการกําหนดค่าเหล่านี้ได้รับการตั้งค่าภายใน %%configure
บล็อกในสมุดบันทึกหรือในตัวสร้างเซสชัน Spark สําหรับข้อกําหนดงาน Spark
ควบคุมระดับคิวรี
กลไกการเปิดใช้งานกลไกการดําเนินการดั้งเดิมที่ระดับผู้เช่า พื้นที่ทํางาน และสภาพแวดล้อม รวมกับ UI อย่างราบรื่นอยู่ระหว่างการพัฒนาที่ใช้งานอยู่ ในระหว่างนี้ คุณสามารถปิดใช้งานกลไกการดําเนินการดั้งเดิมสําหรับคิวรีเฉพาะ โดยเฉพาะอย่างยิ่งถ้าเกี่ยวข้องกับตัวดําเนินการที่ไม่ได้รับการสนับสนุนในขณะนี้ (ดู ข้อจํากัด) เมื่อต้องการปิดใช้งาน ให้ตั้งค่า Spark configuration spark.native.enabled เป็น false สําหรับเซลล์เฉพาะที่มีคิวรีของคุณ
%%sql
SET spark.native.enabled=FALSE;
หลังจากดําเนินการคิวรีที่กลไกการดําเนินการดั้งเดิมถูกปิดใช้งาน คุณต้องเปิดใช้งานอีกครั้งสําหรับเซลล์ที่ตามมาโดยการตั้งค่า spark.native.enabled เป็น true ขั้นตอนนี้มีความจําเป็นเนื่องจาก Spark จะดําเนินการกับเซลล์โค้ดตามลําดับ
%%sql
SET spark.native.enabled=TRUE;
ระบุการดําเนินการที่ดําเนินการโดยกลไกจัดการ
มีหลายวิธีในการตรวจสอบว่าตัวดําเนินการในงาน Apache Spark ของคุณได้รับการประมวลผลโดยใช้กลไกการดําเนินการดั้งเดิมหรือไม่
Spark UI และเซิร์ฟเวอร์ประวัติ Spark
เข้าถึงเซิร์ฟเวอร์ประวัติ Spark UI หรือ Spark เพื่อค้นหาคิวรีที่คุณต้องการตรวจสอบ ในแผนคิวรีที่แสดงภายในอินเทอร์เฟซ ให้ค้นหาชื่อโหนดใด ๆ ที่ลงท้ายด้วยตัวแปลงคําต่อท้าย NativeFileScan หรือ VeloxColumnarToRowExec คําต่อท้ายระบุว่ากลไกจัดการการดําเนินการแบบดั้งเดิมจะดําเนินการ ตัวอย่างเช่น โหนดอาจติดป้ายชื่อว่า RollUpHashAggregateTransformer, ProjectExecTransformer, BroadcastHashJoinExecTransformer, ShuffledHashJoinExecTransformer หรือ BroadcastNestedLoopJoinExecTransformer
อธิบาย DataFrame
อีกวิธีหนึ่งคือ คุณสามารถดําเนินการ df.explain()
คําสั่งในสมุดบันทึกของคุณเพื่อดูแผนการดําเนินการ ภายในผลลัพธ์ ให้ค้นหาคํา ต่อท้าย Transformer, NativeFileScan หรือ VeloxColumnarToRowExec เดียวกัน วิธีนี้ให้วิธีการที่รวดเร็วเพื่อยืนยันว่าการดําเนินการที่เฉพาะเจาะจงได้รับการจัดการโดยกลไกจัดการการดําเนินการดั้งเดิมหรือไม่
กลไกที่ใช้แสดงแทน
ในบางอินสแตนซ์ กลไกการดําเนินการดั้งเดิมอาจไม่สามารถดําเนินการคิวรีได้เนื่องจากเหตุผลเช่นคุณลักษณะที่ไม่ได้รับการรองรับ ในกรณีเหล่านี้ การดําเนินการจะกลับสู่กลไก Spark แบบดั้งเดิม กลไกที่ใช้แสดงแทนอัตโนมัตินี้ช่วยให้แน่ใจว่าเวิร์กโฟลว์ของคุณไม่มีการหยุดชะงัก
ตรวจสอบคิวรีและ DataFrames ที่ดําเนินการโดยกลไกจัดการ
เพื่อให้เข้าใจวิธีการที่กลไกการดําเนินการดั้งเดิมถูกนําไปใช้กับคิวรี SQL และการดําเนินการ DataFrame และเพื่อเจาะลึกลงไปถึงระดับขั้นตอนและตัวดําเนินการ คุณสามารถอ้างอิงถึง Spark UI และ Spark History Server สําหรับรายละเอียดเพิ่มเติมเกี่ยวกับการดําเนินการของกลไกจัดการแบบดั้งเดิม
แท็บกลไกการดําเนินการแบบดั้งเดิม
คุณสามารถนําทางไปยังแท็บ 'Gluten SQL / DataFrame' ใหม่เพื่อดูข้อมูลการสร้าง Gluten และรายละเอียดการดําเนินการคิวรี ตารางคิวรีให้ข้อมูลเชิงลึกเกี่ยวกับจํานวนของโหนดที่ทํางานบนกลไกจัดการดั้งเดิมและที่ถอยกลับไปยัง JVM สําหรับแต่ละคิวรี
กราฟการดําเนินการคิวรี
คุณยังสามารถคลิกที่คําอธิบายคิวรีสําหรับการแสดงภาพแผนการดําเนินการคิวรี Apache Spark ได้ กราฟการดําเนินการมีรายละเอียดการดําเนินการดั้งเดิมในขั้นตอนต่าง ๆ และการดําเนินการที่เกี่ยวข้อง สีพื้นหลังจะแยกความแตกต่างของกลไกการดําเนินการ: สีเขียวแสดงกลไกจัดการการดําเนินการแบบดั้งเดิม ในขณะที่สีน้ําเงินอ่อนแสดงว่าการดําเนินการกําลังทํางานบนกลไกจัดการ JVM เริ่มต้น
ข้อจำกัด
ในขณะที่กลไกการดําเนินการแบบดั้งเดิมช่วยปรับปรุงประสิทธิภาพการทํางานสําหรับงาน Apache Spark ให้สังเกตข้อจํากัดปัจจุบัน
- การดําเนินการเฉพาะของ Delta บางอย่างไม่ได้รับการรองรับ (แต่อย่างที่เรากําลังดําเนินการอยู่) รวมถึงการดําเนินการผสาน การสแกนจุดตรวจสอบ และเวกเตอร์การลบ
- คุณลักษณะและนิพจน์บางอย่างของ Spark ไม่สามารถเข้ากันได้กับกลไกการดําเนินการแบบเนทีฟ เช่น ฟังก์ชันที่ผู้ใช้กําหนดเอง (UDFs) และ
array_contains
ฟังก์ชัน ตลอดจนการสตรีมแบบมีโครงสร้างของ Spark การใช้การดําเนินการหรือฟังก์ชันที่เข้ากันไม่ได้เหล่านี้เป็นส่วนหนึ่งของไลบรารีที่นําเข้าจะทําให้เกิดการย้อนกลับไปยังกลไก Spark - สแกนจากโซลูชันที่เก็บข้อมูลที่ใช้จุดสิ้นสุดส่วนตัวไม่ได้ (ยังเป็นอย่างที่เราทํางานอยู่) ได้รับการสนับสนุน
- กลไกนี้ไม่รองรับโหมด ANSI ดังนั้นจึงมีการค้นหาและเมื่อเปิดใช้งานโหมด ANSI โปรแกรมจะกลับไปเป็น vanilla Spark โดยอัตโนมัติ
เมื่อใช้ตัวกรองวันที่ในคิวรี สิ่งสําคัญคือต้องตรวจสอบให้แน่ใจว่าชนิดข้อมูลทั้งสองด้านของการเปรียบเทียบตรงกันเพื่อหลีกเลี่ยงปัญหาด้านประสิทธิภาพการทํางาน ชนิดข้อมูลที่ไม่ตรงกันอาจไม่เพิ่มการดําเนินการคิวรีและอาจจําเป็นต้องมีการคัดเลือกอย่างชัดเจน ตรวจสอบให้แน่ใจเสมอว่าชนิดข้อมูลทางด้านซ้าย (LHS) และด้านขวา (RHS) ของการเปรียบเทียบเหมือนกัน เนื่องจากประเภทที่ไม่ตรงกันจะไม่ถูกส่งโดยอัตโนมัติเสมอไป ถ้าชนิดไม่ตรงกันเป็นสิ่งที่หลีกเลี่ยงได้ ให้ใช้การคัดเลือกแบบชัดเจนเพื่อให้ตรงกับชนิดข้อมูล เช่นCAST(order_date AS DATE) = '2024-05-20'
คิวรีที่มีชนิดข้อมูลที่ไม่ตรงกันที่จําเป็นต้องทําการคัดเลือกจะไม่เร่งความเร็วโดยกลไกการดําเนินการดั้งเดิม ดังนั้นการทําให้แน่ใจว่าความสอดคล้องของประเภทจึงเป็นสิ่งสําคัญสําหรับการรักษาประสิทธิภาพ ตัวอย่างเช่น แทนที่จะorder_date = '2024-05-20'
เป็นโดยที่ DATETIME
order_date
และสตริงถูกDATE
แปลงค่าorder_date
อย่างชัดเจนเพื่อให้แน่ใจว่าDATE
ชนิดข้อมูลสอดคล้องกัน และปรับปรุงประสิทธิภาพการทํางาน