อัลกอริทึมการจัดเรียง MapReduce ทำงานอย่างไร


110

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

สำหรับฉันการเรียงลำดับเพียงแค่การกำหนดตำแหน่งสัมพัทธ์ขององค์ประกอบที่สัมพันธ์กับองค์ประกอบอื่น ๆ ทั้งหมด การเรียงลำดับจึงเกี่ยวข้องกับการเปรียบเทียบ "ทุกอย่าง" กับ "ทุกอย่าง" อัลกอริธึมการเรียงลำดับโดยเฉลี่ยของคุณ (ด่วนฟอง ... ) ทำสิ่งนี้ได้อย่างชาญฉลาด

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

แล้วสิ่งนี้ทำได้อย่างไร? อัลกอริทึมการจัดเรียง MapReduce นี้ทำงานอย่างไร

ขอบคุณที่ช่วยให้ฉันเข้าใจ

คำตอบ:


62

นี่คือรายละเอียดบางส่วนเกี่ยวกับการใช้งาน Hadoop สำหรับ Terasort :

TeraSort เป็นแมปมาตรฐาน / ลดการเรียงลำดับยกเว้นพาร์ติชันเนอร์แบบกำหนดเองที่ใช้รายการคีย์ตัวอย่าง N - 1 ที่เรียงลำดับซึ่งกำหนดช่วงคีย์สำหรับการลดแต่ละครั้ง โดยเฉพาะอย่างยิ่งคีย์ทั้งหมดเช่นตัวอย่าง [i - 1] <= คีย์ <ตัวอย่าง [i] จะถูกส่งไปลด i สิ่งนี้รับประกันได้ว่าผลลัพธ์ของการลด i น้อยกว่าผลลัพธ์ของการลด i + 1 ทั้งหมด "

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

ผมพบว่าการอ้างอิงกระดาษผ่านบล็อกเจมส์แฮมิลตันโพสต์


3

ข้อมูลอ้างอิงของ Google: MapReduce: การประมวลผลข้อมูลที่ง่ายขึ้นบนคลัสเตอร์ขนาดใหญ่

ปรากฏใน :
OSDI'04: Sixth Symposium on Operating System Design and Implementation,
San Francisco, CA, December, 2004

ลิงก์นั้นมีการอ้างอิง PDF และ HTML-Slide

นอกจากนี้ยังมีหน้า Wikipedia พร้อมคำอธิบายพร้อมการอ้างอิงการใช้งาน

ยังวิจารณ์,

David DeWitt และ Michael Stonebraker ผู้เชี่ยวชาญด้านการบุกเบิกฐานข้อมูลคู่ขนานและไม่ได้แบ่งปันสถาปัตยกรรมใด ๆ ได้ทำการยืนยันที่ขัดแย้งกันเกี่ยวกับความกว้างของปัญหาที่ MapReduce สามารถนำไปใช้ได้ พวกเขาเรียกว่าอินเทอร์เฟซในระดับต่ำเกินไปและตั้งคำถามว่ามันแสดงถึงการเปลี่ยนกระบวนทัศน์ที่ผู้เสนออ้างว่าเป็นจริงหรือไม่ พวกเขาท้าทายการเรียกร้องความแปลกใหม่ของผู้เสนอ MapReduce โดยอ้างว่า Teradata เป็นตัวอย่างของศิลปะยุคก่อนที่มีมานานกว่าสองทศวรรษ พวกเขาเปรียบเทียบโปรแกรมเมอร์ MapReduce กับโปรแกรมเมอร์ Codasyl โดยสังเกตว่าทั้งคู่กำลัง "เขียนในภาษาระดับต่ำที่มีการจัดการบันทึกระดับต่ำ" การใช้ไฟล์อินพุตของ MapReduce และการขาดการสนับสนุนสคีมาทำให้การปรับปรุงประสิทธิภาพที่เปิดใช้งานโดยคุณสมบัติระบบฐานข้อมูลทั่วไปเช่น B-tree และการแบ่งแฮช


ฉันเข้าใจ (ส่วนใหญ่) แนวคิดของ MapReduce ตามที่อธิบายไว้ในเอกสารที่กล่าวถึง ฉันพยายามทำความเข้าใจอัลกอริทึมการเรียงลำดับ
Niels Basjes

1

ฉันมีคำถามเดียวกันขณะอ่านกระดาษ MapReduce ของ Google คำตอบของ@Yuval Fไขปริศนาของฉันได้ดีทีเดียว

สิ่งหนึ่งที่ฉันสังเกตเห็นในขณะที่อ่านบทความคือเวทมนตร์เกิดขึ้นในการแบ่งพาร์ติชัน (หลังแผนที่ก่อนลด)

กระดาษนี้ใช้hash(key) mod Rเป็นตัวอย่างการแบ่งพาร์ติชัน แต่นี่ไม่ใช่วิธีเดียวในการแบ่งข้อมูลระดับกลางไปยังงานลดขนาดต่างๆ

เพียงเพิ่มเงื่อนไขขอบเขตให้กับคำตอบของ@Yuval Fเพื่อให้มันเสร็จสมบูรณ์: สมมติว่า min (S) และ max (S) คือคีย์ต่ำสุดและคีย์สูงสุดระหว่างคีย์ตัวอย่าง คีย์ทั้งหมด <min (S) ถูกแบ่งเป็นหนึ่งงานลด ในทางกลับกันคีย์ทั้งหมด> = max (S) จะถูกแบ่งเป็นหนึ่งงานลด

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


0

แค่คาดเดา ...

ด้วยชุดข้อมูลจำนวนมากคุณจะแบ่งข้อมูลออกเป็นบางส่วนเพื่อประมวลผลแบบขนาน (อาจใช้หมายเลขบันทึกเช่นบันทึก 1 - 1,000 = พาร์ติชัน 1 และอื่น ๆ )

กำหนด / กำหนดเวลาแต่ละพาร์ติชันให้กับโหนดเฉพาะในคลัสเตอร์

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

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

เมื่อเสร็จแล้วให้รวมพาร์ติชันที่เรียงลำดับไว้เป็นชุดข้อมูลเดียวอีกครั้ง ณ จุดนี้มันเป็นเพียงการต่อไฟล์ n อย่างง่าย ๆ (โดยที่ n อาจเป็น 26 ถ้าคุณกำลังทำ A - Z เท่านั้น) เป็นต้น

อาจมีขั้นตอนกลางระหว่าง ... ฉันไม่แน่ใจ :) คือแผนที่เพิ่มเติมและลดหลังจากขั้นตอนลดครั้งแรก

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