วันศุกร์ที่ 30 กันยายน พ.ศ. 2559

Wireless Personal Area Networks

Wireless Personal Area Networks (WPAN) เป็นกลุ่มของเทคโนโลยีที่ใช้สำหรับการติดต่อในระยะใกล้ ในช่วง 10-30 เมตร เทคโนโลยีเหล่านี้ ถูกออกแบบมาใช้ในการส่งข้อมูลโดยไม่ใช้สายเคเบิ้ล ทำให้ง่ายต่อการติดตั้ง สะดวก และดูสวยงามกว่าการเดินสาย โดยเฉพาะในจุดที่การเดินสายเคเบิ้ลทำได้ลำบาก

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

WPAN จะเน้นไปที่ใช้กำลังไฟฟ้าต่ำ ต้นทุนต่ำ และมีความปลอดภัย โดย WPAN จะแบ่งออกเป็น 2 กลุ่มใหญ่ ๆ คือที่เป็น Low Data Rate ได้แต่ Bluetooth, ZigBee และ High Data Rate: WirelessHD, WHDI, WiGig, UWB

Low Rate WPAN:

Bluetooth มีชื่อมาจากกษัตริย์ Harald Bluetooth จากประเทศเดนมาร์ก มีบริษัท Ericsson เป็นผู้ริเริ่มตั้งแต่ปี 1994 ส่งข้อมูลที่ย่านความถี่ 2.4 GHz ใช้ ออกแบบใช้กับอุปกรณ์ขนาดเล็ก อุปกรณ์พกพา กินกำลังไฟต่ำ ตามมาตรฐาน IEEE 802.15.1 ที่กำหนดมาตรฐานการส่งข้อมูลของ Physical layer และ Mac layer ซึ่งได้รับการรับรองในปี 2002 แต่ต่อมา กลุ่มบริษัทผู้ผลิต Bluetooth รวมตัวกัน ตั้งแต่เป็น Bluetooth SIG (Special Interest Group) ได้แต่ Sony, Nokia, Microsoft, Apple เป็นต้น และ IEEE 802.15.1 ก็เลิกพัฒนาแล้ว Bluetooth SIG จึงทำหน้าที่พัฒนาดูแลตรงนี้ต่อแทน

Bluetooth ในตอนเริ่มต้น ได้ทดสอบการส่งข้อมูลไร้สาย แทนการใช้ สาย RS-232 Serial port โดยการ พัฒนา RFCOMM ซึ่งเป็น Serial port emulator


รูปแสดง RFCOMM แทน RS-232

Bluetooth รุ่นที่ 1.1 - 1.2: สนับสนุนความเร็วสูงสุด 1 Mbps
Bluetooth รุ่นที่ 2.1: สนับสนุนความเร็วสูงสุด 2-3 Mbps
Bluetooth รุ่นที่ 3: สนับสนุนความเร็วสูงสุด 24 Mbps
Bluetooth รุ่นที่ 4: เน้นที่การประหยัดพลังงาน Bluetooth Low Energy (BLE)

Bluetooth Protocol Stack

รูปแสดง Bluetooth Protocol Stack

Physical Layer - กำหนดการส่งข้อมูลในระดับบิต แปลงบิตเป็นคลื่นวิทยุ ตามที่ออกแบบน OSI Physical Layer มี Bluetooth transceiver เป็นตัวรับส่งข้อมูล Bluetooth เฟรม ประกอบด้วย Access Code (72 บิต), Header (52 บิต) และ Payload (0-2745 บิต) ข้อมูลที่ถูกส่งจะใช้ Gaussian Frequency Shift Keying (GFSK) ร่วมกับ หลักการของ FHSS ในการส่งข้อมูล

