Distributed Data Processing using MapReduce

ขณะที่ผมกำลังเขียน blog entry นี้อยู่ กำลัง run program เพื่อกรองข้อมูลด้วยคำสั่ง grep ในภาษา Perl แต่ตัวข้อมูลนั้นมีขนาดใหญ่เดาว่า ตอนเขียน entry นี้เสร็จก็ยังไม่ได้ผลที่สมบูรณ์ การทำงานในลักษณะนี้มี framework ที่ช่วยทำให้มันเร็วขึ้น ด้วยการประมวลผลแบบขนาน พอนึกได้เลยรีบเอามาเขียนไว้ เผื่อจะกลับมาทำตอนมีเวลา

framework ที่ว่าคือ MapReduce การใช้คำสั่ง grep จะทำการ match string ด้วย regular expression ลองนึกถึงไฟล์สองไฟล์ ไฟล์หนึ่งเก็บ key ที่เราต้องการใช้ match ไฟล์ที่สองเก็บ raw data ขนาดใหญ่ ผมอยากได้ผลของการ match key ในไฟล์ แรก กับ ข้อมูลในไฟล์ที่สอง ถ้าเขียนง่ายๆคงได้ประมาณนี้

for each line in fileA as keyA
do
   grep keyA fileB
end

ถ้าสามารถแบ่ง loop นี้ออกจากกัน อาจย่อยเป็นสัก 10 loop ย่อย แล้วแบ่งให้แต่ละ node ใน cluster ช่วยทำ grep ของแต่ละ loop ไปพร้อมๆกัน พอทำเสร็จก็ส่งผลกลับมารวมกันการเป็น output สุดท้าย งานแบบนี้ MapReduce ทำได้สบายๆ เหลือแต่ว่าจะเขียนยังไงเท่านั้น ไว้จะลองกลับมาทำดูครับ

Resource