the-world-of-big-data-feature-image
the-world-of-big-data-feature-image

คงปฎิเสธไม่ได้ว่าในโลกปัจจุบันนี้ทุกอย่างกลายเป็นเรื่องของข้อมูลทั้งหมดแล้ว ไม่ว่าเราจะตัดสินใจจะทําอะไรซักอย่างก็ต้องใช้ข้อมูลที่เรามีทั้งสิ้น เพราะฉะนั้นเลยมีคําที่ถึงขั้นว่า “Data is new oil” กันเลยทีเดียว เปรียบเสมือนเป็นยุคในการขุดนํ้ามันเลยก็ว่าได้ 🙂

แต่คนทั่วไปส่วนใหญ่ใช้คําว่า Big Data ไปในเชิง Marketing ให้ฟังดูดีซะมากกว่า เห็นได้จากโฆษณาทางทีวีบ่อยๆ …. แต่จริงๆแล้ว Big Data ไม่ได้มากเหนือไปกว่าแค่ฐานข้อมูลขนาดใหญ่ที่รองรับข้อมูลขนาดล้านๆกิ๊กกะไบท์เลย เพราะฉะนั้นเวลาใครบอกว่าใช้ Big Data ก็ต้องคิดกันต่อเลยว่า

  • ข้อมูลเอามาจากไหน?
  • เอาข้อมูลที่มีไปใช้ทําอะไร? ประยุกต์เป็นอะไรต่อ?
  • แล้วนําเสนอข้อมูลยังไง? เพื่อให้คนเข้าถึงได้

เยอะแยะไปหมดกับการเล่นกับข้อมูลนี้ ดังนั้นเรามาเริ่มเรียนรู้มันอย่างจริงจังกันเลยดีกว่าว่า Big Data คืออะไรกันแน่?

Big Data คือ?

อย่างที่พูดไป Big Data มันก็ไม่ใช่อะไรใหม่มันคือเรื่องของฐานข้อมูลที่มีขนาดใหญ่มากๆๆๆ ใหญ่มากกว่าที่คอมพิวเตอร์เครื่องหรือสองเครื่องจะรับได้ มันเลยต้องกลายมาเป็น Distributed File-System นั้นเอง (เหมือน Distributed System ทั่วไปหรืออีกคําคือ Clustering)

ซึ่งเวลาคนที่พูดถึง Big Data จริงๆแล้วส่วนใหญ่ก็จะหมายถึง project Hadoop นั่นแหละ

Hadoop คือ?

มันคือ open source ของทาง Apache ที่มีความสามารถในการ distributed storage และ distributed processing กับ data set ขนาดใหญ่มากบน clustering computer ….

แปลง่ายๆๆก็คือ Hadoop ทำให้เรามอง computer เป็น 100 เป็น 1000 เครื่องให้เหมือน Hard Drive เครื่องเดียว และเมื่อมันเต็ม เราก็สามารถที่จะเพิ่มเครื่องเข้าไปได้อีกโดยไม่กระทบกับอะไรเลย เพราะเป็น clustering system นั้นเอง รวมไปถึง redundant data ด้วย แปลว่าถ้าคอมพิวเตอร์ตัวไหนพังไป มันก็ยังจะมี Backup ข้อมูลอยู่บนตัวอื่นๆๆ 🙂

หัวใจหลักของ Hadoop

สำหรับตัวที่เป็นหัวใจของ Hadoop เลย จริงๆแล้วมีแค่ 3 ตัวตามด้านล่างนี้เท่านั้น

hadoop-core
hadoop-core

จาก stack แสดงให้ดูว่ามันถูกสร้างขึ้นซ้อนกันตามลําดับน่ะ คือ HDFS เป็นหัวใจของ Hadoop เป็นวิธีการเก็บข้อมูลของ Hadoop เลย ซึ่งเดี๋ยวจะอธิบายต่อไปว่ามันเก็บข้อมูลยังไง ส่วนเจ้า Yarn เป็น Resource manager ที่คอยจัดการ อ่าน-เขียน ข้อมูลลง HDFS นั้นเอง และเจ้าตัวสุดท้าย MapReduce เป็นวิธีการดึงข้อมูลขึ้นมาอ่านนั้นเอง 🙂

Hadoop Distributed File System (HDFS)

HDFS คือ File system ของ Hadoop ที่ออกแบบมาให้รองรับกับไฟล์ขนาดใหญ่มากๆ

โดยวิธีการทํางานของมัน คือ จะย่อยไฟล์ขนาดใหญ่ออกเป็นส่วนๆแล้วกระจายไปทั่ว clustering เลย ตัวอย่างเช่น สมมุติมี ข้อมูลของ sensor นํ้าขึ้น – ลง จากทั่วประเทศขนาด 248 mb มันก็จะเอาไฟล์พวกนั้นย่อยเป็น blocks เล็กๆ โดย blocks นึงจะมีขนาดอยู่ที่ 128 mb as default

