วันพฤหัสบดีที่ 1 กันยายน พ.ศ. 2559

Hadoop Training #day1

Step (1 ก.ย. 59) :

  • เตรียม Virtual machine โดยใช้ CentOS 
    • Virtualbox + Enable Virtualization Technology + Oracle Virtualbox Extension pack
[root@localhost ~]# lsb_release
LSB Version: :core-4.1-amd64:core-4.1-noarch

[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
  • เตรียม Network ภายใน โดยการเลือก สร้าง Nat Network ของ Virtual Box ก่อน และ เลือกให้ VM (CentOS) นั้น ใช้ Nat Network ที่สร้างขึ้นมา (ใน Virtual box นั้น โหมด NAT กับ NAT Network ต่างกัน ตรงที่ VM ที่ กำหนดเป็น NAT จะอยู่กันคนละ Network โดยใช้ Network interface ของ Host ในการเชื่อมต่อ Internet แต่ถ้าเป็น NAT Network VM แต่ละตัวที่อยู่ใน Host จะสามารถเชื่อมต่อถึงกันได้ และสามารถเชื่อมต่อ Internet ได้ 
  • จากนั้นให้ Disable SELinux เพื่อไม่ให้ระบบความปลอดภัยของ Linux มา Block การทำงาน เพราะ SE Linux จะสนใจเฉพาะ Policy ต่าง ๆ ไม่ดู Permission (ไม่สนใจ iptables)
  • add Trust network (10.0.2.0/24 ของ NAT Network) ใน Firewalld (ที่ไปเรียกใช้ iptables)
  • กำหนดให้ network interface ทำงานโดยอัตโนมัติเวลาเปิดเครื่อง (Connect automatically)
  • กำหนดชื่อเครื่องใน /etc/hosts
  • ติดตั้ง java พร้อม run alternatives เพื่อให้เลือกใช้ java ที่ติดตั้งใหม่
  • disable yum repository ทั้งหมด และใช้ cdh repository แทน
[root@localhost Hadoop]# rpm -ivh cloudera-cdh-5-0.x86_64.rpm 
Preparing...                          ################################# [100%]
Updating / installing...
   1:cloudera-cdh-5-0                 ################################# [100%]
  • จากนั้นแก้ไข repository ให้ใช้ packet ใน localhost และ ทำ clone vm รวมทั้งหมดเป็น 3 vm
ทำการ clone vm เป็น 3 vm กำหนด แรม 3.5 GB ให้กับ namenode และ 1 GB ให้กับ datanode

ตรวจสอบค่า IP กับ /etc/hosts ว่าตรงกันหรือไม่ สามารถ ping กันได้ทุกเครื่องไหม

กำหนด share folder ให้ name node เพื่อสามารถเข้ามาเอาไฟล์ repository ที่จะใช้ติดตั้ง hadoop
และ start web server ( systemctl start httpd และ systemctl enable httpd เพื่อให้ start ทุกครั้งที่เปิดเครื่อง)

setup SSH Key โดย ssh-keygen เพื่อให้ ssh ข้ามเครื่องโดยที่ไม่ได้ใส่ password

Hadoop configuration

core-site.xml: hdfs default File system เพื่อกำหนดว่าหัวหน้า (namenode) อยู่ที่ไหน พอร์ตไหน

hdfs-site.xml: เป็น hadoop configuration

  • namenode ดูแล metadata ที่เป็นข้อมูล file:///hadoop/name เพื่อเก็บ metadata,
  • datanode.data.dir บอกว่า datanode เก็บ data ที่ไหน (file:///hadoop/data)
  • dfs.replication บอกว่าทำกี่สำเนา (ถ้าไม่ใส่ default คือ 3 สำเนา)
  • dfs.permissions.superusergroup กำหนด group ของ user ชื่อว่า hadoop
หลังจาก start namenode web server แล้ว ตรวจสอบที่ พอร์ต  http://namenode1:50070 สามารถตรวจสอบ สถานะ และ การอ้างอิง datanode (หลังจากที่ start hdfs service ของ datanode แล้ว)

Introduction to Hadoop

Hadoop เป็นเครื่องมือที่ใช้ทำ Big Data
Big Data ประกอบด้วย

  • Volume - ข้อมูลมีขนาดใหญ่ ปริมาณมาก ระดับ Terabytes
  • Velocity - ข้อมูลมาเร็ว เช่น Facebook
  • Variety - ข้อมูลมีความหลากหลาย ไม่ใช่มีแค่ตารางในระบบฐานข้อมูล เช่น ไฟล์รูป วิดีโอ ไม่มีโครงสร้าง (unstructured) หรือ เป็นกึ่งโครงสร้าง เช่น JSON Format 
งาน Big Data ใช้ศาสตร์เดิมคือ Data Warehouse และ Data Mining มี Tool เก่า ๆ เช่น Matlab, spss sas ซึ่งใช้งานบนเครื่องเดียว ในส่วนของ Hadoop จะประมวลผลหลายเครื่อง ระบบ distributed

ตัวอย่าง 
Google มีข้อมูลที่ต้องประมวลผล ระดับ PB (1 PB = 1000 TB), Facebook ระดับ 600 TB
hdcservice.moph.go.th เก็บข้อมูลของกระทรวงสาธารณสุข ตามดู KPI ซึ่งต้องเอาข้อมูลจากโรงพยาบาลทั้งประเทศ ถูกส่งไปยังสาธารสุขจังหวัด (100 ล้านเรคคอร์ด) และ ส่งต่อมายังกระทรวง (1000 ล้านเรคคอร์ด) แต่ละโรงพยาบาลมีการเก็บข้อมูลไม่เหมือนกัน

ปัจจุบัน กระทรวงกำหนด โครงสร้าง และ ให้แต่ละจังหวัดส่งมารวม แต่ปัญหาคือ เก็บข้อมูลได้ไม่ครบ และเวลา Query ก็ใช้เวลานานมาก ก็เลยใช้ระบบ Distributed ช่วย โดยการตั้ง Server ของแต่ละจังหวัด และ ใช้ Hadoop เขียน SQL ไป query จาก 9 เครื่องของแต่ละจังหวัด จะเร็วกว่า Query พันล้านเรคคอร์ด ในเครื่องที่กระทรวงเครื่องเดียว

โครงการ Open Computer Project:
Facebook ในยุคแรก มีเครื่องที่มี power supply 1 ตัว และ harddisk แบบง่าย ๆ ไม่มีการทำ hotswap และ RAID แต่อย่างใด แต่ใช้ software ในการจัดการ

โครงการ Facebook และ Google ใช้ Opensource เป็นส่วนใหญ๋ เช่น Linux, Java MySQL, Hadoop

Hadoop คืออะไร?
Hadoop เริ่มจาก Google ในปี 2004 ที่ตีพิมพ์บทความวิจัย MapReduce และ GFS (Google File System) ที่ใช้ในการเก็บ Link ทั่วโลก เพื่อทำ Search Engine จากนั้น Mr. Dough Cutting สร้างโครงการ MapReduce และ HDFS (Hadoop File System) ที่ชื่อ Hadoop เพราะลูกเล่นตุ๊กตาช้าง และ ตุ๊กตาตัวนี้ ชื่อว่า Hadoop เกิดมากลางปี 2006 มีบริษัทใหญ่ ๆ มาร่วมด้วยจำนวนมาก

Yahoo มาร่วมทดลองเป็นคลัสเตอร์ 4000 โหนด และ Facebook พัฒนา SQL เพื่อให้ Query ได้

Map Reduce - เป็น Job scheduling เพื่อประมวลผล เขียนด้วย Java สืบทอดคลาส Map Reduce
HDFS - เป็น file system ที่ถูกจัดเก็บในหลาย ๆ เครื่อง

ทีม Facebook ไม่อยากที่จะ Java (MapReduce โดยตรง) ก็เลยพัฒนาเครื่องมือที่ชื่อว่า Hive มา Ontop MapReduce โดยการเขียน SQL Command โดยอิงจาก SQL standard และ Hive จะแปลงเป็น MapReduce ของ Java มา และจากนั้นก็มีเครื่องมือต่าง ๆ มากมาย เพื่อใช้แปลงเป็น MapReduce

HDFS Data Replication
ทำสำเนาข้อมูลข้ามเครื่อง (datanodes) เป็นเครื่องที่เก็บข้อมูล ไฟล์ที่ลงมาเก็บจะถูกหั่นเป็น block มีขนาดคงที่ (128 MB) ถ้าไฟล์ใหญ่กว่านั้น ไฟล์ก็จะถูกหั่น (part-0, จำนวนสำเนา r:2, บล็อคข้อมูล {1,3})
ค่า default ในการทำสำเนา มี 3 สำเนา กระจายไป 3 เครื่อง เสมือนเป็น RAID ข้ามเครื่อง ถ้าเครื่องไหนพัง สำเนาข้อมูลไม่ครบ เครื่องที่เหลือ ก็จะโดนทำสำเนาให้ครบ 3 โดยอัตโนมัติ (ถ้ายังมีที่ว่าง) ทันที ขึ้นกับว่าในเครื่องมีเนื้อที่เหลือขนาดไหน และเป็นการทำ Load balance เพื่อช่วยในการเข้าถึงข้อมูลได้อีกด้วย

การแบ่ง block 128 MB ของ HDFS นั้นเป็นการแบ่งในเชิง logical ถ้าเข้าไปดูไฟล์ที่เก็บใน /hadoop/data ก็จะเห็นว่าไฟล์ไม่เกิน 128 MB แต่ถ้าเกินไฟล์ก็จะถูกหั่นและมีไฟล์ที่เก็บ metadata ในการกำหนดจำนวน block (แบบ logical) สามารถสั่ง cat ต่อไฟล์ binary file กันได้เลย

ในกรณีที่เครื่องที่ล่ม กลับคืนมา มันก็จะลบ สำเนาที่ทำเพิ่ม และ ใช้ข้อมูลเดิม แต่ถ้าข้อมูลใหม่มีการ update ระบบจะตรวจสอบเวลา ว่าอันไหน ใหม่กว่า (ทุกเครื่องต้อง sync NTP กัน) และ ก็จะ copy มาทับในเครื่องเดิมที่ล่มไป และ ก็ลบสำเนาใหม่ที่เพิ่มมา หรืออาจจะตรวจสอบก่อนว่าลบเครื่องเก่าที่ up ขึ้นมาใหม่

ข้อพิจารณา: พื้นที่ 25 % ถูกกันไว้สำหรับทำ MapReduce (เสมือนกับการทดเลข) และ 75% / 3 ทำ 3 สำเนา เป็นพื้นที่จริงที่เหลือให้ใช้งาน (25%) แต่เราสามารถใช้เครื่อง Desktop ธรรมดา ใส่ Harddisk 4 ลูก ทำเป็น low cost server ได้ ไม่ทำ raid มี power supply เดียว

HDFS Architecture
ประกอบด้วย Namenode (เสมือนเป็นหัวหน้า) ดูแล metadata ของ Datanode ทั้งหมด เพื่อ หาที่อยู่ของชิ้นไฟล์ที่ถูกแบ่งว่าอยู่ที่ไหน และให้ Client เข้าไปเอาเอง หรือ เพื่อให้ Client เข้าไปเขียนไฟล์  ถ้าหัวหน้าล่ม (namenode down) ตัวที่เป็น namenode ในระบบ production จะถูก set เป็น High Availability (HA) ถ้าเครื่องที่ 1 ล่ม อีกเครื่องสามารถมาแทนได้

 ในระบบใหญ่มากจะใช้ secondary name node ซึ่ง มีได้หลายเครื่อง เพื่อช่วย namenode หลัก แต่ถ้า namenode หลักล่ม ก็จะล่มไป (คนละแบบกับ HA mode)

แต่ละเครื่องที่ใช้สามารถมีเนื้อที่ Disk ไม่เท่ากันได้ แต่ไฟล์มันจะไม่เกลี่ยกัน (ต้องตรวจสอบเครื่องมือที่ใช้เกลี่ยไฟล์)

Note: Hadoop ต่างกับ noSQL ตรงที่ noSQL เน้นการ read data เป็นหลัก ดังนั้น noSQL จะ write ที่จุดเดียว และ มีการสั่ง replicate ไปหลาย ๆ โหนด เพื่อให้ read ได้จากหลายโหนด แต่ Hadoop จะ write ได้หลายที่ และ มีการทำสำเนา



ไม่มีความคิดเห็น: