ความแปลกใหม่ใน MapReduce คืออะไร?


68

ไม่กี่ปีที่ผ่านมาMapReduceได้รับการยกย่องว่าเป็นการปฏิวัติการเขียนโปรแกรมแบบกระจาย นอกจากนี้ยังมีนักวิจารณ์แต่โดยมากแล้วก็มีโฆษณาที่กระตือรือร้น มันยังจดสิทธิบัตร! [1]

ชื่อนี้เป็นที่ระลึกถึงmapและreduceในการเขียนโปรแกรมการทำงาน แต่เมื่อฉันอ่าน (Wikipedia)

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

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

หรือ [2]

Internals of MAP: [... ] MAP แยกค่าอินพุตเป็นคำ [... ] MAP หมายถึงการเชื่อมโยงคู่คีย์ / ค่าที่กำหนดของอินพุตกับคู่กลางคีย์ / ค่าที่อาจเกิดขึ้น

Internals of REDUCE: [... ] [REDUCE] ดำเนินการรวมที่จำเป็น (พูดลด): รับค่าจำนวนมากและลดลงเป็นค่าเดียว

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


  1. สิทธิบัตรสหรัฐอเมริกา 7,650,331: "ระบบและวิธีการสำหรับการประมวลผลข้อมูลขนาดใหญ่ที่มีประสิทธิภาพ" (2010)
  2. รูปแบบการเขียนโปรแกรม MapReduce ของ Google - เยี่ยมชมโดย R. Lämmel (2007)

7
ไม่มีความแปลกใหม่ ฉันจะไม่ตอบคำถามนี้ แต่เป็นความเห็นที่แข็งแกร่งของฉันว่าไม่มีอะไรใหม่ในการคำนวณหรือแม้แต่การคำนวณแบบกระจายถูกค้นพบโดย MapReduce
edA-qa mort-ora-y

@Aryabhata: หากมีความแปลกใหม่คำถามนี้มีคำตอบที่ดีและสร้างสรรค์ หากไม่มีไม่สามารถบอกได้ว่ามีน้อยมาก (ยกเว้นอาจลด MapReduce ให้เป็นเทคนิคเก่ากว่าอย่างชัดเจน) จริง แต่ถ้าคุณรู้สึกอย่างนั้นโดยทั้งหมดให้ลงคะแนน!
กราฟิลส์

@ edA-qamort-ora-y: ในกรณีนี้เราควรจะสามารถแสดง MapReduce ด้วยคำศัพท์ที่เก่ากว่าและนั่นจะเป็นคำตอบที่ดี!
กราฟิลส์

1
@ ราฟาเอลฉันเห็นด้วย แต่ฉันไม่แน่ใจว่าฉันสามารถทำได้ อย่างไรก็ตามฉันสามารถสังเกตได้ว่าตามที่อธิบายไว้ที่นี่ (คำพูดแรก) การเรียงแบบผสานใช้วิธีการที่แน่นอนของแผนที่ / ลด แน่นอนสามารถแจกจ่ายโดยไม่มีการเปลี่ยนแปลง
edA-qa mort-ora-y

คำตอบ:


47

ฉันไม่สามารถช่วย แต่คิดว่า: นี่คือการแบ่ง & พิชิตธรรมดาและเรียบง่าย!

M / R ไม่ได้แบ่ง & พิชิต ไม่เกี่ยวข้องกับแอปพลิเคชันซ้ำของอัลกอริทึมกับชุดย่อยขนาดเล็กของอินพุตก่อนหน้า เป็นไปป์ไลน์ (ฟังก์ชั่นที่ระบุไว้เป็นองค์ประกอบของฟังก์ชั่นที่ง่ายกว่า) ที่ขั้นตอนไปป์ไลน์กำลังสลับแผนที่และลดการดำเนินการ ขั้นตอนต่าง ๆ สามารถดำเนินการต่าง ๆ ได้


