Hadoop For Young Data Scientist

มีคนบอกว่า Hadoop For Young(ไม่เป็น) Data Scientist

Conclusion of Hadoop for young Data Scientist Class

บล็อคนี้จะมาเล่าเกี่ยวกับการอบรมเรื่อง Hadoop ครั้งแรกของเรา และเป็นครั้งที่สองของการอบรมเกี่ยวกับเรื่อง Data Scientist ซึ่งการอบรมนี้จัดโดยกลุ่ม Data Science Thailand

จุดประสงค์อีกอย่างคือต้องการสรุปเรียบเรียงสิ่งที่ตัวเองไปเรียนมาด้วย

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

ก่อนอื่นต้องเล่าก่อนว่า Hadoop คืออะไรสินะ ?

- ตามความเข้าใจจากที่เรียนมา Hadoop เป็นเครื่องมือหนึ่งที่ใช้จัดการ Big Data ซึ่ง Big Data ก็คือข้อมูลขนาดใหญ่ ซึ่งข้อมูลขนาดใหญ่ในความเข้าใจเราก็คือข้อมูลที่มีทั้งแบบ Structure และ Unstructure และไม่มีขนาดที่แน่นอน ข้อมูลพร้อมจะเกิดและเพิ่มขึ้นได้ตลอดเวลา ถ้าเทียบกับข้อมูลที่เราเก็บกับแบบเดิมที่เป็นแบบ Structure ซะส่วนใหญ่ เช่นบริษัทอย่างพวกธนาคาร ข้อมูล transaction ก็ถือว่าเป็นข้อมูลที่เพิ่มขึ้นตลอดเวลาเหมือนกัน แต่เราว่ามันต่างกับคำว่า Big Data อยู่นิดนึงตรงที่พอมีคำว่า Big Data เข้ามา ข้อมูลส่วนอื่นๆที่ไม่ได้จำเป็นต่อการใช้งานหรือสรุปยอดในรูปแบบเดิม เช่น ข้อมูลสถานที่ที่ลูกค้าถอนเงิน ข้อมูลช่วงเวลาที่ลูกค้าถอนเงิน ซึ่งจริงๆข้อมูลพวกนี้ก็ต้องมีเก็บอยู่ใน transaction อยู่แล้ว แต่มันอาจจะไม่ได้ถูกนำมาใช้งานหรือวิเคราะห์อะไร เก็บไว้แค่เป็น history หรือ log ธรรมดา พอต่อมา เริ่มมีเทคโนโลยีการ ทำ analytic ข้อมูลในแบบที่ไม่ใช่แค่การวิเคราะห์แต่เป็นการพยากรณ์พฤติกรรมของลูกค้า หรือการพยากรณ์อื่นๆ เข้ามา ข้อมูลที่ตอนแรกมันไม่ได้ถูกใช้งานอะไรก็จะมีประโยชน์ในการนำมาพยากรณ์ เพื่อส่งเสริมการตัดสินใจหรือวางกลยุทธ์เพิ่มลูกค้าเพิ่มยอดขายกันต่อไป อ่ะ! ออกทะเลไปซะนาน สรุป Hadoop ก็คือเครื่องมือจัดการข้อมูลขนาดใหญ่พวกนี้แหละ ซึ่งจะใช้หลักการแบบ Distributed System (คืออะไรไปหาอ่านเอง 5555 )

โครงสร้าง Hadoop

จะเป็นดังรูปนี้

Hadoop เวอร์ชั่นแรกก็จะมีสอง Layer คือชั้นของ storage ที่ใช้เก็บไฟล์ ก็จะแบ่งเป็น Directory เหมือนที่เราเก็บไฟล์ไว้เป็นโฟลเดอร์ในเครื่องเรา อีกชั้นคือ Map Reduce เป็นส่วนของการ process ข้อมูลที่เราดึงเข้ามา ซึ่งมันจะเขียนด้วยภาษาจาว่า ตอนแรกลองดูๆ tutorial การเขียน MapReduce อยู่เหมือนกัน แต่พอมาเรียนแล้วเลยรู้ว่า พอมันมีเวอร์ชั่นสอง เราก็ไม่ต้องเขียน MapReduce เองเสียแล้ววววว (เหมือนจะดีใจมากกว่าเสียใจ 555) พอมาเวอร์ชั่นสอง อย่างที่บอกว่ามันมีตัวที่ชื่อว่า YARN เข้ามา ซึ่ง YARN ตัวนี้แหละ ที่มันช่วยทำ Map Reduce ให้เรา เย่ๆๆๆ แล้วก็ยังมี Framework หรือ tool ตัวอื่นๆอีกมากมายที่เข้ามาช่วยในขั้นตอนต่างๆของการวิเคราะห์ข้อมูล

ชื่อของเครื่องมือที่เกี่ยวข้องกับการใช้ Hadoop มีอะไรบ้าง ?

ถ้าใครเคยลองไปด้อมๆมองๆ เสิชข้อมูลเกี่ยวกับ Hadoop หรือเครื่องมือที่ใช้ในการจัดการ Big Data จะเห็นว่ามันเยอะมากกกกกกกกกกกกกกกก มีเครื่องมือล้านแปดให้เลือกใช้ แต่หลักๆ มันจะสรุปได้ตามรูปนี้

