เริ่มศึกษา Big Data แนวนักพัฒนาโปรแกรมจาก Eco System กัน

การศึกษาเรื่อง Big Data ที่กำลังเป็นกระแสที่มาควบคู่กับ IoT (Internet of Thing) หลายๆคน น่าจะมีปัญหาเดียวกับผมสำหรับช่วงแรกๆ ของการเริ่มตรียม environment สำหรับการทดลองเล่นและเขียนโปรแกรมกับงาน Big Data วันนี้เลยนำเสนอวิธีติดตั้ง เซตเล่นเองแบบง่ายๆ ที่สำคัญไม่หนักเครื่อง ไม่ต้องเช่า Cloud ให้เสียตังค์ (สำหรับคนที่เพิ่งเริ่ม และลองเล่นกับชุดข้อมูลเล็กๆ เพื่อสร้าง model ก่อนที่จะไปเล่นกับข้อมูลหลัก TB หรือ PB)

ปล. Big Data คืออะไรผมไม่ขอพูดถึงให้เสียเวลานะ มีคนเขียนกันไวัเยอะแล้ว ลองค้นใน Google หรือถ้าหาอ่านแบบง่ายๆ ลองดูที่ [ Link ] นี้นะครับ

 

ถ้าจะเริ่มเล่นกับ Big Data ควรรู้อะไรบ้าง

  1. สำหรับติดตั้งระบบ (Administrator): ควรมีความรู้เกี่ยวกับ Linux OS การใช้คำสั่งต่างๆ การติดตั้งระบบ หรือการใช้งานพวก VM Ware เพื่อให้สามารถติดตั้งระบบใช้เองได้
  2. สำหรับการจัดการ (Manage): ควรมีความรู้เรื่องระบบ file system และ database รวมถึงการใช้ภาษา SQL ในระดับพื้นฐาน
  3. สำหรับการโปรแกรม (Develop): ควรมีความรู้ภาษาโปรแกรม เช่น Java, Python หรือ Scala (แรกๆ จะใช้ Java แต่เดี๋ยวพอไปเล่นกับ Spark เอกสารส่วนใหญ่จะเน้นให้ใช้ Scala ครับ)
  4. สำหรับการวิเคราะห์ (Analytic): ความรู้ในเรื่องของการวิเคราะห์ ประมวลผลข้อมูล พวกวิชา สถิติ , machine learning
  5. สำหรับการนำเสนอ (Visualize): ความรู้การใช้เครื่องมือที่แปลงข้อมูลให้เป็น chart หรือแผนภาพ เช่น java script D3.js , R, gnuplot

 

อยากเริ่มเล่นแบบเร็วๆ มีทางเลือกไหนบ้าง

  1. ถ้าเครื่องแรงๆ RAM ซัก 16GฺB  ลองไปโหลด Sanbox ของ HortonWork หรือ VM ของ Cloudera มาเล่นได้ (ถ้าไม่แบ่ง RAM ให้ VM ซัก 8GB ตอนที่ใช้งานจะหงุดหงิดมากๆ 555)
  2. ถ้าอยากลองเล่นผ่าน Cloud แบบจำกัดเวลาลองของ Google Cloud DataProc หรือเจ้าอื่นๆอย่าง Amazon EMR หรือ Microsoft Azureได้
  3. โหลด VM ของ Ubuntu หรือ CenOS จาก osboxes.org มาติดตั้ง Hadoop และโปรแกรมอื่นๆ เล่นเอง (ตัวนี้ที่ผมใช้เล่นอยู่ แบ่ง RAM ให้แค่ 4 GB ก็ยังรันลื่นดี)

** สำหรับ Hadoop Distribution ที่เป็น Eco-system และนิยมใช้กันจะมีประมาณ 3 เจ้า คือ Horton Work, Cloudera, MapR เป็นต้น อยากรู้ว่าแต่ละตัวเป็นยังไง ลองหาข้อมูลดูครับ **

