MapReduce ทำงานยังไงกันนะ

MapReduce เป็น Programming Model ตัวหนึ่งที่เหมาะกับการทำงานกับข้อมูลขนาดใหญ่ เพราะมันสามารถประมวลผลแบบ parallel ได้นั่นเอง แล้วมันทำงานยังไงล่ะ? มาดูกันเลย

เจ้าตัว MapReduce จะแบ่งการทำงานออกเป็น 2 ส่วนตามชื่อของมัน คือ ส่วน Map และส่วน Reduce โดยสองส่วนนี้จะได้รับคู่ key-value เข้ามาเป็น input แล้วทำอะไรบางอย่างออกมาเป็นคู่ key-value ที่เป็น output

MapReduce flow

มาลองดูตัวอย่างนี้กันดีกว่าค่ะ จะได้เข้าใจภาพของ MapReduce ง่ายขึ้น โดยบอกก่อนเลยว่าพื้นหลังสีเหลืองในรูปภาพแทน key และสีฟ้าแทน value นะคะ

สมมุติว่าร้านอาหารแห่งหนึ่ง ได้เอาเมนูอาหารของลูกค้ามาส่งให้เชฟ จะเห็นว่า นาย A สั่งพิซซ่าและเฟรนช์ฟรายส์อย่างละชิ้น นาย B สั่งเฟรนช์ฟรายและเบอร์เกอร์อย่างละชิ้น นาย C สั่งเบอร์เกอร์และเค้กอย่างละชิ้น ส่วนนาย D สั่งพิซซ่าอย่างเดียว 2 ชิ้น

ถ้าเชฟค่อยๆทำไปตามแต่ละออเดอร์ มีหวังนาย D หิวจนเป็นลมไปก่อนก็ได้ ถูกไหมล่ะ แล้วเชฟจะทำยังไงดี? งั้นให้คุณ Mapper ช่วยแยกออเดอร์ทั้งหมดออกเป็นรายการย่อยๆหน่อยดีกว่า โดยในตอนนี้เชฟก็ไม่จำเป็นต้องสนใจแล้วว่าเมนูไหนใครเป็นคนสั่ง เพราะฉะนั้น key ที่เป็นชื่อคนสั่งอาหารก็ไม่จำเป็นแล้ว เราเลยตัดมันออกไปก่อน (อะไรที่เราไม่สนใจจะถูกตัดออกไปในขั้นตอน Map ให้เหลือแค่สิ่งที่สนใจเพื่อนำไปประมวลผลต่อ) ตอนนี้ก็จะได้ key เป็นอาหาร และ value เป็นจำนวนที่ถูกสั่งนั่นเอง

Shuffle

เมื่อได้ output จากขั้นตอนการ Map แล้ว เราจะทำการ Shuffle หรือพูดง่ายๆก็คือการจัดกลุ่มตามเมนูแล้วเอา value มาเก็บไว้รวมกันยกตัวอย่างเช่น ในกลุ่มพิซซ่า ออเดอร์แรกสั่ง 1 ชิ้น ออเดอร์ถัดไปสั่ง 2 ชิ้น เป็นต้น ซึ่งผลลัพธ์ของการจัดกลุ่มจะเป็น input ให้กับส่วน Reduce ต่อไป

เมื่อคุณ Reducer ได้รับ input เข้ามา ก็จะเข้าสู่ส่วนของการ Reduce คือ สรุปผลแต่ละกลุ่มให้เหลือ value ค่าเดียว โดยในตัวอย่างนี้ คุณ Reducer จะทำการหาผลรวมของจำนวนออเดอร์ในแต่ละเมนูนั่นเอง

ปล. ในความเป็นจริงแล้วเราเป็นคนกำหนดเองว่าต้องการให้ map function และ reduce function มีการทำงานอย่างไร เช่น เราอาจอยากให้ reduce function ทำการหาค่า max ของ value แต่ละกลุ่มแทนการหาผลรวมก็ได้ ด้านบนเป็นเพียงตัวอย่างหนึ่งเท่านั้นนนน

หากใครสนใจศึกษาเรื่องอื่นเพิ่มเติม แวะเข้าไปชมกันได้ที่ edoCstudio เดี๋ยวจะมีอัพเดตเนื้อหาเรื่อยๆเลยค่ะ

--

--