Link Manager - จัดการการส่งข้อมูล ควบคุม Physical Link 2 ชนิด ได้แก่
  • Asynchoronous Connectionless (ACL) Link  ส่งข้อมูลแบบ packet switching สำหรับ Point-to-Multipoint แบบ Asymmetric data (ที่ความเร็ว 723.2/57.6 kbps) และสามารถ ส่ง packet ใหม่ กรณีที่เกิดข้อผิดพลาดขึ้น ACL ใช้ในการสร้าง SCO Link
  • Synchronous Connection Oriented (SCO) Link ส่งข้อมูลแบบ circuit switching สำหรับ Point-to-point  แบบ Symmetric data (ที่ความเร็ว 433.9 kbps และ 64 kbps x 3 แชนแนล สำหรับเสียง) ระหว่าง Master และ Slave ทั้ง Master และ Slave สามารถมี SCO Link ได้สูงสุดไม่เกิน 3 SCO Link 

ใน Link Mnager ใช้ 3 วิธีในการควบคุมความผิดพลาดของข้อมูล คือ Forward Error Correction (FEC) และ Automatic Retransmission reQuest (ARQ) ดังนี้
  • 1/3 FEC จะทำซ้ำข้อมูลเพิ่มจากเดิม 2 เท่า เช่น Header ของ Bluetooth มีขนาด 18 บิต หลังผ่านกระบวนการ 1/3 FEC จะทำการคัดลอกบิตเพิ่มอีก 36 บิต รวมเป็น 54 บิต ด้วยวิธีการนี้ หากมีข้อผิดพลาดเกิดขึ้น ก็สามารถแก้ไขบิตได้เลย โดยที่ไม่จำเป็นต้องส่งข้อมูลกลับมาใหม่ อย่างไรก็ดี ความเร็วในการส่งข้อมูล จะถูกลดลง เหลือ 1/3 เท่าเช่นกัน จึงไม่แนะนำให้ใช้กับข้อมูล แต่ใช้กับ ส่วนหัวข้อมูล เนื่องจากมีความสำคัญและมีจำนวนบิตไม่มากเกินไป 
  • 2/3 FEC จะทำซ้ำข้อมูลเพิ่มจากเดิมเพียง 1/3 เท่า เช่น ข้อมูล ของ Bluetooth มีขนาด 8 บิต หลังผ่านกระบวนการ 2/3 FEC มีการเพิ่มบิตจากเดิมเพียง 3 บิต (8/3 ≈ 3) รวมเป็น 11 บิต ด้วยวิธีการนี้ หากมีข้อผิดพลาดเกิดขึ้นไม่เกิน 1 บิต จะสามารถแก้ไขบิตได้เลย แต่หากผิดมากกว่านั้น สามารถตรวจสอบข้อผิดพลาดได้ แต่ไม่สามารถแก้ไขได้ จึงต้องพี่งพากลไกร้องขอการส่งข้อมูลใหม่
  • ARQ เป็นกระบวนการร้องขอให้ต้นทางส่งข้อมูลมาใหม่ จนกว่าจะได้รับการตอบรับ (Acknowledgement)  หรือหมดเวลา (timeout) ที่ถูกกำหนดไว้ในอุปกรณ์

Bluetooth Power Mode:




รูปแสดงการเชื่อมต่อของ Bluetooth และ การประหยัดพลังงาน

ใน piconet ของ Bluetooth จะมีอุปกรณ์ ทำหน้าที่เป็น Master เชื่อมต่อกับ Slave ไม่เกิน 7 ตัว และ ตัวที่เป็น Slave ก็สามารถเป็น Master ของ piconet อื่น ๆ ได้ Slave จะไม่สามารถติดต่อกันเองโดยตรงได้ โดยปรกติ หาก Slave กำลังรับส่งข้อมูลกับ Master จะอยู่ใน Active โหมด อย่างไรก็ดี Slave สามารถประหยัดพลังงาน โดยมีโหมดประหยัดพลังงาน 3 โหมด คือ โหมด Sniff จะลดอัตราการรับส่งข้อมูลลง, โหมด Hold Slave มีการเชื่อมต่อกับ Master โดยเวลายังคงเข้าจังหวะ (Synchronize) กัน และ โหมด Park เป็นโหมดที่ประหยัดพลังงานมากที่สุด หลับในช่วงเวลานานและอาจจะมาเข้าจังหวะกับ Master เป็นบางครั้ง