ดังนั้นมีความแปลกใหม่ (แนวคิด) ใน MapReduce ที่ไหนสักแห่งหรือเป็นเพียงการดำเนินการใหม่ของความคิดเก่าที่มีประโยชน์ในบางสถานการณ์?

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


ผลงานของMapReduce paperคือ

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

บทวิจารณ์บางส่วนตกอยู่ในชั้นเรียนเหล่านี้:

  1. "แผนที่ / การลดไม่ทำให้เกิดพื้นใหม่ในทฤษฎีการคำนวณ" จริง การมีส่วนร่วมของกระดาษต้นฉบับคือผู้ประกอบการเหล่านี้มีความเข้าใจดีกับชุดของการเพิ่มประสิทธิภาพเฉพาะถูกนำมาใช้ในการแก้ปัญหาจริงได้ง่ายขึ้นและทนต่อความผิดพลาดกว่าโซลูชั่นแบบครั้งเดียว
  2. "การคำนวณแบบกระจายนี้ไม่สามารถย่อยสลายในแผนที่ได้ง่ายและลดการทำงาน" ยุติธรรมเพียงพอ แต่หลายคนทำ
  3. "ไปป์ไลน์ของแผนที่ n / ลดขั้นตอนต้องใช้เวลาแฝงเป็นสัดส่วนกับจำนวนของขั้นตอนการลดของไปป์ไลน์ก่อนที่จะสร้างผลลัพธ์ใด ๆ " อาจเป็นจริง ตัวดำเนินการลดจะต้องรับอินพุตทั้งหมดก่อนจึงจะสามารถสร้างเอาต์พุตที่สมบูรณ์ได้
  4. "แผนที่ / ลดมากเกินไปสำหรับกรณีการใช้งานนี้" อาจจะ. เมื่อวิศวกรพบค้อนใหม่ที่เป็นประกายพวกเขามักจะมองหาสิ่งที่ดูเหมือนเล็บ ไม่ได้หมายความว่าค้อนไม่ใช่เครื่องมือที่ได้รับการออกแบบมาเป็นอย่างดีสำหรับบางช่อง
  5. "Map / ลดเป็นการแทนที่ที่ดีสำหรับฐานข้อมูลเชิงสัมพันธ์" จริง หากฐานข้อมูลเชิงสัมพันธ์ปรับขนาดไปที่ชุดข้อมูลของคุณคุณจะมีตัวเลือกมากมาย

พวกเขาเรียกเอกสารต้นฉบับว่า "น้ำเชื้อ" ดังนั้นฉันคาดหวังสิ่งใหม่ ฉันไม่ได้รับวรรคแรกของคุณ: อย่างชัดเจนมีมากมายของเทคนิคการอัลกอริทึมที่ไม่ได้แบ่งและพิชิต หาก MapReduce เป็น "เพียง" การใช้งานที่มีประสิทธิภาพของ d & c สำหรับชุดปัญหาที่เฉพาะเจาะจงก็ไม่มีอะไรแน่นอนน้ำเชื้อหรือสิทธิบัตรที่คุ้มค่าในอัลกอริทึม (imho) ไม่ได้บอกว่ามันไม่ใช่ระบบที่ดี โปรดทราบว่าคำติชมของฉันมีน้อยด้วย MapReduce ตัวเอง (ฉันคิดว่ามันดีสำหรับสิ่งที่มันทำไว้) กว่าด้วยการต้อนรับจากชุมชน
Raphael

1
@ ราฟาเอลฉันไม่คิดว่า M / R จะแบ่งและพิชิตในแง่ที่คุณเชื่อมโยงไป ไม่เกี่ยวข้องกับแอปพลิเคชันซ้ำของอัลกอริทึมกับชุดย่อยขนาดเล็กของอินพุตต้นฉบับ มันเป็นขั้นตอนที่ท่อส่งก๊าซสลับแผนที่และลดการปฏิบัติงาน
Mike Samuel

