กลไกการดําเนินการแบบเนทีฟสําหรับ Fabric Spark
กลไกการดําเนินการแบบดั้งเดิมคือการเพิ่มประสิทธิภาพแบบใหม่สําหรับการดําเนินการงาน Apache Spark ใน Microsoft Fabric กลไกแบบเวกเตอร์นี้ปรับประสิทธิภาพและประสิทธิภาพของคิวรี Spark ของคุณให้เหมาะสมโดยการเรียกใช้โดยตรงบนโครงสร้างพื้นฐานของเลคเฮ้าส์ของคุณ การรวมที่ราบรื่นของเครื่องยนต์หมายความว่าไม่จําเป็นต้องแก้ไขรหัสและหลีกเลี่ยงการล็อคผู้จัดจําหน่าย รองรับ Apache Spark API และเข้ากันได้กับ Runtime 1.2 (Spark 3.4) และทํางานกับทั้งรูปแบบ 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.2 (Apache Spark 3.4, Delta Lake 2.4)
เปิดใช้งานสําหรับสมุดบันทึกหรือข้อกําหนดงาน Spark
เมื่อต้องการเปิดใช้งานกลไกการดําเนินการแบบดั้งเดิมสําหรับสมุดบันทึกเดี่ยวหรือข้อกําหนดงาน Spark คุณต้องรวมการกําหนดค่าที่จําเป็นที่จุดเริ่มต้นของสคริปต์การดําเนินการของคุณ:
%%configure
{
"conf": {
"spark.native.enabled": "true",
"spark.gluten.enabled": "true",
"spark.shuffle.manager": "org.apache.spark.shuffle.sort.ColumnarShuffleManager"
}
}
สําหรับสมุดบันทึก ให้ใส่คําสั่งการกําหนดค่าที่จําเป็นในเซลล์แรก สําหรับข้อกําหนดงาน Spark ให้รวมการกําหนดค่าไว้ที่ด้านหน้าข้อกําหนดงาน Spark ของคุณ
กลไกการดําเนินการแบบดั้งเดิมถูกรวมเข้ากับกลุ่มแบบกําหนดเอง ซึ่งหมายความว่าการเปิดใช้งานคุณลักษณะนี้เริ่มต้นเซสชันใหม่ โดยทั่วไปแล้วจะใช้เวลาถึงสองนาทีในการเริ่มต้น
สำคัญ
การกําหนดค่าของกลไกการดําเนินการแบบดั้งเดิมจะต้องทําก่อนที่จะเริ่มต้นเซสชัน Spark หลังจากเริ่มต้น spark.shuffle.manager
เซสชัน Spark การตั้งค่าจะไม่สามารถเปลี่ยนแปลงได้และไม่สามารถเปลี่ยนแปลงได้ ตรวจสอบให้แน่ใจว่าการกําหนดค่าเหล่านี้ได้รับการตั้งค่าภายใน %%configure
บล็อกในสมุดบันทึกหรือในตัวสร้างเซสชัน Spark สําหรับข้อกําหนดงาน Spark
เปิดใช้งานในระดับสภาพแวดล้อม
เพื่อให้แน่ใจว่าการปรับปรุงประสิทธิภาพการทํางานสม่ําเสมอ ให้เปิดใช้งานกลไกการดําเนินการแบบดั้งเดิมทั่วทั้งงานและสมุดบันทึกทั้งหมดที่เกี่ยวข้องกับสภาพแวดล้อมของคุณ:
นําทางไปยังการตั้งค่าสภาพแวดล้อมของคุณ
ไปยัง คุณสมบัติ Spark
กรอกข้อมูลในเขตข้อมูล บนหน้าจอคุณสมบัติ Spark ดังที่แสดงในรูปต่อไปนี้
คุณสมบัติ | ค่า |
---|---|
spark.native.enabled | จริง |
spark.gluten.enabled | จริง |
spark.shuffle.manager | org.apache.spark.shuffle.sort.ColumnarShuffleManager |
เมื่อเปิดใช้งานในระดับสภาพแวดล้อม งานและสมุดบันทึกที่ตามมาทั้งหมดจะสืบทอดการตั้งค่า การรับช่วงนี้ช่วยให้มั่นใจได้ว่าเซสชันใหม่หรือทรัพยากรใด ๆ ที่สร้างขึ้นในสภาพแวดล้อมจะได้รับประโยชน์โดยอัตโนมัติจากความสามารถในการดําเนินการที่ได้รับการปรับปรุง
ควบคุมระดับคิวรี
กลไกการเปิดใช้งานกลไกการดําเนินการดั้งเดิมที่ระดับผู้เช่า พื้นที่ทํางาน และสภาพแวดล้อม รวมกับ UI อย่างราบรื่นอยู่ระหว่างการพัฒนาที่ใช้งานอยู่ ในระหว่างนี้ คุณสามารถปิดใช้งานกลไกการดําเนินการดั้งเดิมสําหรับคิวรีเฉพาะ โดยเฉพาะอย่างยิ่งถ้าเกี่ยวข้องกับตัวดําเนินการที่ไม่ได้รับการสนับสนุนในขณะนี้ (ดู ข้อจํากัด) เมื่อต้องการปิดใช้งาน ให้ตั้งค่า Spark spark.gluten.enabled เป็น false สําหรับเซลล์เฉพาะที่มีคิวรีของคุณ
%%sql
SET spark.native.enabled=FALSE;
SET spark.gluten.enabled=FALSE;
หลังจากดําเนินการคิวรีที่กลไกการดําเนินการดั้งเดิมถูกปิดใช้งาน คุณต้องเปิดใช้งานอีกครั้งสําหรับเซลล์ที่ตามมาโดยการตั้งค่า spark.gluten.enabled เป็น true ขั้นตอนนี้มีความจําเป็นเนื่องจาก Spark จะดําเนินการกับเซลล์โค้ดตามลําดับ
%%sql
SET spark.native.enabled=TRUE;
SET spark.gluten.enabled=TRUE;
ระบุการดําเนินการที่ดําเนินการโดยกลไกจัดการ
มีหลายวิธีในการตรวจสอบว่าตัวดําเนินการในงาน Apache Spark ของคุณได้รับการประมวลผลโดยใช้กลไกการดําเนินการดั้งเดิมหรือไม่
Spark UI และเซิร์ฟเวอร์ประวัติ Spark
เข้าถึงเซิร์ฟเวอร์ประวัติ Spark UI หรือ Spark เพื่อค้นหาคิวรีที่คุณต้องการตรวจสอบ ในแผนคิวรีที่แสดงภายในอินเทอร์เฟซ ให้ค้นหาชื่อโหนดใด ๆ ที่ลงท้ายด้วยตัวแปลงส่วนต่อท้าย คําต่อท้ายระบุว่ากลไกจัดการการดําเนินการแบบดั้งเดิมจะดําเนินการ ตัวอย่างเช่น โหนดอาจติดป้ายชื่อว่า RollUpHashAggregateTransformer, ProjectExecTransformer, BroadcastHashJoinExecTransformer, ShuffledHashJoinExecTransformer หรือ BroadcastNestedLoopJoinExecTransformer
อธิบาย DataFrame
อีกวิธีหนึ่งคือ คุณสามารถดําเนินการ df.explain()
คําสั่งในสมุดบันทึกของคุณเพื่อดูแผนการดําเนินการ ภายในผลลัพธ์ ให้ค้นหาคําต่อท้าย Transformer เดียวกัน วิธีนี้ให้วิธีการที่รวดเร็วเพื่อยืนยันว่าการดําเนินการที่เฉพาะเจาะจงได้รับการจัดการโดยกลไกจัดการการดําเนินการดั้งเดิมหรือไม่
กลไกที่ใช้แสดงแทน
ในบางอินสแตนซ์ กลไกการดําเนินการดั้งเดิมอาจไม่สามารถดําเนินการคิวรีได้เนื่องจากเหตุผลเช่นคุณลักษณะที่ไม่ได้รับการรองรับ ในกรณีเหล่านี้ การดําเนินการจะกลับสู่กลไก Spark แบบดั้งเดิม กลไกที่ใช้แสดงแทนนี้ช่วยให้แน่ใจว่าเวิร์กโฟลว์ของคุณไม่หยุดชะงัก
ข้อจำกัด
ในขณะที่กลไกการดําเนินการแบบดั้งเดิมช่วยปรับปรุงประสิทธิภาพการทํางานสําหรับงาน Apache Spark ให้สังเกตข้อจํากัดปัจจุบัน
- กลไกจัดการไม่รองรับการเขียนพาร์ติชันสําหรับตาราง Delta การดําเนินการเฉพาะของ 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
ชนิดข้อมูลสอดคล้องกัน และปรับปรุงประสิทธิภาพการทํางาน
หมายเหตุ
ขณะนี้กลไกการดําเนินการแบบดั้งเดิมอยู่ในการแสดงตัวอย่างและข้อมูลเชิงลึกของคุณมีความสําคัญต่อเรา เราขอเชิญคุณแชร์คําติชมของคุณและผลลัพธ์ของการประเมินของคุณโดยตรงกับทีมผลิตภัณฑ์ของเรา โปรดกรอก แบบฟอร์มคําติชม เราหวังว่าจะได้รับการป้อนข้อมูลที่มีคุณค่าของคุณและมีความกระตือรือร้นที่จะพูดคุยเกี่ยวกับข้อค้นพบของคุณในรายละเอียด
เนื้อหาที่เกี่ยวข้อง
คำติชม
https://aka.ms/ContentUserFeedback
เร็วๆ นี้: ตลอดปี 2024 เราจะขจัดปัญหา GitHub เพื่อเป็นกลไกคำติชมสำหรับเนื้อหา และแทนที่ด้วยระบบคำติชมใหม่ สำหรับข้อมูลเพิ่มเติม ให้ดู:ส่งและดูข้อคิดเห็นสำหรับ