Logical Link Control Adaptation Protocol (L2CAP) - เป็น Logical Link Control Layer ที่รับผิดชอบเกี่ยวกับการแบ่งและรวมแพ็คเก็จ ที่รับมาจาก Layer ที่อยู่ติดกัน บริหารจัดการ การเชื่อมต่อ (Connection) รวมถึงควบคุมการไหลของข้อมูล และให้บริการ QoS ได้

Application Profile - เป็น Application ที่กำหนดการทำงานของอุปกรณ์ Bluetooth นั้น เทียบเท่ากับการทำงานใน Applciation layer ใน OSI เช่น A2DP สำหรับหูฟังไร้สาย, AVRCP สำหรับรีโมทควบคุมอุปกรณ์, และ HFP สำหรับรถยนต์เชื่อมต่อกับโทรศัพท์ เพื่อรับสาย เป็นต้น


ZigBee

เป็นชื่อของเทคโนโลยีไร้สายในการเชื่อมต่อกับอุปกรณ์ระยะใกล้ ความเร็วต่ำ (< 250 kbps) กินพลังงานน้อย แบตเตอรี่สามารถใช้งานได้นาน และสามารถเชื่อมต่อกันได้หลายรูปแบบ (เช่น แบบดาว, แบบต้นไม้,  และ แบบตาข่าย (mesh) )

ZigBee จะแบ่ง Node ออกเป็น 3 ชนิดคือ
  1. Reduced Function Device (RFD) - คือ อุปกรณ์ปลายทาง เช่น สวิทช์ โคมไฟ ไม่สามารถจะส่งต่อแพ็คเก็จข้อมูลได้
  2. Full Function Device (FFD) คือ อุปกรณ์ Zigbee ที่สามารถส่งต่อมูลได้
  3. PAN Coordinator คือ อุปกรณ์ Zigbee ที่เป็น FFD ตัวแรก ที่จัดตั้งเครือข่าย piconet ขึ้นมา โดยส่วนมากจะเป็น Sink Device เช่น โทรศัพท์ PAN Coordinator มีหน้าที่กำหนดเวลา เพื่อใช้ในการเข้าจังหวะ การเชื่อมต่อระบบเครือข่าย รวมถึงสามารถทำ QoS กำหนดความสำคัญของโหนดต่าง ๆ ที่ใช้สิทธิ์ในการส่งข้อมูล


