MapReduce แก้ปัญหาอะไรได้บ้าง


61

ฉันได้อ่านเกี่ยวกับ MapReduce มาระยะหนึ่งแล้ว แต่สิ่งที่ฉันไม่เข้าใจคือคนที่ตัดสินใจใช้ MapReduce (หรือไม่ใช้)

ฉันหมายถึงรูปแบบของปัญหาที่บ่งบอกว่าสามารถใช้ MapReduce ได้

คำตอบ:


47

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

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

ในทางปฏิบัติปัญหาที่เกิดขึ้นมีแนวโน้มที่จะสามารถ recombinable ได้ง่ายกว่าไม่ดังนั้นการตัดสินใจว่าจะทำขนานงานหรือไม่ต้องทำอะไรกับงานที่มีขนาดใหญ่และไม่ยากเท่าไหร่


หากคุณกำลังมองหาคำตอบโดยประมาณสำหรับปัญหาพนักงานขายที่เดินทางคุณสามารถเลือกคำตอบได้โดยใช้ระยะทางรวมขั้นต่ำสุด
dan_waterworth

ฉันไม่เข้าใจคำอธิบายของคุณว่าทำไม MapReduce จึงไม่เหมาะสำหรับนักเดินทาง

9
มันเหมาะสำหรับการค้นหาวิธีการแก้ปัญหาอาจจะได้ดีมากคนหนึ่ง - เพียงแค่พาร์ทิชันชุดของเมืองเป็นชุดที่มีขนาดเล็กเช่น 1-10, 11-20, 21-30, หาเส้นทางที่ดีที่สุดระหว่างพวกเขาและพวกเขาเข้าร่วมกับกระโดดของ 10-> 11, 20-> 21 และ 30-> 1 แต่ประเด็นของปัญหาคือการหาเส้นทางที่ดีที่สุดและไม่มีการรับประกันว่าเส้นทางที่ดีที่สุดจะถูกแบ่งพาร์ติชันด้วยวิธีนี้ - มันอาจเริ่มต้นด้วย 1-> 25! ในคำอื่น ๆ เพื่อหาการแบ่งพาร์ติชั่นที่ถูกต้องคุณต้องรู้วิธีแก้ปัญหาอยู่แล้ว! นั่นเป็นสาเหตุที่การค้นหาเส้นทางที่ดีที่สุดนั้นไม่ไวต่อการหลอกลวงและการประกอบ
ซ้ำ

2
@KilianFoth คุณสามารถทำการค้นหาแบบละเอียดได้โดยแบ่งพื้นที่การแก้ปัญหาออกเป็นเริ่มต้นที่ 1 เริ่มที่ 2, ... จากนั้นทำการแก้ปัญหาที่แต่ละโหนดเหล่านี้โดยการแบ่งพื้นที่อีกครั้งด้วยวิธีเดียวกัน การผสานที่รูทนั้นเป็นการค้นหาเส้นทางที่สั้นที่สุดการรวมสาขาอื่น ๆ ก็คือการค้นหา 'เส้นทางเด็ก + เส้นทางที่สั้นที่สุดจากสาขาไปสู่เด็ก'
dan_waterworth

3
ในกรณีที่คุณมีทางออกโปรดจำไว้ว่าคุณมีสิทธิ์ได้รับเหรียญฟิลด์ของคุณหากคุณอายุต่ำกว่า 40 ปี
ฟรานเชสโก

28

สามารถแก้ไขปัญหาได้อย่างมีประสิทธิภาพโดยใช้การคำนวณแบบกระจายหรือไม่

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

งานของคุณ: แยกวิเคราะห์หนังสือเล่มนี้

ตัวอย่างทำงานได้ดีในการลบล้างสิ่งนี้ คุณมีเอกสารขนาดใหญ่ ( Moby Dick โดย Herman Melville ) และงานของคุณคือการวิเคราะห์ความถี่ของคำทั้งหมดที่ใช้

วิธีการต่อเนื่อง

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

วิธีการ MapReduce

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

กระบวนการอ่านบรรทัดข้อความและรวบรวมคำคือขั้นตอนแผนที่ (คุณสร้างแผนที่อย่างง่ายที่แสดงคำในบรรทัดที่มีความถี่ 1,2,3 ฯลฯ ) จากนั้นขั้นตอนการลดคือเมื่อแต่ละเครื่องเรียงแถว แผนที่เป็นแผนที่รวมเดียว

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