ถ้าจำไม่ผิดเครื่องมือทั้งหมดนี่เป็นของ Apache และมันเป็น open source จ้า มาดูแต่ละชั้นกันดีกว่า

เริ่มจากชั้นบนสุด จะเป็นตัว UI

- Ambari ทำหน้าที่เป็นหน้า UI ให้เราจัดการเครื่องมือต่างๆในชั้นล่างๆลงมา

ด้านซ้ายมือสุดจะเป็นเครื่องที่ใช้ในการดึงข้อมูล

- Flume เป็นตัวที่ใช้ดึงข้อมูล จะใช้กับพวก Twitter API และไว้สำหรับดึงข้อมูลจากหลายๆที่ได้

- Sqoop เป็นตัวดึงข้อมูลเช่นกัน และสามารถทำ visualize ได้

- Zookeeper ทำหน้าที่เป็นเหมือน Fire wall ของข้อมูลที่นำเข้ามา เป็นหน่วย security อะไรแบบนั้น

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

- Oozie เป็นการเขียน Application ไว้บน Hadoop โดยจะแบ่ง และสร้างในรูปแบบของ Flow chart เป็นขั้นตอน สามารถสร้าง เป็น Jobs scheduler ได้

- Pig ใช้จัดการข้อมูลภาษาจะคล้ายๆ sql เรียกว่า pig latin

- Mahount ใช้ทำ machine learning

- R connector (ในกรณีใช้ภาษา R)

- Hive จัดการข้อมูลที่เป็น Structure

- HBASE ตัวนี้จะสามารถจัดการกับข้อมูลทั้ง Structure และ Un structure

แต่เครื่องมือทั้งหมดที่ว่ามานี่ มันอยู่ที่เราจะออกแบบให้เข้ากับงานเรา คือดูว่างานเราเหมาะสมจะใช้ตัวไหนประกอบกับตัวไหนบ้าง แต่หลักๆที่ต้องมีก็จะเป็น HDFS กับ YARN Map Reduce

Hadoop Distributed ???

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

o Map R ข้อดีคือไม่จำเป็นต้องดึงข้อมูลจาก HDFS (Drill มีคุณสมบัติเหมือน Hive แต่เป็นของ Map R พัฒนาเอง) ข้อดีคือเราใช้ datasource ได้หลายที่

o IBM InfoSphere BigInsignts for Hadoop ปรับให้เข้ากับ service ของ IBM

o Pivotal HD ของ Dell

o Hortonworks พยายามทำให้เหมือนกับ pure Hadoop มากที่สุดในเรื่องโครงสร้าง เหมาะแก่มือใหม่เพราะมีบทความให้ศึกษาเยอะ

o Cloudera (โครงสร้างเหมือน Hadoop)

มีเครื่องมือ cloudera manager และ Hue ทำหน้าที่เหมือนกับ ambari

impala ทำหน้าที่เหมือนกับ Hive แต่ impala เร็วกว่า hive

ต่อไปมาพูดถึง Cloud Platform ที่ใช้ลงเจ้าเครื่องมือต่างๆที่พูดถึงข้างบนกัน ??

- ก่อนอื่นต้องเล่าว่าถ้าเราไม่ใช้ Cloud Platform ในการลง tool ต่างๆที่กล่าวมาด้านบน เราก็ต้องลงแต่ละตัวและ config เอง เอาง่ายๆว่าน่าจะคล้ายๆกับการประกอบคอมพ์เองแหละมั้ง แต่ถ้าเราใช้ Cloud Platform เราก็จะไม่ต้องมานั่งลงแต่ละอย่างและ config เองให้ยุ่งยาก เหมาะกับสาวๆที่ geek ไม่สุดอย่างเรา เฮ่!!

Cloud Platform ที่ได้ลองใช้ในครั้งนี้ก็คือ Microsoft Azure ซึ่งใช้ง่ายมากกก ขอแค่มีเครดิต 555 เสิชๆดูว่าอยากได้ platform ไหน เช่น Hortonworks Sandbox with HDP 2.4 (Platform พวกนี้จริงๆก็ยังไม่ค่อยรู้จักเท่าไหร่ ไม่แน่ใจว่าตัวไหนมีเครื่องมืออะไรให้ใช้บ้าง) แล้วก็กด click ระบบก็จะ deploy ให้เสร็จสรรพ

อีกสองย่างที่ได้รู้จักก็คือ

1. เวลาที่เราทำงานจริงและใช้เป็น server production เราจะต้องมีการสร้าง cloud break เพื่อสร้าง cluster และ สร้างแต่ละ node ซึ่งแต่ละ node หมายถึงเครื่อง client แต่ละเครื่องที่จะทำงานร่วมกันในทีมนี่แหละ ซึ่งการสร้าง cluster เราสามารถสร้างได้จากการสร้าง ambary ก่อนก็ได้ แล้วค่อยๆสร้างชั้นอื่นๆตามลำดับ

2. สร้าง notebook เพื่อ test ร่วมกันจาก Zeppelin ได้ ตัวนี้ที่เข้าใจน่าจะเป็นตัวที่สร้างขึ้นเพื่อใช้เทสระบบในขั้นทดลองกับทีม

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

จบ…..