หืมจริง ฉันตีความว่า "โหนดของผู้ปฏิบัติงานอาจทำสิ่งนี้อีกครั้งในที่สุดซึ่งนำไปสู่โครงสร้างต้นไม้หลายระดับ" ด้วยวิธีนี้ แต่ไม่แน่นอนหมายความว่าสิ่งเดียวกันจะเกิดขึ้นในทุกระดับ
Raphael

1
@ ex0du5 ฉันคิดว่าคุณอาจประณามเพราะอ้างว่าไม่ได้ทำ "ระบบจำนวนมากได้จัดทำโมเดลการเขียนโปรแกรมที่ถูก จำกัด และใช้ข้อ จำกัด ในการคำนวณแบบขนานโดยอัตโนมัติ ... MapReduce สามารถพิจารณาได้ว่าการทำให้ง่ายขึ้นและการกลั่นของรุ่นเหล่านี้บางส่วนขึ้นอยู่กับประสบการณ์ของเรากับการคำนวณขนาดใหญ่ ... ระบบประมวลผลแบบขนานส่วนใหญ่มีการใช้งานในเครื่องชั่งขนาดเล็กเท่านั้นและปล่อยให้รายละเอียดของการจัดการกับความล้มเหลวของเครื่องไปยังโปรแกรมเมอร์ มันอ้างถึงเอกสารโดย Rabin และ Valiant แต่ไม่ใช่ Liskov paper
Mike Samuel

1
@ ex0du5 ยุติธรรมพอ ฉันคิดว่า "" แผนที่ / การลดไม่ทำให้เกิดพื้นใหม่ในทฤษฎีการคำนวณ "จริง" ชัดเจนเพียงพอ แต่ฉันเขียนรายการการมีส่วนร่วมใหม่
Mike Samuel

21

แก้ไข (มีนาคม 2014) ฉันควรจะบอกว่าฉันได้ทำงานเกี่ยวกับอัลกอริธึมสำหรับแบบจำลองการคำนวณแบบ MapReduce มากขึ้นและฉันรู้สึกว่าตัวเองถูกลบมากเกินไป เทคนิค Divide-Compress-Conquer ที่ฉันพูดถึงด้านล่างนั้นมีความหลากหลายอย่างน่าประหลาดใจและสามารถเป็นพื้นฐานของอัลกอริทึมที่ฉันคิดว่าไม่สำคัญและน่าสนใจ


ให้ฉันเสนอคำตอบที่จะด้อยกว่ามากของ Mike ในแง่ของความครอบคลุม แต่จากรูปแบบของมุมมองทฤษฎีการคำนวณ / อัลกอริทึม

O(nϵ)o(logn)

O(1)

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

nO(n)n

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

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


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

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

1
@ Xodarap ที่อาจเป็นไปได้ ที่นี่ฉันใช้มุมมองทฤษฎีอัลกอริทึมอย่างหมดจด: แบบจำลองมีประโยชน์ถ้ามันนำไปสู่มุมมองอัลกอริทึมใหม่ จากการวัดนั้นการสตรีมมิงนั้นไม่เหมือนจริงทั้งหมด แต่ได้นำไปสู่เทคนิคใหม่มากมายที่มีประโยชน์ในทางปฏิบัติ ประเด็นคือสิ่งที่เป็นนามธรรมที่ถูกต้องที่นำไปสู่ความคิดใหม่ abstractions MR ปัจจุบันมีความสำเร็จผสม (แต่บางความสำเร็จฉันเดา)
Sasho Nikolov