สรุป

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


2
Meh; นั่นเป็นสิ่งที่เกินความจริง MapReduce เป็นเรื่องเกี่ยวกับการแบ่งข้อมูลการใช้ฟังก์ชั่นกับชิ้นส่วนแบบขนานโดยไม่ต้องสื่อสารระหว่างเครื่องวิเคราะห์แล้วใช้ฟังก์ชั่นอื่นเพื่อรวมบิต ไม่ใช่ปัญหาที่สามารถแจกจ่ายได้ทั้งหมดพอดีกับรุ่นนั้น
Donal Fellows

2
จุดยุติธรรม - แต่มันทำหน้าที่เป็นการแนะนำที่มีประโยชน์และช่วยให้ใครบางคน "กล่อง" ปัญหาของพวกเขา
Gary Rowe

13

รูปแบบ MapReduce ถูกนำมาจากโลกของการเขียนโปรแกรมการทำงาน มันเป็นกระบวนการที่ใช้สิ่งที่เรียกว่า catamorphism บนโครงสร้างข้อมูลแบบขนาน โปรแกรมเมอร์หน้าที่ใช้ catamorphisms สำหรับการแปลงหรือการสรุปง่ายๆ

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

ตัวอย่างเช่นคุณสามารถคำนวณขนาดของต้นไม้โดยใช้ catamorphism คุณจะคำนวณผลรวมของค่าที่คำนวณได้สำหรับเด็กทุกคนบวกหนึ่ง


คำตอบที่ดีฉันไม่แน่ใจว่า @good_computer อ้างถึงเฟรมเวิร์ก MapReduce ที่พัฒนาโดย Google หรือไม่ และฉันไม่รู้ว่า MapReduce (กรอบงาน Google อีกครั้ง) นำไปใช้กับสิ่งอื่นนอกเหนือจากประเภท isomorphic กับรายการหรือไม่
scarfridge

1
@scarfridge ฉันคิดว่า OP ไม่ได้อ้างอิงถึงเฟรมเวิร์กเฉพาะของ Google ฉันศึกษาบทความ Wikipedia เกี่ยวกับว่าจะใช้สำหรับรายการหรือต้นไม้โดยทั่วไปก่อนโพสต์ en.wikipedia.org/wiki/MapReduce#Overview
dan_waterworth

2
ถ้ามันถูกเรียกว่าMapFold ; ที่จะเข้าใจได้ง่ายขึ้นมาก
Aditya

6

WPIนี้- แอปพลิเคชั่นแผนที่ลด (ppt)อาจเป็นที่สนใจของคุณ มันกล่าวถึงการใช้งานที่แตกต่างกันของ MR และเป็นหนึ่งในกรณีที่กล่าวถึงมันแสดงให้เห็นว่าการใช้อินสแตนซ์ 100 EC2 และ 24 ชั่วโมงที่ New York Times สามารถแปลงบทความที่สแกน 4TB เป็น 1.5TB ของเอกสาร PDF

อีกตัวอย่างหนึ่งที่ MR ช่วยในการเร่งประสิทธิภาพคือ: Aster - SQL Map Reduceแสดงกรณีศึกษาบางส่วนเกี่ยวกับเทคโนโลยี SQL-Map ลดรวมถึงการตรวจจับการฉ้อโกงการแปลงและอื่น ๆ


1
หากคุณจบลงด้วยหนึ่ง PDF ต่อบทความที่สแกนคุณเพียงแค่ใช้แผนที่แบบกระจายไม่ใช่ MapReduce ในแผนที่ลดคุณใช้การลดผลของแผนที่เพื่อให้ได้ผลลัพธ์เดียว
Pete Kirkham

6

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

วิธีแผนที่ / ลดงานคือ:

  • แผนที่ใช้คู่ของคีย์ (k1) และค่า (v1) และแมปเข้าไปในชุดของคีย์ (k2) และค่า (v2) ใหม่
  • การลดใช้ค่า v2 ทั้งหมดด้วยคีย์ k2 เดียวกันและสร้างค่าใหม่ (v3)

ผลลัพธ์คือรายการของคู่ (k1, v1) จะถูกแปลงเป็นรายการของ (v3) s (แน่นอนค่า "v3" อาจเป็นคอมโพสิตที่มี k2 ซึ่งสามารถกำหนดให้เท่ากับ k1)