เริ่มต้นศึกษา ควรลงอะไรบ้างนะ

  1. ลง Java JDK เพราะตัว Hadoop และตัวอื่นๆ ตั้งใช้งาน Java ในการทำงาน ดาวน์โหลดได้ที่ [ Link ]
  2. ลง Hadoop ก่อนเลยครับ เพราะเป็นตัวหลักในการทำงานแบบ Distributed Process และ  HDFS ดาวน์โหลดได้ที่ [ Link ] ดูที่เป็น .tar.gz
  3. ถ้าอยากลองตัวอื่นๆ ก็ค่อยลงเพิ่มได้ ที่แนะนำคือ Pig, Hive, และ  HBase เพื่อลองเล่นและให้รู้ว่าอะไรเป็นอะไร ใช้ตอนไหน หลังจากนั้นค่อยมาเล่นพวก Sqoop, Flume, Strom หรือ Spark (ถ้าไปดูพวกเครื่องมือที่เกี่ยวกับ Big Data ทีมีทั้งหมดแล้วอาจจะตกใจ เพราะมันเยอะมาก [ Link ] แค่จะเลือกใช้ก็ตาลายแล้ว ถ้ามีเวลาก็ควรศึกษาทุกตัวจะได้รู้ว่าตัวไหนจะใช้เมื่อไหร่ ข้อดีข้อเสียเป็นยังไง)
  4. ตัวที่ใช้ในการจัดการเครื่องมือทั้งหมดที่อยู่ใน Eco-system ของเรา อย่าง Cloudera จะใช้ Hue  ส่วน Horton Work จะใช้ Ambari

 

การติดตั้ง Hadoop มีกี่แบบ

  1. แบบ Stand alone : จะใช้การประมวลผลบนเครื่องเดียว และทำงานกับไฟล์บน Local
  2. แบบ Pseudo Distributed:  จะจำลอง namenode และ datanode อยุ่บนเครื่องเดียว รองรับการทำงานแบบ HDFS (Hadoop Distributed File System) เหมาะสำหรับนักพัฒนา เพราะสามารถจำลองทุกอย่างได้เหมือนกับระบบ Cluster
  3. แบบ Full Distributed:  เป็นการติดตั้งสำหรับงาน production มีเครื่อง server เยอะๆ CPU + RAM และ Disk เยอะๆ เป็นกลุ่ม Cluster หรือ Server Farm สำหรับการประมวล Big Data จริงๆที่ต้องทำกับข้อมูลระดับ TB (Tera Byte) หรือ PB (Peta Byte)

** 1 Byte = 8 bit, 1 Kb = 1024 Byte, 1MB = 1024 KB, 1GB = 1024MB, 1 TB = 1024GB, 1 PB = 1024 TB : ปรกติ DVD 1 แผ่นเก็บข้อมูลได้ประมาณ 5 GB **

เริ่มติดตั้ง Hadoop ไว้ใช้งานใน Ubuntu กัน 

ตัวนี้ผมใช้ Hadoop 2.7.2  และ JDK 8 ติดตั้งแบบ Standlone

เตรียมการก่อนติดตั้ง โดยการ update package (ใช้ internet) และสร้าง user ชื่อ hadoop

*** เปิด หน้าจอ Terminal  แล้วใช้ sudo apt-get ถ้าถาม password ของ osboxes ให้ใส่ osboxes.org ***

~$ sudo apt-get update && sudo apt-get upgrade
~$ sudo apt-get install build-essential ssh lzop git rsync curl
~$ sudo apt-get install python-dev python-setuptools
~$ sudo apt-get install libcurl4-openssl-dev
~$ sudo easy_install pip
~$ sudo pip install virtualenv virtualenvwrapper python-dateutil

*** Disable การใช้งาน IPv6 (เฉพาะกับ Ubunto)

แก้ไข ไฟล์ /etc/sysctl.conf
~$ gedit /etc/sysctl.conf

เพิ่ม 4 บรรทัด ไว้ล่างสุดของไฟล์:
# disable ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

Restart แล้วทดสอบโดยการดู flag ที่เปลี่ยนไป (ไว้รอ restart ทีเดียวหลังสร้าง user hadoop ก็ได้)
~$ cat /proc/sys/net/ipv6/conf/all/disable_ipv6
ค่าควรจะเป็น 1

 

*** สร้าง user ชื่อ hadoop  , passoword: hadoop แล้ว login ใหม่ด้วย user นี้ ***

~$ sudo addgroup hadoop
~$ sudo useradd -m -g hadoop hadoop
~$ sudo usermod -a -G hadoop osboxes
~$ sudo usermod -a -G sudo hadoop
~$ sudo passwd hadoop

**** หลังจาก restart และ login เป็น user hadoop ให้สร้าง ssh-key ก่อน (จริงๆ ยังไม่ได้ใช้สำหรับ Standalone)****

~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hadoop/.ssh/id_rsa):
Created directory ‘/home/hadoop/.ssh’.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/hadoop/.ssh/id_rsa.
Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub.
[… snip …]

~$ cat /home/hadoop/.ssh/id_rsa.pub >> /home/hadoop/.ssh/authorized_keys
~$ chmod 600 /home/hadoop/.ssh/authorized_keys

****ทดสอบการใช้งาน ssh
~$ ssh -l hadoop localhost

**** กรณีไม่สามารถเข้าได้ ขึ้นพวก Connection Refuse
** เช็คว่าพอร์ต ssh เปิดรึยัง: sudo service sshd status or netstat –an (:22)
** ติดตั้ง sshd : sudo apt-get install openssh-server
** start sshd service:   sudo service sshd start

 

สิ่งที่ต้องมี :  

  • VM Player 12 ดาวน์โหลดจาก VM Ware
  • Ubuntu 16 VM Ware ดาวน์โหลดจาก osboxes.org
  • Java JDK8 ดาวน์โหลดจาก  [ Link ]  (jdk-8u91-linux-x64.gz)
  • Hadoop 2.7.2 ดาวน์โหลดได้จาก [ Link ] (hadoop-2.7.2.tar.gz)

การติดตั้ง Java JDK โดยการแตกไฟล์ แล้ว ย้ายไปไว้ที่ /usr/lib/jvm

~$ tar zxf jdk-8u91-linux-x64.gz
~$ sudo mkdir /usr/lib/jvm
~$ sudo mv jdk-8u91 /usr/lib/jvm/jdk-8u91

*** ใช้ gedit เพื่อแก้ไฟล์ .bashrc เพิ่ม JAVA_HOME and PATH
~$ gedit ~/.bashrc

เพิ่ม 2 บรรทัด ไว้ที่ต้นๆไฟล์
export JAVA_HOME=/usr/lib/jvm/jdk-8u91
export PATH=$PATH:$JAVA_HOME/bin

บันทึกแล้วปิด ออกมารันคำสั่ง source เพื่อ update environment
~$ source ~/.bashrc

ทดสอบการติดตั้ง java
~$ java –version

การติดตั้ง Hadoop

ไปยังโฟลเดอร์ ที่ดาวน์โหลไฟล์เก็บไว้
~$ tar -xzf hadoop-2.7.2.tar.gz
~$ sudo mv hadoop-2.7.2 /srv/
~$ sudo chown -R hadoop:hadoop /srv/hadoop-2.7.2
~$ sudo chmod g+w -R /srv/hadoop-2.7.2
~$ sudo ln -s /srv/hadoop-2.7.2 /srv/hadoop

แก้ไขไฟล์ .bashrc โดยเพิ่มต่อจากของ Java เมื่อกี้นี้
~$ gedit ~/.bashrc

# Set the Hadoop Related Environment variables
export HADOOP_HOME=/srv/hadoop
export PATH=$PATH:$HADOOP_HOME/bin

*** update environment แล้วทดสอบ hadoop
~$ source ~/.bashrc
~$ hadoop version

*** แก้ไขไฟล์ hadoop-env.sh
~$ gedit $HADOOP_HOME/etc/hadoop/hadoop-env.sh

# เพิ่มข้อมูล
export JAVA_HOME=/usr/lib/jvm/jdk-8u91

 

ทดสอบโดยการรันโปรแกรม wordcount ที่ติดมากับตัว hadoop

สำรวจโปรแกรม hadoop-mapreduce-example-xxx.jar ใน $HADOOP_HOME/share/Hadoop/mapreduce/

เตรียมไฟล์ input
~$ mkdir input
~$ cp $HADOOP_HOME/*.txt input
~$ ls -l input

รันโปรแกรม “wordcount” example
~$hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount input output

ตรวจสอบผล โดยการดูที่ไฟล์ part ใน folder output
~$ gedit ~/output/part-00000

 

ทำเป็นวิดีโอให้แล้วนะครับ ความยาวประมาณ 24 นาที (ว่าจะทำสั้นๆ ไหงมันยาวจังก็ไม่รู้ มือใหม่หัด cast)


https://youtu.be/Y1iY6dE2DpY

*** ใครที่ใจร้อน เริ่มมันมือแล้ว สามารถเข้าไปเล่นตามใน tutorialpoint.com ก่อนได้เลยครับ แต่ส่วนใหญ่จะเก่าหน่อยเป็น Hadoop 1.x บางอันจะใช้กับ environment ปัจจุบันไม่ได้ ***

ปล. ใครที่อยากได้ตัว VM ที่ลงทุกอย่างแล้วลอง PM มาขอได้ครับขนาดน่าจะไม่เกิน 5GB มีครบทุกอย่างยัน Spark กับ Zeppelin

AjBee.Me: ครั้งหน้าเรามาลองติดตั้งแบบ Pseudo Distribute [ Link ตอนที่ 2 ] และลองเขียนโปรแกรม MapReduce เบื้องต้นกัน ^_^

ติดตามข้อมูลผ่าน FanPage เข้าไปกด Like ที่: https://www.facebook.com/AjBeeMePage