MapReduce มีอะไรมากกว่าแค่การแบ่งและพิชิตหรือไม่?


26

การแบ่งปัญหาเป็นปัญหาเล็ก ๆ จนกระทั่งแต่ละปัญหาสามารถแก้ไขได้อย่างอิสระจากนั้นทำการรวมคำถามเหล่านั้นเพื่อตอบคำถามเดิมซึ่งเรียกว่าเทคนิคการออกแบบขั้นตอนวิธีการหารและพิชิต [ดู: รู้เบื้องต้นเกี่ยวกับอัลกอริทึมโดย CLR]

เมื่อเร็ว ๆ นี้วิธีการนี้ในการแก้ปัญหาการคำนวณโดยเฉพาะในโดเมนของชุดข้อมูลขนาดใหญ่มากถูกเรียกว่าMapReduceแทนที่จะแบ่งและพิชิต

คำถามของฉันมีดังต่อไปนี้: MapReduce มีอะไรมากกว่ากรอบกรรมสิทธิ์ที่ต้องอาศัยวิธีการแบ่งและพิชิตหรือมีรายละเอียดที่ทำให้เป็นเอกลักษณ์ในบางแง่มุมหรือไม่?


หารและพิชิตเป็นคลาสของอัลกอริทึม MapReduce เป็นตัวอย่างหนึ่งของคลาสนั้น
Martin Spamer

คำตอบ:


28

หากคุณถามเกี่ยวกับสถาปัตยกรรม MapReduce มันเป็นเพียงเทคนิคการแบ่งและพิชิต อย่างไรก็ตามสถาปัตยกรรม MapReduce ที่มีประโยชน์ใด ๆ จะมีภูเขาของโครงสร้างพื้นฐานอื่น ๆ เพื่อให้ "แบ่ง", "ยึดครอง" ได้อย่างมีประสิทธิภาพและในที่สุดก็ "ลด" ชุดปัญหา ด้วยการปรับใช้ MapReduce ขนาดใหญ่ (1000 โหนดการคำนวณ) ขั้นตอนเหล่านี้เพื่อแบ่งพาร์ติชันงานคำนวณบางสิ่งจากนั้นในที่สุดการรวบรวมผลลัพธ์ทั้งหมดจึงไม่ใช่เรื่องเล็กน้อย สิ่งต่างๆเช่นการทำโหลดบาลานซ์การตรวจจับโหนดที่ไม่ทำงานการบันทึกสถานะชั่วคราว (สำหรับปัญหาที่รันนาน) นั้นเป็นปัญหาที่ยาก


1
“ การแบ่งอย่างมีประสิทธิภาพ“” เพื่อพิชิต” และสุดท้าย“ ลด” ปัญหา” - นี่เป็นการเข้าใจผิด: ขั้นตอน“ แผนที่” ไม่ต้องการตัวแก้ปัญหา D&C (เนื่องจากข้อมูลมีความเป็นอิสระอย่างเคร่งครัด) คุณสามารถแจกจ่ายชิ้น ทำงานโดยใช้ตัวกำหนดตารางเวลาบางชนิด ขั้นตอนการลดต้องใช้ D&C
Konrad Rudolph

4
คำว่า "just" ทำให้เข้าใจผิดในบริบทนี้

ตามที่ระบุไว้คำตอบนี้ไม่เพียง แต่ทำให้เข้าใจผิด แต่เป็นเท็จอย่างสมบูรณ์ MapReduce ไม่แน่นอน"เป็นเพียงเทคนิคการหารและพิชิต"
Jerry Coffin

10

MapReduce เป็นกรอบการทำงานสำหรับอัลกอริธึมการหารและการพิชิตในวิธีที่ปรับขนาดได้อย่างมากโดยการกระจายหน่วยของการทำงานไปยังโหนดในคลัสเตอร์ขนาดใหญ่โดยพลการของคอมพิวเตอร์โดยอัตโนมัติและจัดการความล้มเหลวของแต่ละโหนดโดยอัตโนมัติ ไปยังโหนดอื่น

มันไม่ใช่แนวคิดที่ซับซ้อน แต่เป็นโครงสร้างพื้นฐานที่มีประโยชน์มาก


10

MapReduce เบี่ยงเบนจากการแบ่งและพิชิตระบบส่วนใหญ่ในลักษณะพื้นฐานที่ค่อนข้างเป็นธรรม แต่สิ่งหนึ่งที่เรียบง่ายจนหลายคนเกือบคิดถึงมัน อัจฉริยะที่แท้จริงของมันคือการติดแท็กผลลัพธ์ระดับกลาง

ในระบบทั่วไป (ก่อนหน้านี้) แบ่งและพิชิตระบบคุณแบ่งงานตามลำดับดำเนินการแพ็กเก็ตงานแบบขนานแล้วรวมผลลัพธ์จากงานนั้นเข้าด้วยกันอีกครั้ง

ใน MapReduce คุณแบ่งการทำงานตามลำดับดำเนินการแพ็กเก็ตงานแบบขนานและติดแท็กผลลัพธ์เพื่อระบุผลลัพธ์ที่จะไปพร้อมกับผลลัพธ์อื่น จากนั้นการรวมจะเป็นอนุกรมสำหรับผลลัพธ์ทั้งหมดที่มีแท็กเดียวกัน แต่สามารถดำเนินการแบบขนานสำหรับผลลัพธ์ที่มีแท็กต่างกัน

ในระบบก่อนหน้าส่วนใหญ่ขั้นตอนการผสานกลายเป็นปัญหาคอขวดสำหรับทุกคน แต่เป็นงานที่ไม่สำคัญอย่างแท้จริง ด้วย MapReduce มันสามารถยังคงเป็นถ้าลักษณะของงานที่กำหนดว่าการควบรวมทั้งหมดทำได้ลำดับ อย่างไรก็ตามหากงานอนุญาตให้มีการผสานผลลัพธ์ในระดับหนึ่งได้ MapReduce ให้วิธีที่ง่ายในการใช้ประโยชน์จากความเป็นไปได้นั้น ระบบอื่นส่วนใหญ่ทำหนึ่งในสองสิ่ง: ดำเนินการผสานทั้งหมดแบบลำดับเพียงเพราะอาจจำเป็นสำหรับงานบางงานหรือมิฉะนั้นจะกำหนดการผสานแบบขนานสำหรับงานเฉพาะ MapReduce ช่วยให้คุณมีข้อมูลเพียงพอในขั้นตอนการรวมเพื่อกำหนดตารางเวลาให้ขนานโดยอัตโนมัติให้มากที่สุดในขณะที่ยังคงมั่นใจ

โปรดทราบว่าใน MapReduce เป็นนัยที่ว่าทุกขั้นตอนสามารถเรียกซ้ำได้ดังนั้นฉันอาจมีขั้นตอนการแมปเริ่มต้นที่แบ่งงานใหญ่ออกเป็น 5 งานเล็ก ๆ ที่สามารถดำเนินการแบบคู่ขนาน - แต่แต่ละขั้นตอนอาจ (ใน เทิร์น) รับการแม็พกับงานขนานอื่น ๆ ที่มีขนาดเล็กกว่าและอื่น ๆ

สิ่งนี้นำไปสู่โครงสร้างต้นไม้ทั้งในการทำแผนที่และด้านการลดขนาดเพื่อแบ่งงานใหญ่ออกเป็นชิ้นเล็กชิ้นน้อยอย่างรวดเร็วเพื่อใช้ประโยชน์จากเครื่องจักรจำนวนมาก


7

MapReduce ไม่ได้เป็นเพียงแค่เทคนิคการหารและการพิชิตเท่านั้น

ในขั้นตอนการทำแผนที่คุณสามารถและต้องการทำความสัมพันธ์แบบหนึ่งต่อหลายคนและบ่อยครั้ง ดังนั้นคุณไม่ได้แบ่งเป็นกรณี ๆ

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

การดำเนินการลดเป็นประเภทของการผสาน ซึ่งอาจถือได้ว่าเป็นการพิชิต แต่ในทางปฏิบัติมีแนวโน้มที่จะ "ปล่อยข้อมูลเพื่อการใช้งานในภายหลัง" หรือ "บันทึกข้อมูลในแหล่งข้อมูล" (หมายเหตุหากคุณมีชุดข้อมูลขนาดใหญ่คุณต้องการให้ทุกอย่างกระจายอย่างแท้จริงรวมถึงอินพุตและผลลัพธ์สุดท้ายดังนั้นที่เก็บคีย์ / ค่าแบบกระจายจึงเหมาะสมสำหรับทั้งสถานที่รับอินพุตและจัดเก็บเอาต์พุต)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.