สมมติว่าสำหรับ Spark ต่อไปนี้มีเพียงหนึ่งงานเท่านั้นที่ทำงานในทุกจุด
สิ่งที่ฉันได้รับจนถึง
นี่คือสิ่งที่ฉันเข้าใจว่าเกิดอะไรขึ้นใน Spark:
- เมื่อ a
SparkContext
ถูกสร้างขึ้นโหนดของผู้ทำงานแต่ละคนจะเริ่มต้นตัวเรียกทำงาน ผู้บริหารเป็นกระบวนการแยก (JVM) ที่เชื่อมต่อกลับไปที่โปรแกรมไดรเวอร์ ผู้บริหารแต่ละคนมี jar ของโปรแกรมควบคุม การออกจากโปรแกรมควบคุมการปิดตัวจัดการการทำงาน ผู้บริหารแต่ละคนสามารถมีพาร์ติชันได้บ้าง - เมื่องานถูกดำเนินการแผนการดำเนินการจะถูกสร้างขึ้นตามกราฟเชื้อสาย
- งานการดำเนินการจะแบ่งออกเป็นขั้นตอนที่ขั้นตอนที่มีการแปลงและการดำเนินการที่อยู่ใกล้เคียง (ในกราฟเชื้อสาย) เป็นจำนวนมาก แต่ไม่มีการสับ ดังนั้นขั้นตอนจะถูกคั่นด้วยการสับ
ฉันเข้าใจ
- งานคือคำสั่งที่ส่งจากไดรเวอร์ไปยังผู้ปฏิบัติการโดยการทำให้วัตถุฟังก์ชั่นเป็นอนุกรม
- ตัวจัดการ deserializes (พร้อมไดร์เวอร์ jar) คำสั่ง (ภารกิจ) และเรียกใช้งานบนพาร์ติชัน
แต่
คำถาม (s)
ฉันจะแบ่งเวทีออกเป็นงานเหล่านั้นได้อย่างไร
โดยเฉพาะ:
- งานนั้นถูกกำหนดโดยการเปลี่ยนแปลงและการกระทำหรืออาจเป็นการเปลี่ยนแปลง / การกระทำหลายอย่างในงานหรือไม่?
- เป็นงานที่กำหนดโดยพาร์ติชัน (เช่นงานหนึ่งงานต่อหนึ่งเวทีต่อพาร์ติชั่น)
- งานจะถูกกำหนดโดยโหนด (เช่นหนึ่งงานต่อขั้นต่อโหนด) หรือไม่?
สิ่งที่ฉันคิด (เฉพาะคำตอบบางส่วนแม้ว่าจะถูก)
ในhttps://0x0fff.com/spark-architecture-shuffleการสับเปลี่ยนจะถูกอธิบายด้วยภาพ
และฉันก็ได้รับความประทับใจว่าเป็นกฎ
แต่ละสเตจแบ่งออกเป็นงาน # number-of-partitions โดยไม่คำนึงถึงจำนวนโหนด
สำหรับภาพแรกของฉันฉันบอกว่าฉันมี 3 งานแผนที่และ 3 งานลด
สำหรับภาพจาก 0x0fff ฉันจะบอกว่ามี 8 งานแผนที่และ 3 ลดงาน (สมมติว่ามีเพียงสามไฟล์สีส้มและสามไฟล์สีเขียวเข้ม)
เปิดคำถามในทุกกรณี
ถูกต้องไหม แต่ถึงแม้ว่าจะถูกต้องแล้วคำถามของฉันยังไม่ได้รับคำตอบทั้งหมดเนื่องจากยังคงเปิดอยู่ไม่ว่าจะเป็นการดำเนินการหลายอย่าง (เช่นหลายแผนที่) ภายในงานเดียวหรือแยกออกเป็นงานเดียวต่อการปฏิบัติงาน
สิ่งที่คนอื่นพูด
ภารกิจใน Spark คืออะไร? ผู้ปฏิบัติงาน Spark ใช้งานไฟล์ jar อย่างไร และApache Scheduler แบ่งไฟล์เป็นอย่างไร? คล้ายกัน แต่ฉันไม่รู้สึกว่าคำถามของฉันได้รับคำตอบที่ชัดเจน