กลไกการดําเนินการแบบเนทีฟสําหรับ 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 การเร่งความเร็วดั้งเดิมจะถูกปิดใช้งานในไม่ช้า

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

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

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

  2. ไปยัง การคํานวณ Spark

  3. ไปที่ แท็บเร่ง ความเร็ว

  4. เลือกกล่องที่มี ป้ายชื่อ เปิดใช้งานกลไกจัดการการดําเนินการแบบดั้งเดิม

  5. บันทึกและเผยแพร่ การเปลี่ยนแปลง

    สกรีนช็อตแสดงวิธีการเปิดใช้งานกลไกการดําเนินการดั้งเดิมภายในรายการสภาพแวดล้อม

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

สำคัญ

ก่อนหน้านี้ กลไกการดําเนินการดั้งเดิมถูกเปิดใช้งานผ่านการตั้งค่า 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

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

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