แชร์ผ่าน


กลไกการดําเนินการแบบเนทีฟสําหรับ 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

เปิดใช้งานในระดับสภาพแวดล้อม

เพื่อให้แน่ใจว่าการปรับปรุงประสิทธิภาพการทํางานสม่ําเสมอ ให้เปิดใช้งานกลไกการดําเนินการแบบดั้งเดิมทั่วทั้งงานและสมุดบันทึกทั้งหมดที่เกี่ยวข้องกับสภาพแวดล้อมของคุณ:

  1. นําทางไปยังการตั้งค่าสภาพแวดล้อมของคุณ

  2. ไปยัง คุณสมบัติ Spark

  3. กรอกข้อมูลในเขตข้อมูล บนหน้าจอคุณสมบัติ 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

สกรีนช็อตแสดงวิธีการตรวจสอบการแสดงภาพ DAG ที่ลงท้ายด้วยตัวแปลงส่วนต่อท้าย

อธิบาย 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ชนิดข้อมูลสอดคล้องกัน และปรับปรุงประสิทธิภาพการทํางาน

หมายเหตุ

ขณะนี้กลไกการดําเนินการแบบดั้งเดิมอยู่ในการแสดงตัวอย่างและข้อมูลเชิงลึกของคุณมีความสําคัญต่อเรา เราขอเชิญคุณแชร์คําติชมของคุณและผลลัพธ์ของการประเมินของคุณโดยตรงกับทีมผลิตภัณฑ์ของเรา โปรดกรอก แบบฟอร์มคําติชม เราหวังว่าจะได้รับการป้อนข้อมูลที่มีคุณค่าของคุณและมีความกระตือรือร้นที่จะพูดคุยเกี่ยวกับข้อค้นพบของคุณในรายละเอียด