Big Data Platform with NO Hadoop YARN/MapReduce, but Still Maintain Scalability

ปัจจุบันการลงทุนทำ Big Data Platform โดยเลือกใช้ Commercialized License มักมีค่าใช้จ่ายด้าน Software License ค่อนข้างสูง และอาจต้องจ่ายแบบ Subscription อย่างต่อเนื่องไปตลอด และในกรณีเลือกใช้ Hadoop ที่มีการติดตั้ง Software ต่างๆ ใน Hadoop Ecosystem ลงไปในระบบด้วยแล้ว อาจต้องเผชิญประเด็นอื่นๆ ที่ตามมาภายหลังอีกด้วย เช่น ภาระการ Maintain services จำนวนมากให้พร้อมใช้งานตลอดเวลา ค่าใช้จ่ายด้านการ Maintenance ระบบเหล่านั้น ปัญหา Software Version Conflict ฯลฯ

เพื่อหลีกเลี่ยงประเด็นปัญหาต่างๆ ทั้งก่อนทำ Big Data Platform และในระหว่างการใช้ Big Data Platform งานเขียนนี้นำเสนอทางเลือกในการออกแบบและติดตั้ง Big Data Platform ที่ Limit capability แต่ Fit กับโจทย์ด้าน Big Data Analytics หากโจทย์ทางธุรกิจของท่านคือ “การพัฒนา Platform ที่ Scalable สำหรับประมวลผลข้อมูลและจัดเก็บข้อมูล” งานเขียนนี้มีคำตอบให้ท่าน

การจัดเก็บข้อมูลด้วย HDFS (Hadoop Distributed Filesystem)

HDFS คือ Filesystem ของ Hadoop Software ที่มี Feature ที่สำคัญคือ Distributed Filesystem ซึ่งเปิดโอกาสให้ผู้ใช้สามารถจัดเก็บไฟล์ที่มีขนาดใหญ่กว่า ขนาดความจุของดิสก์ที่เหลืออยู่ในคอมพิวเตอร์เครื่องหนึ่งได้ กลไกการทำงานเบื้องหลังของ Feature นี้คือ ไฟล์ที่ถูกส่งไปเก็บใน HDFS จะถูกแบ่ง (Partitioning) เป็น Data blocks หลายๆ ชิ้น แต่ละชิ้นจะมีขนาดประมาณ 128 Mb ถึง 1 Gb โดย Default. Feature และกลไกนี้เองที่ส่งผลให้ HDFS เป็น Storage ที่ Scalable รองรับข้อมูลที่มี Volume ใหญ่ๆ ได้.

Hadoop Software ประกอบด้วย Java programs หลายๆ ตัวที่ run เป็น Background process ซึ่งต้องอาศัย Runtime Environment อย่างเช่น JVM เหมือนเช่น Java Programs โดยทั่วไป. Hadoop จัดการดูแล HDFS ด้วย Java programs อยู่ 2 ตัว คือ “NameNode” และ “DataNode” (เน้นว่าไม่ใช่ Computer Node) โดย NameNode ทำหน้าที่ Metadata Operations ส่วน DataNode ทำหน้าที่ Read/Write Operations ดังนั้นหากเราต้องการขยายความจุของ Hadoop Storage เราก็เพียงแค่ Deploy DataNode ไปไว้ที่เครื่องคอมพิวเตอร์ใหม่ที่เพิ่มเข้ามาใน Hadoop Cluster วิธีการนี้ในทางเทคนิคนิยมเรียกว่า “Scale-out”

การประมวลผลข้อมูลในแบบ Distributed Computing ด้วย MapReduce

Hadoop มี Feature ด้านการประมวลผลข้อมูลที่เป็นแบบ Multi-hosts process ซึ่งเป็น Distributed Computing เรียกว่า MapReduce. คุณค่าของการประมวลผลแบบ MapReduce คือ การลด Data movement ซึ่งอธิบายได้ว่า แทนที่จะเคลื่อนย้ายข้อมูลจากหลายๆ Node มาประมวลผลที่ Runtime ซึ่งอยู่ใน Node ใด Node หนึ่ง MapReduce เลือกที่จะเคลื่อนย้าย Code program ไปประมวลผลที่ Runtime ซึ่งอยู่ในหลายๆ Node แทน. การจัดการการประมวลผลแบบ MapReduce ต้องอาศัย Java process ที่ run เป็น Backgroup process อยู่ 2 ตัว คือ ResourceManager และ NodeManager ซึ่ง Hadoop เรียกการจัดการในส่วนนี้ว่า YARN ( Yet Another Resource Negotiator).