hadoop-hdfs-block
hadoop-hdfs-block (https://www.edureka.co/blog/apache-hadoop-hdfs-architecture/)

แล้วกระจายทั่ว clustering แปลว่าในการทํางานจริง เราสามารถที่จะทํางาน parallel ข้อมูลไปได้ เพราะว่าข้อมูลกระจายเป็น blocks ไป

เดี๋ยวก่อนการย่อยไฟล์เป็นจํานวนเล็กๆมากๆแล้วกระจายไปทุก node แล้วถ้าคอมเครื่องใดเครื่องนึงพังล่ะ???? ข้อมูลไม่หายไปเลยหรอ? …. นั้นคือข้อดีอีกอย่างของ Hadoop คือเราไม่ต้องห่วงเรื่องของ blocks ที่กระจายไปอยู่ในแต่ละ server จะหายเลย เพราะว่า Hadoop มีความสามารถในการ replicate ข้อมูล blocks พวกนี้ไปในหลายๆ server กันเครื่อง node ต่างๆพังนั้นเอง (โดย default replicate ของ blocks จะอยู่ที่ 3 node แต่สามารถเปลี่ยนได้)

hadoop-blocks-replication
hadoop-blocks-replication (https://www.edureka.co/blog/apache-hadoop-hdfs-architecture/)

ยกตัวอย่างจากรูปน่ะ default replicate อยู่ที่ 3 แปลว่า blocks ทั้งหมดจะกระจายตัวไปทุก node ให้ครบ 3 กันกรณี Node ตายนั้นเอง

อ่าว คําถามต่อ แล้วข้อมูลมันกระจายโคตรๆๆๆเลยน่ะแบบนี้ … แล้วเราจะไปเรียกใช้จาก node ไหนกันแน่อะ? เราจะรู้ได้ยังไง? ว่าจะใช้ข้อมูลนี้จาก node ไหน? ซึ่งตอบไม่ยากเลย ในเมื่อมันกระจายขนาดนี้ มันก็ต้องมี node นึงที่รวบรวมข้อมูลของทุก node ไว้นั้นเอง!

hdfs-architecture
hdfs-architecture (the ultimate hands on hadoop class)

ซึ่ง Architecture ของ Hadoop ก็คือมี Name Node ที่คอยเก็บข้อมูลของทุก blocks ไว้ เพราะฉะนั้นเรื่องของการอ่าน blocks นี้มันก็จะแบ่งเป็น 2 ส่วนคือ read-write

  1. Read Data
    การ Read Data บน HDFS ก็คือสมมุติให้มี client node ตัวนึงพยายามจะหาข้อมูลจาก blocks นึง มันก็จะวิ่งไปที่ Name Node ก่อน หลังจากนั้นมันก็จะได้ address ของ block นั้นแหละ ไปหาข้อมูลโดยตรงจาก data node นั้นๆ

    hadoop-reading-file
    hadoop-reading-file (the ultimate hands on hadoop class)
  2. Write Data
    การ Write data บน Hadoop ก็หลักการณ์เดียวกันกับ Read เลย ทุกอย่างจะวิ่งไปที่ Name Node ก่อนเพื่อขออนุญาติสร้างไฟล์ หลังจากนั้น Name Node จะ Provide path มาให้เพื่อที่จะ Write File ซึ่ง Client Node ก็จะไป write file ที่ path นั้น … แต่ที่สําคัญคือ Name Node จะบันทึกว่าไฟล์มีอยู่ path นั้นจริงๆเมื่อ replciation สําเร็จแล้ว

    hadoop-write-file
    hadoop-write-file (the ultimate hands on hadoop class)

นี้คือหลักการณ์เก็บข้อมูลคร่าวๆของ HDFS ที่ควรจะรู้ไว้เป็นพื้นไว้เพื่อต่อยอดในอนาคต 🙂

Hadoop Yarn 

Yarn (Yet Another Resource Negotiator) เจ้าตัวนี้ไม่ต้องอธิบายไรมาก เพราะว่ามันเป็นตัว Resource Manager ที่ Built in มากับตัว Hadoop เลย มีหน้าที่คอยจัดการว่ามันได้ allocate memory, cpu, network และ storage สําหรับทั้ง Distributed file system เลย 🙂

Hadoop MapReduce

ฟังดูเหมือนยากน่ะ ว่าอะไรคือ MapReduce…แต่จริงๆแล้วมันไม่ได้ยากเลย มันเป็นอะไรที่ common sense มากๆ โดยการให้นึกถึงเรื่องนึงคือ

สมมุติให้เรามีข้อมูลจํานวนมหาศาลขนาด 1,000,000 GB ซึ่งเป็นข้อมูลของการขายทั้งปีของบริษัทแห่งนึงที่มีสินค้าอยู่ 20 รายการ … ที่นี้ลองคิดภาพว่าถ้าเราต้องการที่จะสรุปยอดขายของทั้งปีจาก dataset ชุดนี้ ลองคิดดูสิว่ามันจะต้องจัดการยังไง? เราคงต้องเสียเวลาในการ Mapping ข้อมูลต่างๆเอง เพื่อให้ได้สรุปของสินค้าแต่ละตัวใช่มั้ย?

เจ้า MapReduce มันเกิดมาเพราะต้องจัดการกับข้อมูลแบบนั้นแหละ โดยใช้ชื่อได้ตรงตัวมากก็คือ Map แล้ว Reduce หรืออีกแง่นึงก็คือ Map ข้อมูลให้เป็นชุดเดียวกันก่อน แล้วหลังจากนั้น Reduce ลดรูปให้เหลือกรุ๊ปเดียวนั้นเอง

รูปข้างล่างทํา visualize ออกมาได้สวยดี และน่าจะอธิบายจากรูปได้ง่ายว่า Map ก่อนแล้ว Reduce เป็นยังไง อ่านเต็มๆได้ที่นี้

mapreduce-hadoop
mapreduce-hadoop (https://medium.com/@aorjoa/mapreduce-%E0%B8%84%E0%B8%B7%E0%B8%AD%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3-62c33f8d9923)

โดยไว้เขียนวิธีการเขียนโปรแกรม MapReduce จริงๆอีกที ไว้แยกบทความออกไปเลยจะชัดเจนกว่า 🙂

Hadoop Ecosystem

ที่ผ่านมาคือแค่นํ้าจิ้มของ Hadoop 🙂 จริงๆแล้วเจ้า Hadoop นี้มี Ecosystem ขนาดใหญ่มากกกกกกอยู่อีก ที่เรียนมาเมื่อครู่คือเรื่องของ วิธีที่ Hadoop เก็บไฟล์, จัดการ Resources และ วิธีเรียกข้อมูล แต่…มันไม่สะดวกเท่าไรใช่มั้ยล่ะ ในการเขียน MapReduce ขึ้นมาแต่ละทีเนี่ย เพราะฉะนั้นมันเลยเกิดขึ้นมาเป็น Ecosystem ตามข้างล่างนี้เลย

hadoop-ecosystem
hadoop-ecosystem (the ultimate hands on hadoop class)

ซึ่งแต่ละตัวถูกสร้างขึ้นมาเพื่ออํานวยความสะดวกสบายให้กับการใช้ Hadoop นั้นเอง โดยให้เรามองรูปนี้ให้เป็น Stack ลําดับขั้นขึ้นมาว่าตัวไหนอยู่ level ไหนและสร้างบนอะไร

หัวใจของ Hadoop คือ สีชมพู ซึ่งมี 3 ตัวอย่างที่บอกไป ส่วนอื่นๆที่จะใช้กันบ่อยๆก็จะไม่พ้นเรื่องของ Hive ที่ช่วยให้เราเขียน SQL syntax เพื่อดึงข้อมูลออกมาจาก HDFS ได้สะดวกสบายขึ้น (จะเห็นว่ามันสร้าง on top ของ MapReduce ซึ่งทําหน้าที่เดียวกัน) หรือ Spark ที่อยู่ Level เดียวกับ MapReduce เพราะมันมีความสามารถแบบเดียวกันก็คือสามารถดึงข้อมูลจาก HDFS แต่เร็วกว่า MapReduce เป็น 100 เท่า

โดยเจ้าพวกนี้จะเอามาพูดต่อในบทความถัดๆไปน่ะ 🙂

Big Data Hadoop Solution

แล้วถ้าเราจะใช้ Hadoop เราต้องทํายังไงบ้าง? ในเมื่อ Ecosystem มันใหญ่ขนาดนี้จะเริ่มยังไง? ให้ไป Download Apache Hadoop , Hive, Spark แล้วมานั่งติดตั้งทีล่ะตัวหรอ? เสียเวลาน่าดูเลย 🙁

สิ่งที่ต้องรู้จักจริงๆ คือ Hadoop Solution Vendors ต่างหาก! ซึ่ง vendors เหล่านี้สิ่งที่เค้า Provide ให้เราก็คือระบบ Hadoop solutions ที่ configuration ทุกอย่างไว้ให้เราแล้ว สิ่งที่เราต้องทําก็คือแค่ install ลงบน server ของเรา หรือจะเป็น cloud ก็ได้ แค่นี้ก็จะไม่เสียเวลามาจัดการ environment ให้ยุ่งยากอีกแล้ว

โดยมีเจ้าตลาดหลักๆดังนี้

  1. Hortonworks
  2. Cloudera Hadoop
  3. Amazon EMR

โดยในบทความนี้ทั้งหมดจะใช้ Hortonworks Sandbox เป็นตัวทดลองเล่นกับ Hadoop ecosystem ทั้งหมด ซึ่งจะมี ecosystem เดียวกันกับรูปข้างบน ซึ่งสามารถ install ได้ตามขั้นตอน ตามตัวอย่างนี้เลย

เมื่อลงเสร็จ เราจะได้หน้าตายังงี้เลย เป็น UI เพื่อใช้ในการ manage Hadoop Ecosystem ทั้งหมด 🙂 โดยจะใช้งานผ่านหน้า UI ของ Apache Ambari เป็นหลัก (แต่ถ้าเป็นคู๋แข่งอย่าง Cloudera เจ้านี้จะใช้ Hue)

hortonswork-ambari-sandbox
hortonswork-ambari-sandbox

เจ้าตัว Sandbox นี้มีหลักๆให้ลองเล่นอยู่ 2 ประเภทคือ Docker และ VirtualBox สะดวกแบบไหน ก็เลือกแบบนั้นได้เลย … แต่จริงๆแล้วทั้งหมดน่ะเป็น Docker แหละ เพียงแต่เจ้า Hortonworks เอา Docker มาใส่ใน VirtualBox ให้เราใช้อีกที ไม่ได้มีความแตกต่างอะไรเลย เพียงแต่ถ้าใช้ virturalbox environment ที่ได้จะเสถียรกว่าหน่อย (centos) และ image ไม่รกเครื่อง 🙂

hortonworks-sandbox
hortonworks-sandbox (https://hortonworks.com/downloads/#sandbox)

Noted: ปัญหาที่พบบ่อยๆในการลองเล่น Sandbox ครั้งแรกก็คือ เรื่องของ

  1. VT-x ใน window เวลาจะรัน VB ของ hortonswork สาเหตุมาจากเครื่องมี docker อยู่ แล้วมันไปเปิด feature vtx ใน window ขึ้นมาชนกัน เพราะฉะนั้นแค่ไปปิด feature นั้นก็จะแก้ปัญหาได้ Reference
  2. Memory Issues เมื่อเราใช้ Hortonswork .. คือการจะรัน Hadoop บนเครื่องเดียวได้นี้มันต้อง allocate memory ให้กับ Hadoop ecosystem จํานวนมหาศาลเลย เพราะฉะนั้นถ้าเราไม่ได้ให้ Memory มันในระดบัที่พอดี เรามักจะเจอเวลาพยายามโหลด waiting for ambari agent to connect ในหน้า VB นั้นเอง แก้ได้โดยการเพิ่ม Ram ให้มันอย่างน้อย 8Gb นั้นเอง

เล่น Big Data แล้ว Data เอามาจากไหน?

คือ เรามี environment ขนาดนี้แล้ว พร้อมใช้งานทุกอย่าง แต่ข้อมูลไม่มีมันก็ไม่ได้ใช่มั้ยล่ะ?

ดังนั้นเราเลยไปหา dataset สําหรับ Big Data ของเราได้ที่นี้เลย Grouplens ซึ่งเป็นเว็ปที่ให้ข้อมูลเรานําไปใช้ทดลองเล่นได้ โดยเป็นข้อมูลที่มาจาก Lab ของ University of Minnesota

โดย dataset ที่เราจะใช้ก็คือ Movielens ที่เก็บข้อมูล rating ของหนังประเภทต่างๆไว้ โดยแบ่งตามขนาดของข้อมูลเช่น 20M records, 10M records หรือแม้แต่ข้อมูลเล็กๆอย่างที่เราจะใช้คือ 100k records นั้นเอง 🙂

sample-dataset-movielens
sample-dataset-movielens

โดยข้อมูลจริงๆจะอยู่ใน u.data และส่วนของ meta data ที่ define information ว่าแต่ column ทําอะไรบ้างจะอยู่ใน u.item

สรุปแล้ว

นี้คือภาพรวมเบื้องต้นของแก่น Hadoop และ ภาพรวมกับ Hadoop Ecosystem มาถึงจุดนี้แล้วทุกคนคงเข้าใจแล้วว่า Hadoop ภาพรวมเป็นอย่างไร และมี ecosystem อะไรบ้าง รวมไปถึงการใช้งาน Hadoop บนเครื่องตัวเองด้วย Hortonswork sandbox นั้นเอง

ในบทความต่อไปจะเป็นเรื่องของการ Import dataset เข้าไปใน Hadoop แล้วก็ manipulate dataset ที่เราเข้าไป ซึ่งจะทําให้เราเข้าใจการทํางานได้ดีขึ้น ถ้าได้ลองทําตามครับ 🙂

Leave a Reply

avatar

This site uses Akismet to reduce spam. Learn how your comment data is processed.