1
@ MikeSamuel คำว่า "ต้องการ" ในประโยคนั้นหมายความว่านี่เป็นสิ่งที่เทคนิคต้องการในการทำงานไม่ใช่เป็นเพียงสิ่งเดียวที่ทำได้ ไม่มีผลลัพธ์เชิงลบเชิงทฤษฎีสำหรับ MR ที่ฉันรู้ การร้องเรียนของฉันไม่ได้ว่า MR มีประสิทธิภาพน้อยกว่า บริษัท อย่างมากนั่นคือเราไม่ได้เห็นความคิดอัลกอริทึมใหม่ที่ได้รับแรงบันดาลใจจากแบบจำลอง (ซึ่งดีสำหรับระบบ แต่น่าผิดหวังสำหรับรูปแบบการคำนวณ) ในทางกลับกันการลบล้างแคชตัวเองเป็นความคิดที่น่าตื่นตาตื่นใจ imo
Sasho Nikolov

@SashoNikolov เข้าใจ ขอบคุณที่อธิบาย
Mike Samuel

6

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


3

ฉันคิดว่าคุณโดนตะปูที่หัวด้วยความคิดเห็นของคุณ

มันไม่ได้เป็นความจริงว่าในแผนที่ภาษาการทำงานใด ๆ ที่สามารถ parallelized - ภาษาที่จะต้องบริสุทธิ์ (ฉันเชื่อว่า Haskell เป็นภาษาหลักที่ใช้งานได้เพียงภาษาเดียวเท่านั้น Lisp, OCaml และ Scala ล้วน แต่ไม่บริสุทธิ์)

เราทราบเกี่ยวกับประโยชน์ของรหัสบริสุทธิ์ตั้งแต่แม้กระทั่งก่อนที่จะหมดเวลาใช้งานเมื่อวิศวกรวางระบบตัวประมวลผลครั้งแรก แล้วทำไมไม่มีใครใช้ภาษาบริสุทธิ์?

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

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

NC=P


ฉันไม่คุ้นเคยกับ MapReduce แต่การนำเสนอของคุณไม่แตกต่างจากสิ่งที่ฉันจำได้ว่าถูกนำเสนอเป็นกรณีอุดมคติใน Parallelism 101 ย้อนกลับไปเมื่อศตวรรษที่แล้ว
Gilles

@Gilles: ความตั้งใจของผมเป็นเพียงเพื่อแสดงให้เห็นว่า "หารและพิชิต" = " แจกจ่ายแบ่ง & Conquer." M / R นั้นมีความสำคัญน้อยกว่าแม้ว่าจะยังไม่ใช่ของจริงก็ตาม
Xodarap

ในการเขียนโปรแกรมเชิงหน้าที่แผนที่ทั้งหมดสามารถขนานกัน (น่าอับอาย) ดังนั้นทำไมไม่ยึดติดกับกระบวนทัศน์นั้น ฉันไม่เห็นว่าcountตัวแปรที่แชร์ในรหัสเทียมของคุณเป็นอย่างไร เพียงแค่ส่งค่าปัจจุบันเพื่อdo_somethingทำงาน คุณสามารถยกตัวอย่างของอัลกอริทึม "ของจริง" (Mergesort, Quicksort, ... ) ที่การเรียกซ้ำเกิดขึ้นอีกหรือไม่ (หลังจากที่มีการโทรออก)
กราฟิลส์

@ ราฟาเอล: ฉันได้เขียนคำตอบของฉันใหม่เพื่อตอบสนองต่อความคิดเห็นของคุณได้ดียิ่งขึ้น ฉันสามารถเพิ่มตัวอย่างว่าเมื่อใดที่ความบริสุทธิ์นั้นน่ารำคาญถ้าคุณยังต้องการ
Xodarap

1
@ ราฟาเอล: ฉันยอมรับว่าคำตอบของฉันจะดีกว่านี้มากถ้าฉันสามารถอ้างอิงบทความที่แสดงว่าเวลาในการเขียนโปรแกรมลดลงจาก X ชั่วโมงถึง Y โดยใช้ M / R หรือเพิ่มจาก A ถึง B โดยการบังคับใช้ความบริสุทธิ์ แต่ฉันคิดว่าทั้งหมด ทำคือโบกมืออย่างดุเดือดและยืนยันว่าความแตกต่างนั้นไม่สำคัญ
Xodarap
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.