ดังนั้นคุณใช้มัน:

  1. หากคุณมีข้อมูลมากมายที่จะเริ่มต้นด้วยการรันข้อมูลทั้งหมดตามลำดับผ่านเซิร์ฟเวอร์หนึ่งหรือสองเซิร์ฟเวอร์อาจใช้เวลานานเกินไปและ

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

  3. ไม่ว่าคุณจะมีความสัมพันธ์แบบใดคุณมั่นใจได้ว่าข้อมูลอินพุตแต่ละส่วนจะมีผลต่อค่าเอาต์พุตสำหรับคีย์เอาต์พุตหนึ่งคีย์เท่านั้น

หากข้อมูลทั้งหมดของคุณสามารถประมวลผลตามลำดับโดยเซิร์ฟเวอร์เดียวตั้งแต่นั้นเป็นกระบวนทัศน์การคำนวณที่โดดเด่น (เซิร์ฟเวอร์คนที่ถูกสร้างขึ้นสำหรับและโปรแกรมเมอร์ได้รับการฝึกฝนในการใช้) ให้ใช้เซิร์ฟเวอร์เดียว

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

หากคุณไม่สามารถหาวิธีเปลี่ยนการแปลงข้อมูลเป็นแผนที่ / ลดได้แน่นอนว่าไม่ใช่วิธีแก้ปัญหา

มีศิลปะที่แท้จริงในการหาว่าปัญหาสามารถย่อยสลายเป็นสิ่งที่ Map / Reduce สามารถจัดการได้ ตัวอย่างเช่น v1 และ v2 อาจไม่อยู่ในชุดข้อมูลอินพุตหรือเอาต์พุตเลย หากคุณเพียงต้องการนับรายการที่ไม่ซ้ำในข้อมูลอินพุตดังนั้น k1 = k2 = รายการและ v1 = v2 = 1 หรือ 0 หรืออะไรก็ได้ ลดการสร้าง v3 เพียงผลรวมของจำนวน k2 ที่ได้รับ

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


3

MapReduce ทำงานกับปัญหาใด ๆ ที่ประกอบด้วยฟังก์ชัน 2 ฟังก์ชันในระดับที่เป็นนามธรรม ฟังก์ชั่นแรกถูกนำไปใช้กับแต่ละรายการในชุดอินพุตและฟังก์ชั่นที่สองรวมผลลัพธ์

ดังนั้นเมื่อใดก็ตามที่คุณต้องการได้รับ (1) ผลลัพธ์จาก (n) อินพุตและอินพุตทั้งหมดสามารถตรวจสอบ / ใช้งานโดย (1) ฟังก์ชั่นคุณสามารถใช้ MapReduce อีกครั้งนี่เป็นระดับเฉพาะของนามธรรม ฟังก์ชั่น (1) อาจเป็นฟังก์ชั่นการจัดกลุ่มที่ตรวจสอบอินพุตและตัดสินใจว่าจะใช้ฟังก์ชั่นอื่น ๆ อีกมากมาย

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


3

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

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

เหตุผลที่คุณอาจต้องการใช้การย่อแผนที่ถ้าเป็นจริงนั้นมีสองเท่า: 1) มันอาจจะสะอาดกว่าและทดสอบและแก้ไขได้ง่ายขึ้นถ้าคุณแบ่งสิ่งต่าง ๆ ลงในแผนที่และลดฟังก์ชั่น 2) ฟังก์ชั่นลดแผนที่ไม่มีสถานะและอาจทำงานพร้อมกันซึ่งจะช่วยเพิ่มความเร็วหากคุณมีซีพียูหลายตัวและบางอย่างเช่น hadoop หรือประกายไฟที่ใช้ในการรันสิ่งต่างๆในคลัสเตอร์

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

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


2

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

เป็นตัวอย่างหนึ่งที่เพิ่งเกิดขึ้นกับฉันเมื่อเร็ว ๆ นี้ฉันได้ทำงานกับ parser ใน Haskell ในการทดสอบตัวแยกวิเคราะห์ฉันจะปั๊มรายการของตัวแยกส่วนของสตริงผ่านตัวแยกวิเคราะห์แล้วฉันต้องการรับสายเดี่ยวที่ฉันสามารถส่งออกผลลัพธ์เพื่อดูว่าแยกวิเคราะห์ได้ถูกต้องหรือไม่ ดังนั้นดูเหมือนว่า:

--my initial set of test data, a list
tests = ["string1", "string2", "string3", ...]

--Map Step: turn strings into parsed results
--note the type, which demonstrates the map
applyParser :: [String] -> [Token]
--The actual function
applyParser input = map parser input

--Second map, turn tokens into output
showTokens :: [Token] -> [String]
showTokens t = map show t

--Reduce step, concat the results
combineResults :: [String] -> String
--In haskell, reduce is the foldl function, which takes an operation to fold with, a starting element, and a list to fold on
combineResults strings = foldl concat "" strings

--Finished program
testParser = print (combineResults(showTokens(applyParser tests)))

แน่นอนนี่เป็นเพียงการสอน รหัสจริงของฉันมีลักษณะแตกต่างกันเล็กน้อยและใช้ฟังก์ชั่นภายในมากขึ้น (เช่นfold concatไม่จำเป็นต้องตั้งแต่ Haskell อยู่แล้วรวมถึงunlinesที่ไม่[String]->String) ประเด็นหลักของฉันคือฉันไม่ได้คาดหวังว่าจะใช้แผนที่ / ลดขนาดเมื่อเริ่มต้นมันสอดคล้องกับความต้องการของฉัน ฉันต้องการทำบางสิ่งบางอย่างด้วยรายการจากนั้นเปลี่ยนรายการของฉันให้เป็นองค์ประกอบเดียวของผลลัพธ์ การใช้แผนที่ / ลดการเกิดขึ้นตามธรรมชาติ

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


1

มันขนานกันไหม

ปัญหาขนานใด ๆ คือแผนที่และพับ; ตรงกันข้ามขั้นตอนแผนที่เป็นแบบขนานโดยเนื้อแท้ (และขั้นตอนการพับอาจจะขึ้นอยู่กับโครงสร้างที่มันพับ) ดังนั้นนี่คือคุณสมบัติแบบสองทิศทาง


3
นี่เป็นเพียงกรณีของปัญหาขนานที่น่าอาย มีปัญหามากมายที่ขนานกันได้สูง แต่มีปฏิสัมพันธ์ระหว่างองค์ประกอบมากพอที่ MapReduce ทั่วไปจะไม่มีประสิทธิภาพ
Mark Booth

ขอบคุณสำหรับลิงค์ฉันไม่รู้เกี่ยวกับคำศัพท์ที่น่าอาย แผนที่ทั้งหมดไม่ได้ลดปัญหาที่แก้ไขได้หรือไม่
Paul Sanwald

1
มีปัญหาหลายขนานที่น่าอายไม่จำเป็นต้องลดทุกส่วน
Donal Fellows

1

สมมติว่าคุณกำลังค้นหากลุ่มของเซิร์ฟเวอร์และไม่สามารถตอบได้ในขณะนั้น สิ่งที่ mapReduce จะทำคือเนื่องจากไม่สามารถเข้าถึงโหนดต้นไม้นั้นไปยังแผนที่ขนาดใหญ่ได้เพราะมันจะทำการกำหนดตารางเวลาใหม่ในภายหลังและดำเนินการทั้งแผนที่หรือย่อจากนั้น โดยพื้นฐานแล้วมันพยายามที่จะรับประกันว่าข้อมูลทั้งหมดนั้นมีอยู่ในความไม่แน่นอนของซอฟต์แวร์และฮาร์ดแวร์ในสภาพแวดล้อม


1

ต่อไปนี้เป็นคำถามสำคัญที่ฉันใช้เพื่อสอบสวนการตัดสินใจใช้ MapReduce (หรือไม่ใช้)

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

    • แผนที่: ดำเนินการการดำเนินการเดียวกันกับข้อมูลทั้งหมด
    • ย่อ: ดำเนินการแบบเดียวกันกับข้อมูลแต่ละกลุ่มที่ผลิตโดยแผนที่

1

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

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

รูปแบบมีประโยชน์เพราะเมื่อคุณได้รับแผนที่ทั่วไป / ลดการใช้งานคุณสามารถแก้ปัญหาโดยใช้เลเยอร์ซอฟต์แวร์เดียวกันนั้นคุณเพียงแค่ต้องแสดงปัญหาของคุณในแง่ของมัน

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