Tags

,

วันนี้ได้มีโอกาสไปร่วมงาน BigData – Hadoop & MapReduce

DSCF0093

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

🙂

สาระที่น่าสนใจของงาน(ในมุมมองของผม)
มีสองประเด็น

1. What & why Big data ? และ

2. Hadoop ??
เอาประเด็นแรก ก่อน คือ อะไรคือคำว่า Big data และเราจะทำมันไปทำไม

ในปัจจุบันเราคงเห็นได้ชัดมากขึ้นว่า คนบนอินเตอร์เน็ต
ผลิตและใช้ข้อมูลต่อวันต่อคนมากขึ้นทุกๆปี เช่น

– เขียน status บ่นบน facebook เยอะขึ้น ถี่ขึ้น
– คอมเมนต์ like และ share ข้อมูลกันรัวๆ
– ดูคลิปจาก Youtube
– อัพรูปจาก Instagram
– สั่งซื้อของออนไลน์
– โอนเงินผ่าน Online banking
– Chat กันผ่าน LINE มากกว่าการส่ง SMS แบบเดิมๆ

DSCF3414

พฤติกรรมเหล่านี้ทำให้เกิดข้อมูลมหาศาลให้กับ services ต่างๆบนโลกอินเตอร์เน็ต
นอกจากสาเหตุสำคัญที่ว่ามันตอบโจทย์การใช้งาน
ก็อาจเป็นเพราะตัวเน็ตเองก็เสถียรและเร็วขึ้นทุกปีด้วย

การที่ข้อมูลมีขนาดใหญ่ขึ้นกว่าสมัยก่อนมาก ก็เลยตามมาด้วยปัญหาที่ว่า
“จะเอามันไปทำอะไร?”

– จะทิ้งมันดีไหม? เพราะเปลืองพื้นที่ storage และค่าใช้จ่ายในการดูแลรักษา

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

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

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

 

หลังจากวันนั้น

โลกอินเตอร์เน็ตของพวกเราๆก็เปลี่ยนไปตลอดกาล

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

และอีกร้อยแปดพันเก้าคำแนะนำ
ที่ระบบคอมพิวเตอร์ดันรู้ดีไปกว่าตัวเรา..
แถมช่วงหลังยังหนักข้อขึ้นไปอีก ด้วยการไปถามว่าเราชอบอะไรจากเพื่อนสนิท!!

“เอ็งอยู่กลุ่มเดียวกับมัน ชอบอะไรคล้ายๆกัน ถ้ามันชอบ แกก็น่าจะชอบนะ”
(นี่แหละเสียงกระซิบของระบบในปัจุบัน)
น่ากลัวไปไหมครับ?

คราวนี้มามองในฝั่งของคนทำงานด้านเทคโนโลยีบ้าง
ไอ้สิ่งที่พูดมาข้างบนน่ะ ฟังดูดีเชียว แต่เบื้องหลังมันทำได้ยังไงล่ะ??

 

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

ข้อมูลมี 4 รูปแบบ (แบ่งแบบหยาบๆ)
1. มีโครงสร้างชัดเจน พวกฐานข้อมูล database ต่างๆ เช่น RDBMS
2. กึ่งมีโครงสร้าง (semi structure) เช่น JSON, XML
3. เหมือนจะไม่มีโครงสร้าง (quasi structure) เช่น text file
4. ไม่มีโครงสร้าง เช่น Image, Videos

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

ถ้าเราเก็บข้อมูลรายรับรายจ่ายของเราลงในตาราง excel อย่างดี
(เปรียบเสมือน table ใน database งามๆ)
พอเราอยากรู้ยอดรวมเงินที่เราใช้ในเดือนที่ผ่านมา
เราก็แค่กด sum ข้อมูลในช่วงที่ว่า (หรือใช้ SQL ที่มี where ชัดๆซักตัว)
เราก็จะได้คำตอบมาในเวลาไม่ถึงแปดอึดใจ (ยาวแค่ไหนหว่า?)


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

 

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

ก็เลยกลายเป็นที่มาของการออกแบบ software
ที่จะเอามาวิเคราะห์ข้อมูลที่ส่วนใหญ่โครงสร้างมันยุ่งแบบนี้

DSCF3345

ในแง่ของความยุ่งนี้ จริงๆก็แยกได้อีกเป็น 3 แนว
1. Volume – เยอะมากกกกกกกกกกกกกกกกกกกกกกกกกกกกก (นับ ก ไก่เอา)
2. Velocity – เกี่ยวข้องกับเหตุการณ์ต่างๆตามเวลา เปลี่ยนแปลงเร็ว
3. Variety – รูปแบบของข้อมูลหลากหลายมาก และส่วนใหญ่มักไม่ใช่ incomplete data

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

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

จะเอา realtime ได้ยังไง…

….
โชคดี ที่ปัญหานี้ไม่ได้มีแต่คนถาม
มีนักคิดนักเขียน(โปรแกรม)ท่านนึง นาม Nutch เขียนระบบนึงขึ้นมา
เพื่อทำเป็นระบบ search engine แล้วก็คิดค้นวิธีจัดการกับข้อมูลเว็บเพจมหาศาล
ได้อย่างมีประสิทธิภาพ ด้วยเทคนิคที่เรียกกันว่า MapReduce

ที่แนวคิดหลักคือ การกระจายข้อมูลแยกออกไป
ทำกันหลายๆที่แบบขนาน แล้วเอาผลลัพธ์กลับมารวมกันสรุปเป็นคำตอบ

แล้วก็มีนักพัฒนาอีกสองคนชื่อ Doug Cutting กับ Mike Cafarella
มาปรับแต่งต่อให้กลายเป็น framework เพื่อให้ใช้งานได้ง่ายมากขึ้น
ในชื่อที่เรียกว่า Hadoop

หลักการทำงานของ Hadoop มีสองขั้นตอนใหญ่ๆ คือ Map กับ Reduce

Map
– มี Master node เป็นตัวหลักในการแบ่งข้อมูล(ที่คิดว่าเป็น) Big data ออกเป็นก้อนย่อยๆ
– ส่งข้อมูลแต่ละก้อนไปให้หน่วยประมวลผล (Worker node) ซึ่งโดยปกติจะมีหลาย node (เน้นจำนวนเยอะเข้าว่า)
– Worker node หาคำตอบของข้อมูลก้อนย่อย แล้วส่งคำตอบกลับไปให้ Master node

Reduce
– Master node รวมคำตอบของทุก worker node เข้าด้วยกัน
– จัดรูปแบบของคำตอบใหม่ ให้ตรงกับคำถามแรกสุดที่อยากรู้

ซึ่งจากภาพรวม แปลได้ง่ายๆว่า Hadoop จะเป็น framework
ที่ช่วยให้เราแตกงานไปกระจายทำในหลายๆเครื่องได้นั่นเอง

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

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

 

DSCF4047-fhdr

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

เรียนรู้ต่อไปอย่างสนุกสนานครับ

มีอะไรใหม่ให้ลอง เรียน รู้ และเล่นอีกเยอะแยะเลยครับ

ปล. Big data และ Hadoop ไม่ใช่พระเจ้า มันใช้แก้ปัญหาพวก Analytics ดี
แต่ไม่ได้เหมาะกับทุกปัญหาของการจัดการข้อมูล อย่าเอามันไปมั่วกับ database ทั่วไป

🙂

Advertisements