Tuesday, 10 July 2012

MapReduce - Programming Model for Distributed System



MapReduce คือ Programming Model ที่ Google นำมาใช้ในการวิเคราะห์ข้อมูลขนาดใหญ่ มักจะใช้ในการกระจายการประมวลผลไปยังเครื่อง computer เครื่องอื่นๆใน Network MapReduce มีต้นแบบมาจาก Map และ Reduce Function ที่มักพบอยู่ในภาษาประเภท Functional Programming อย่างเช่น Ruby และ Python 

ในขั้นตอนการ Map เครื่องที่ทำหน้าที่เป็น Master Node จะนำ input ที่ได้รับมาแบ่งเป็น Sub-Problem หลายๆชิ้น และกระจายไปยังเครื่องที่ทำหน้าที่เป็น Worker Node ซึ่งเครื่อง Worker Node อาจจะนำข้อมูลที่ได้รับไปแบ่งเป็น Sub-Problem อีกที (ในลักษณะของ Multi Level Tree) หรือ Worker Node อาจจะทำการประมวลผล Sub-Problem ที่ได้รับ และส่งผลลัพธ์กลับไปยัง Master Node

ในขั้นตอนการ Reduce จะเกิดขึ้นที่ Master Node โดยที่ Master Node จะนำผลลัพธ์ทั้งหมดที่ได้รับจาก Worker Node และนำมาสรุปเป็นผลลัพธ์สุดท้ายก่อนคืนกลับไปยัง Client

MapReduce ทำให้เกิดการกระจายการทำงาน (Distributed Processing) เพราะมีการแบ่งแยกขั้นตอน Map และ Reduce ออกจากกันอย่างชัดเจน โดยเฉพาะอย่างยิ่งถ้าข้อมูลที่ใช้ในขั้นตอนของการ Map และ Reduce ไม่จำเป็นต้อง Depend ซึ่งกันและกัน จะทำให้กระบวนการ Map และ Reduce สามารถเกิดขึ้นได้พร้อมๆกัน (Parallel)

MapReduce มักจะถูกนำมาใช้ในกรณีที่ข้อมูลมีขนาดใหญ๋มาก โดยที่เครื่อง Server เพียงเครื่องเดียว ไม่สามารถจะ Handle ข้อมูลได้ภายในเวลาที่กำหนด จึงจำเป็นต้องมีการใช้เครื่อง Worker จำนวนหลายๆเครื่องมาช่วยในการประมวลผล

เรามักจะพบการใช้งาน MapReduce ในหลายๆเทคโนโลยีที่รองรับการ Scale ขนาดใหญ่ อย่างเช่น Apache Hadoop Project, MongoDB



Google Technology RoundTable: Map Reduce

แหล่งที่มา: http://en.wikipedia.org/wiki/MapReduce

No comments:

Post a Comment