การออกแบบและสร้าง Big Data Platform with Non-YARN

นอกเหนือจาก MapReduce แล้ว ยังมี Distributed Computing แบบอื่นๆ อีกหลายตัว Apache Spark เป็นซอฟต์แวร์หนึ่งที่มีความสามารถด้าน Distributed Computing และลด Data movement ได้เช่นเดียวกับ MapReduce แต่ Apache Spark สามารถทำงานในโหมดที่เรียกว่า “Standalone” ซึ่งเป็นโหมดการทำงานที่ Apache Spark สามารถจัดการการประมวลผลได้ด้วยตัวเองโดยไม่ต้องพึ่งพา YARN ได้. ด้วยเหตุนี้ ผู้เขียนจึงเกิดแนวคิดในการออกแบบ Big Data Platform ที่ยังคง Scalable ทั้งในส่วน Storage และ Process โดยที่ไม่ต้องมี YARN อีกต่อไป

รูปที่ 1 Big Data Platform ที่ประกอบด้วย Distributed Storage คือ HDFS และ Distributed Processing คือ Apache Spark โดยไม่มี YARN

รูปที่ 1 แสดง Big Data Platform ที่มีสถาปัตยกรรมทางเทคโนโลยีในแบบ Multi-nodes clusters โดยมี Master จำนวน 1 Node และ Worker จำนวน 2 Node ที่ประกอบด้วย OS, Runtime Environment, HDFS และ Apache Spark. การติดตั้ง HDFS ผู้เขียนศึกษาจากงานเขียน How To Set Up a Hadoop 3.2.1 Multi-Node Cluster on Ubuntu 18.04 (2 Nodes) และการติดตั้ง Apache Spark ผู้เขียนใช้วิธีการติดตั้งตามงานเขียน Advanced Analytics and Deep Learning

การนำ Big Data Platform ไปทดสอบกับโจทย์ Big Data Analytics

ผู้เขียนนำ Big Data Platform ข้างต้นไปทดสอบกับโจทย์ Predictive Analytics โดยเริ่มตั้งแต่การวาง raw dataใน HDFS และโหลด raw data จาก HDFS ขึ้นมาพัฒนาเป็น Training/Testing set สำหรับ Algorithm: Decision Tree เพื่อใช้สร้างและประเมิน Machine learning model ด้วย Apache Spark

รูปที่ 2 การโหลด raw data ขึ้นมาจาก HDFS เพื่อนำไปพัฒนาเป็น training/testing set
รูปที่ 3 Machine Learning Model ที่ได้รับจากการ train model ด้วยข้อมูล training set จาก HDFS

นอกจากนี้ ผู้เขียนยังได้นำ Big Data Platform ไปทดสอบในงาน Data Engineer และสร้าง Summary Report อีกด้วย

รูปที่ 5 การสร้าง Summary Report ด้วยคำสั่ง SQL บน Apache Spark

สรุป

เราสามารถออกแบบและพัฒนา Big Data Platform สำหรับการทำ Big Data Analytics ที่ใช้ HDFS เป็น Storage และ Apache Spark เป็น Process ซึ่งมีความสามารถในการทำ Analytics ที่หลากหลาย และยังมี Scalability ที่ดีโดยไม่ต้องพึ่งพาการทำงานของ YARN และเป็น Enterprise-grade software ที่ไม่ต้องเสียค่า Software License ในการใช้งานอีกด้วย

Experienced Senior Big Data & Data Science Consultant with a history of working in many enterprises and various domains . Skilled in Apache Spark, and Hadoop.

Experienced Senior Big Data & Data Science Consultant with a history of working in many enterprises and various domains . Skilled in Apache Spark, and Hadoop.