รูปแสดงตัวอย่าง ZigBee Topology
(จาก http://www.icpdas-usa.com/images/zigbee_topology.jpg)

ZigBee ใช้วิธีการส่งข้อมูลแบบ DSSS โดยแบ่งเป็น 27 channel ของ 3 ช่วงความถี่ คือ 
  1. 868 MHz (1 channel กว้าง 600 kHz) มีใช้ในยุโรป ส่งข้อมูลที่ความเร็วสูงสุด 20 Kbps
  2. 915 MHz (10 channel แต่ละ channel กว้าง 2 MHz) มีในในอเมริกา และ ออสเตรเลีย ส่งข้อมูลที่ความเร็วสูงสุด 40 Kbps
  3. 2.450  GHz ใช้งานทั่วโลก (16 channel แต่ละ channel กว้าง 5 MHz) ซึ่งเป็นช่วงความถี่ที่กว้างมากที่สุด มีใช้งานในประเทศไทย (XBee) ส่งข้อมูลได้ที่ความเร็วสูงสุด 250 Kbps 

การส่งข้อมูลของ Zigbee จะใช้ superframe โดยจะมี beacon เป็นข้อมูลอธิบายข้อมูลของ superframe คือ ซึ่ง แบ่งเป็น 2 ส่วน 
  •  Content Access Period (CAP) อุปกรณ์ใน piconet จะใช้ CSMA/CA เพื่อขอใช้สิทธิ์ในการส่งข้อมูล
  • Guaranteed Time Slots (GTS) ใช้สำหรับข้อมูลที่มีความสำคัญ โดย PAN จะเป็นคนกำหนด frame interval ว่าให้ โหนดใด ใน piconet มีสิทธิ์ในการส่งข้อมูล (หรืออาจจะไม่ใช้ GTS แล้วกำหนดเป็นช่วงเวลา CAP แทนก็ได้)

การเชื่อมต่อ piconet ของ ZigBee จะแบ่งเป็น 2 แบบคือ
  • child piconet: PicoNet Coordinator (PNC) มี piconet เป็นของตัวเอง แต่เป็น child ให้กับ piconet วงอื่น ในลักษณะของ parent piconet
  • neighbour piconet: PNC มี piconet เป็นของตัวเอง แยก piconet กัน และติดต่อระหว่าง piconet กันเอง เพื่อใช้ synchronize เวลาสำหรับการรับส่งข้อมูลระหว่าง piconet กัน


High Rate WPAN:

High Rate WPAN คือเทคโนโลยีไร้สายระยะใกล้ที่ออกแบบมาเพื่อใช้กับการส่งข้อมูลความเร็วสูง เช่น วิดีโอที่ไม่มีการบีบอัด พหุสื่อ (Multimedia) ต่าง ๆ กินกำลังไฟน้อย ต้นทุนต่ำ เชื่อมต่อได้ง่าย อัตโนมัติ สามารถรับประกันการให้บริการได้ รวมถึงมีบริการด้านความปลอดภัย ซึ่งมีมาตรฐานที่น่าสนใจ 3 แบบ คือ WHDI, WirelessHD, และ WiGig (อยู่ระหว่าง WPAN/WLAN ระยะการเชื่อมต่อ 30-100 เมตร)

WHDI
Wireless Home Digital Interface (WHDI) เป็นมาตรฐานของคุณสมบัติอุปกรณ์ไฟฟ้าที่เชื่อมต่อกับโทรทัศน์ที่มีความละเอียดสูงแบบไร้สาย โดยการส่งวิดีโอความละเอียดสูง (1080p) จากเครื่องเล่นวิดีโอ เช่น บูลเรย์ดีวีดี หรือ โทรศัพท์มือถือ และอุปกรณ์อื่น ๆ ที่สนับสนุน WHDI ออกแบบและพัฒนาโดยกลุ่มบริษัทชั้นนำต่าง ๆ  เช่น AMIMON, Sony, Samsung, LG, Sharp เป็นต้น นอกจากนี้ WHDI ยังสนับสนุนการเชื่อมต่อ HDMI รวมถึงระบบการป้องกันการคัดลอกวิดีโอด้วย

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

WirelessHD
WirelessHD เป็นการส่งข้อมูลที่ความถี่ 60 GHz สนับสนุนความเร็ว 10-28 Gbps ในระยะ 10 เมตร พัฒนาตามมาตรฐาน 802.15.3c (มาตรฐานนี้ หยุดพัฒนา เมื่อเดือน พ.ย. 2009) เพื่อใช้ส่งวิดีโอความละเอียดสูง มีบริษัทหลายบริษัทเข้าร่วม เช่น Sony, Dell, Sharp เป็นต้น มีสินค้ามากมาย เช่น คอมพิวเตอร์พกพา  โปรเจคเตอร์ ตัวส่งวิดีโอไร้สาย เป็นต้น

WirelessHD แบ่ง Physical Layer ออกเป็น 3 โหมด

  • Low Rate Physical (LRP) ส่งข้อมูลที่ความเร็ว 2.5 - 40 Mbps
  • Medium-or-High Rate Physical (MHRP) 476 Mbps - 2 Gbps
  • High Rate Physical (HRP) ส่งข้อมูลที่ความเร็ว 7-25 Gbps

 สนับสนุน HDMI และ USB และมีการใช้เทคนิค Spatial multiplexing ในเมื่อส่งข้อมูลด้วยความเร็วสูง


รูปแสดง การส่งข้อมูลโดยใช้เทคนิค Spatial Multiplexing

Spatial multiplexing เป็นการแบ่งเฟรมออกเป็นขนาดเล็ก ๆ ของแต่ละสตรีมข้อมูล แล้วแยกส่วนส่งไปตามเสาอากาศหลายเสาพร้อมกันแบบขนาน เพื่อเพิ่มความเร็วในการส่งข้อมูล และยังใช้งานร่วมกับเทคนิคบีมฟอร์มมิ่งในการเพิ่มความถูกต้องของข้อมูล


WiGig
WiGig ถูกพัฒนาจาก WiFi ที่ใช้ส่งข้อมูลระหว่างอุปกรณ์อิเล็คทรอนิคต่าง ๆ เช่น โทรศัพท์มือถือ แท๊ปเล็ต และ เซ็นเซอร์ต่าง ๆ จนไปถึงยุคของ Internet of Things (IoTs)  WiGig ถูกกำหนดภายใต้ IEEE802.11ac ทำงานที่ความถี่ 5 GHz ซึ่งเป็นที่นิยมในประเทศไทย และ IEEE802.11ad ทำงานที่ความถี่ 60 GHz มีความเร็วสูงสุดถึง 7 Gbps

มี Protocol Adaptation Layer (PAL) เพื่อช่วยในการเป็นตัวกลางของการติดต่อระหว่างชั้น MAC กับ อุปกรณ์วิดีโอต่าง ๆ เช่น HDMI, USB 3.0, PCIe เป็นต้น

นำเทคนิค Beamforming มาช่วยทำให้การส่งสัญญาณจากผู้ส่ง ส่งไปหาผู้รับได้ชัดเจน มีประสิทธิภาพมากยิ่งขึ้น เทคนิคนี้อาศัยการป้อนข้อมูลกลับจากผู้รับ เพื่อให้ผู้ส่งปรับ เฟส และ แอมพลิจูน รวมถึงพารามิเตอร์อื่น ๆ ให้ส่งไปยังผู้รับได้ถูกต้องมากยิ่งขึ้น นั่นหมายความว่า ผู้ส่งจะต้องมีหน่วยความจำ หน่วยประมวลผล ที่มากกว่าเดิม เพื่อคำนวณเรื่องนี้ และ ถูกกำหนดเป็นมาตรฐานของ IEEE802.11ac และ IEEE802.11ad ด้วย

IEEE802.11ad ในช่วงความถี่ 60 GHz รวมถึงการ compatible กับ WiFi ในย่าน 2.4 และ 5 GHz ใช้การมอดูเลชั่น 2 แบบคือ (1) Single-carrier สำหรับอุปกรณ์พกพา เพราะใช้พลังงานน้อยกว่า สนับสนุนที่ความเร็วสูงสุดถึง 4.6 Gbps  (2) OFDM สนับสนุนการส่งข้อมูลที่ความเร็วการส่งข้อมูลสูงสุดถึง 7 Gbps

รายละเอียดของ WiGig จะอธิบายเพิ่มเติมในเรื่อง WLAN กับ IEEE 802.11 series

วันเสาร์ที่ 3 กันยายน พ.ศ. 2559

Hadoop training #day3


Impala เป็นตัว query คล้ายกับ Hive แต่เป็น in-memory database ที่ไม่ได้ใช้ MapReduce

Flume ใช้ในการจัดการ data stream ลักษณะของ log ประกอบด้วย

  • source (ที่มาของ streamming เช่น log ของ web server, twitter) 
  • sink (ปลายทาง hdfs) แล้วนำมาใช้ใน hive ต่อไป
zookeeper: ไว้ monitor health (Fail-Over)

เปลี่ยนเป็น text mode:  
systemctl set-default multi-user  (ครั้งต่อไป)
systemctl get-default   (ครั้งต่อไป)

ปัจจุบัน:  init 3

Spark: ทำงานเร็วกว่า Map Reduce 100 เท่า ใน memory และ 10 เท่า ใน disk (ไม่ใช้ MapReduce)
แต่ต้องเขียน code ซึ่ง สนับสนุน Java Scala Python R มาด้วย component ย่อย ๆ 
SQL, Streamming, MLib และ GraphX

spark-master ทำงาน namenode, 
spark-worker ทำงานที่ datanode

Presto เป็น เครื่องมือทำ Distributed SQL (พัฒนา โดย Facebook) สำหรับ Big Data เช่น Active Query 300 PB data warehouse มากกว่า 30,000 query  มี Airbnb, dropbox ก็ใช้ Presto

Presto ใช้ Hive metastore เท่านั้น ไม่ได้ใช้ feature SQL (beeline)  มี Presto (Coordinator - Worker) คล้ายกับ Spark ไม่ใช้ Map Reduce ทำงานได้ เร็วกว่า Hive เพราะทำงานเป็น in Memory

WebHDFS เป็น HTTP Rest API ยิงข้าม service เป็น WebHDFS กับ HttFS สามารถ download/upload file เข้าสู่ datanode โดยขอติดต่อที่ namenode ก่อน แล้ว namenode จะ redirect ไปยัง datanode ที่รับผิดชอบเอง เมื่อ datanode ที่รับผิดชอบได้ไฟล์แล้วก็จะมาทำสำเนา replicate ระหว่าง datanode เองภายหลัง

Cobbler เป็น Linux server provisioning tools มี dhcp เพื่อให้เครื่องลูกที่เปิดมา เชื่อมต่อและ download image ไปติดตั้ง คล้ายกับ Norton Ghost



Hadoop Training #day2

ตัวข้อมูลของ Big Data ใหญ่จนไม่สามารถนำมารวมกันประมวลผลครั้งเดียวได้ (TB หรือ PB) แต่ในทางกลับกัน โปรแกรมที่ประมวลมีขนาดเล็ก (ไม่กี่ MB) ทำให้เรากระจายโปรแกรม ไปประมวลผลกับข้อมูลที่กระจายไปอยู่ในที่ต่าง ๆ ข้อมูลอยู่ที่ไหน เครื่องนั้นต้องประมวลผล เป็นลักษณะ Batch processing

Hadoop เริ่มแรกมีข้อจำกัด เกี่ยวกับการแบ่งงานไปให้ Map/Reduce จึงได้พัฒนาการจัดการกับ namenode โดยใช้ YARN (Yet Another Resource Negoitator) เข้ามาช่วยจัดการ ประกอบด้วย Resource manager ที่มาแทน Task Tracker

กำหนด memory และ cpu core ให้กับ yarn สำหรับ namenode และ datanode ใน yarn-site.xml

Cloudera Hadoop (CDH) = opensource software distro ที่เอา CentOs มา onTop

Hadoop platform
  • Cloudera
  • Hartonwork
  • MapR
 ทดลอง ใช้ Map/Reduce กับโปรแกรม wordcount.java

Hive
Hive เป็นงานของ Data Warehouse ไม่เน้น insert, delete, update แต่เน้น select เพื่อวิเคราะห์ข้อมูล โดย facebook พัฒนา HiveQL ให้ใกล้เคียง standard SQL มากที่สุด (SQL interface สำหรับ MapReduce) ปัจจุบันเปลี่ยนเป็น beeline

Mahout (มา-ฮู) เป็นเครื่องมือทำ Machine learning

Yarn พัฒนา Resource manager เพื่อเปิดโอกาสให้ data processing ตัวอื่น (นอกเหนือจาก Map Reduce ทีเป็น Hadoop version แรก) เข้ามาร่วมประมวลผลด้วย

Sqoop
เป็นเครื่องมือที่ใช้ในการ import/export ข้อมูลระหว่าง mysql (MariaDB) กับ File
ปัญหา JAVA_HOME ต้องไปแก้ใน /etc/default/bigtop-utils เพิ่ม export JAVA_HOME=/opt/jdk1.8.0_92/

Hue
GUI สำหรับใช้งาน hadoop




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

tmux note

tmux
Ctrl+B (ปล่อย keyboard) Shift+"  (แบ่งแนวนอน)
Ctrl+B (ปล่อย keyboard) Shift+%  (แบ่งแนวตั้ง)

Ctrl+B  (ปล่อย keyboard) Left arrow (move left screen)
Ctrl+B  (ปล่อย keyboard) Right arrow (move right screen)
Ctrl+B  (ปล่อย keyboard) Up arrow (move Up screen)

Ctrl+B (ปล่อย keyboard) [  (ปล่อย) สามารถเลื่อนจอได้  กด q ออก

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 ได้หลายที่ และ มีการทำสำเนา