แชร์ผ่าน


กลไกการดําเนินการแบบเนทีฟสําหรับ Fabric Spark

กลไกการดําเนินการแบบดั้งเดิมคือการเพิ่มประสิทธิภาพแบบใหม่สําหรับการดําเนินการงาน Apache Spark ใน Microsoft Fabric กลไกแบบเวกเตอร์นี้ปรับประสิทธิภาพและประสิทธิภาพของคิวรี Spark ของคุณให้เหมาะสมโดยการเรียกใช้โดยตรงบนโครงสร้างพื้นฐานของเลคเฮ้าส์ของคุณ การรวมที่ราบรื่นของเครื่องยนต์หมายความว่าไม่จําเป็นต้องแก้ไขรหัสและหลีกเลี่ยงการล็อคผู้จัดจําหน่าย รองรับ Apache Spark API และเข้ากันได้กับ Runtime 1.3 (Apache Spark 3.5) และทํางานกับทั้งรูปแบบ Parquet และ Delta ได้ โดยไม่คํานึงถึงตําแหน่งที่ตั้งของข้อมูลของคุณภายใน OneLake หรือถ้าคุณเข้าถึงข้อมูลผ่านทางลัด กลไกการดําเนินการแบบดั้งเดิมจะเพิ่มประสิทธิภาพและประสิทธิภาพสูงสุด

กลไกการดําเนินการแบบดั้งเดิมช่วยยกระดับประสิทธิภาพคิวรีได้อย่างมากในขณะที่ลดค่าใช้จ่ายในการดําเนินงาน มอบการปรับปรุงความเร็วที่น่าทึ่ง ซึ่งบรรลุประสิทธิภาพที่เร็วขึ้นถึงสี่เท่าเมื่อเทียบกับ OSS (ซอฟต์แวร์โอเพนซอร์ส) แบบเดิม Spark ซึ่งผ่านการตรวจสอบโดยเกณฑ์มาตรฐาน TPC-DS 1 TB กลไกจัดการอย่างเหมาะสมในการจัดการสถานการณ์การประมวลผลข้อมูลที่หลากหลาย ตั้งแต่การนําเข้าข้อมูลประจํา ชุดงาน และ 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 เพื่อค้นหาคิวรีที่คุณต้องการตรวจสอบ เมื่อต้องการเข้าถึง UI ของเว็บ Spark ให้นําทางไปยังข้อกําหนดงาน Spark ของคุณและเรียกใช้งาน จากแท็บ Runs เลือกแท็บ ... ถัดจาก ชื่อแอปพลิเคชันของ และเลือก เปิด UI ของเว็บ Spark คุณยังสามารถเข้าถึง Spark UI ได้จากแท็บ Monitor ในพื้นที่ทํางาน เลือกสมุดบันทึกหรือไปป์ไลน์ จากหน้าการตรวจสอบ มีลิงก์โดยตรงไปยัง Spark UI ของ สําหรับงานที่ใช้งานอยู่

สกรีนช็อตที่แสดงวิธีการนําทางไปยัง UI ของเว็บ Spark

ในแผนคิวรีที่แสดงภายในอินเทอร์เฟซ Spark UI ให้ค้นหาชื่อโหนดใด ๆ ที่ลงท้ายด้วยคําต่อท้าย Transformer, *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'เป็นโดยที่ order_dateDATETIME และสตริงถูกDATEแปลงค่าorder_dateอย่างชัดเจนเพื่อให้แน่ใจว่าDATEชนิดข้อมูลสอดคล้องกัน และปรับปรุงประสิทธิภาพการทํางาน