hive-hadoop-example
hive-hadoop-example

หลังจากเรียนรู้ว่า Big Data ในภาพกว้างมาแล้ว คงจะเข้าใจกันขึ้นว่าภาพรวมของ Hadoop Ecosystem เป็นยังไงและจะลองเล่นกับ Hadoop บนเครื่องตัวเองอย่างไรกันแล้ว … ถ้ายังไม่ได้อ่าน ไปอ่านเพิ่มได้ที่นี้เลย The Big Data World – ตอนที่หนึ่ง 🙂

ทีนี้เรามาเจาะลึกถึงการใช้งานกับ Hadoop กันเถอะ … ซึ่งวันนี้เราจะมาเรียนรู้เรื่องของ Hive กัน โดยขอย้อนกลับไปที่ ecosystem นิดนึงน่ะ

hadoop-ecosystem
hadoop-ecosystem
hive-logo
hive-logo (https://hive.apache.org)

จะเห็นว่า Hive ถูกสร้างขึ้นบน MapReduce นั้นหมายถึงมันเป็น tool ตัวนึงที่สร้างขึ้นเพื่อดึงข้อมูลจาก HDFS เหมือนกับ MapReduce เนี่ยแหละ แต่ๆๆสิ่งที่พิเศษกว่าคือมันออกแบบมาให้เรา query ข้อมูลจาก HDFS ด้วย Hive Query Language Statement ที่มีลักษณะเหมือนกับ SQL statement !!!! 🙂

แปลว่าต่อจากนี้การจะดึงข้อมูลจาก Hadoop เราไม่ต้องทนทุกข์ทรมารด้วยการเขียนโปรแกรมยาวๆแบบข้างล่างนี้แล้ว

example-mapreduce
example-mapreduce (https://dzone.com/articles/hadoop-basics-creating)

เราแค่ใช้ Hive query language ที่หน้าตาเหมือน SQL ดึงข้อมูลออกมาได้เลย แบบนี้

hive-sample-command
hive-sample-command (https://hortonworks.com/blog/hive-cheat-sheet-for-sql-users/)

มันจะมีความแตกต่างกับ SQL ของแต่ละเจ้าอยู่บ้าง แต่ไม่มากนัก เรียนรู้กันได้ ง่ายกว่าเขียน MapReduce แน่นอน 🙂

ลองเล่นของจริงใน Sandbox กันดีกว่า

คนจริงไม่พูดเยอะเนอะ ไปลองเล่น Hive ของจริงกันใน Hortonworks Sandbox กันเลยดีกว่า

ถ้าได้ลองอ่านบทความที่แล้ว The Big Data World – ตอนที่หนึ่ง จะทราบแล้วเนอะ ว่าเราลง Hadoop เพื่อเล่นบนเครื่องของเราเองยังไง คราวนี้มาลองใช้ Hive กันบน Sandbox ตัวนั้นกันเลยดีกว่า

โดยวิธีการจะแบ่งเป็นสองส่วนหลักๆก็คือ

  1. Import data เข้า Hadoop
  2. Query data ด้วย Hive

วิธีการ import data เข้า Hadoop

เริ่มต้นขั้นแรกเลยเราไปที่ Hive ผ่านหน้า UI ของตัว Sandbox ก่อน โดย default password ของระบบ sandbox ก็คือ maria_dev ทั้ง username และ password 🙂

hive-hortonswork-sandbox
hive-hortonswork-sandbox

ส่วนข้อมูลที่เราจะเอามาใช้เล่นกันในวันนี้ก็คือข้อมูลจาก Movielens ซึ่งเป็นข้อมูลที่รวบรวมเกี่ยวกับ rating ของรายชื่อหนังไว้ โดยเมื่อโหลดลงมาแล้ว จะมีหน้าตายังงี้

sample-dataset-movielens
sample-dataset-movielens

โดยการจะเอาข้อมูลอะไรก็ตามเข้าไปใน Hadoop เราก็ต้องมีความจําเป็นที่จะต้องรู้ก่อนว่า ข้อมูลอยู่ในรูปแบบไหน มี field delimiter ยังไง เพราะมันจะได้ extract ข้อมูลได้ถูกต้อง เช่นตัวอย่างข้างล่างจาก u.data file ที่เรา Download ลงมา จะเห็นว่ามันใช้ TAB เป็นตัวแบ่งของข้อมูลนั้นเอง เพราะฉะนั้นเวลา Import data เข้าไปก็ต้องเลือก TAB เป็น field delimeter 🙂

example-data-seperator
example-data-seperator

หลังจากเราโหลดข้อมูลมาแล้วให้ไปที่ Tab ใน hive ที่เขียนว่า Upload Table

hive-upload-table
hive-upload-table

แล้วเราก็เลือก config field delimeter จากปุ่ม setting ที่ file type ตามข้อมูลที่เรามี ซึ่งก็คือ TAB นั้นเอง

hive-example-configuration-file-type
hive-example-configuration-file-type

หลังจากนั้นก็จะได้ข้อมูลออกมาหน้าตาแบบรูปข้างล่างนี้แล้ววววววววว ซึ่งนี้ก็คือ 1 database นั้นเอง 🙂 ไม่ยากเลยใช่มั้ยล่ะ

import-data-hadoop
import-data-hadoop

วิธีการ Query ด้วย Hive

อย่างที่เราคุยกัน การจัดการ Hadoop Data ด้วย hive เป็นวิธีการที่เราใช้ Hive Query command ที่มีลักษณะเหมือน SQL เลย เพราะฉะนั้นมันจะทําให้เราทํางานได้ง่ายมาก ซึ่งเราสามารถลองกับ table ที่เราพึ่ง upload เข้าไปได้เลย โดยการเลือก Tab Query ในหน้าของ Hive

hive-query-tab-example
hive-query-tab-example

หลังจากนั้นจะเห็นว่าเรามี Database อยู่ 3 ลูกซึ่งก็คือ

  1. default
  2. foodmart
  3. xademo

และจะมี table ที่เราพึ่ง upload เข้าไปอยู่ใน default นั้นเอง (ซึ่งของผมตั้งชื่อว่า rating – u.data และ movies – u.items)

เราสามารถมอง csv file เมื่อกี้ที่เรา Upload เข้าไปเป็น table ใน database และ query เล่นได้ ตามใจต้องการล่ะ เช่น จะนับจํานวนของ data ทั้งหมดก็ count ได้ตามปกติแบบที่คุ้นมือกัน 🙂

example-hive-query-count
example-hive-query-count

เห็นมะ? ว่า Hadoop ไม่ได้ยากอะไรเลย? แค่มองว่าเป็น Database ก้อนใหญ่ๆก้อนนึง ที่เราเอาข้อมูลไปพักไว้เฉยๆ คําถามที่สําคัญอย่างที่บอกคือ จะเอา Big Data ไปประยุกต์ทําอะไรออกมาตั้งหาก !!!!

Hive Query Command ที่น่าสนใจ

สําหรับคนแรกๆที่เข้ามาหัดเล่นกับ Hive อาจจะคิดว่า SQL ที่ใช้มันมีแค่ selecting, filtering และ aggregate แค่นั้น แต่จริงๆแล้ว Hive query command มีดีกว่า select,join,distinct,count มากๆ

มันมีความสามารถทั้ง Logical, Datetime, Mathematics หรือแม้แต่ extract json / array type ที่มีใน Hadoop ออกมา result table ให้เราได้ 🙂

ซึ่งคู่มือทั้งหมดสามารถอ่านได้จาก LanguageManual UDF ได้เลย ซึ่งวันนี้จะขอยกตัวอย่างที่ได้ใช้งานกันบ่อยๆออกมาให้ดูกัน

CommandDescriptionExample
current_date โชว์เวลาปัจจุบัน current_date
unix_timestamp โชว์เวลาปัจจุบันในรูปแบบ epoch time unix_timestamp()  หรือ unix_timestamp('2009-03-20 11:30:01')
from_unixtime เอา epoch time นั้นอะ แปลงไปเป็น string time format from_unixtime('123214435')
max โชว์ค่า Max สุดใน column max(columnA)
min โชว์ค่า Min สุดใน column min(columnA)
percentile โชว์ค่า Percentile ใน column โดยให้เราระบุ percentile ที่ต้องการจะหาระหว่าง 0 ถึง 1 percentile(columnA 0.1)
collect_set โชว์ค่าของ data ในรูปแบบของ array และ distinct value ซํ้ากันออกมา collect_set(columnA)
sum return ผลรวมทั้งหมดของค่าใน column sum(columnA)
avg return ค่าเฉลี่ยของ column avg(columnA)
concat รวม string 2 ตัวเข้าด้วยกัน concat(stringA stringB)
case when a then b else c end conditional function ล่ะ คือเมื่อค่าของตัวแปล a = true เท่านี้ให้ทํา b เป็นต้น case when a = 1 then true else false

นี้แค่นํ้าจิ้ม ยังมีอีกเยอะที่ให้เราเอามาเขียน query เพื่อใช้ในการเอาข้อมูลมาแสดง 🙂

สรุป

จําง่ายๆเลย Hive คือ tools ไว้ในการดึงข้อมูลของ Hadoop ขึ้นมาในรูปแบบของ SQL โดยมี Hive Operators and User-Defined Functions (UDFs) ให้ใช้อย่างมากมายตามแบบข้างบน

ลองฝึกเล่นกับ Sandbox ดูจะรู้ว่ามันไม่ยากเลย

Leave a Reply

avatar

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