การใช้งานและการติดตั้ง Apache Hive สำหรับ Big Data Processing

Posted on Posted in Big Data

           โลกของ Big Data เราจะเจอกับลักษณะของข้อมูลที่นำเข้าระบบเก็บและประมวลผลข้อมูลของ Big Data ที่หลากหลายลักษณะทั้งข้อมูลแบบมีโครงสร้างมาแต่ต้นขณะที่นำเข้าข้อมูลเช่นมาจากข้อมูลระบบปฏิบัติงานของระบบงานต่างๆ( Operation Data ) ซึ่งอยู่ในรูปแบบตารางข้อมูล 2 มิติ หรือ ข้อมูลที่ไม่มีโครงสร้างตายตัวเช่นข้อมูลเนื้อหาจากเว็บไซด์ต่างๆ ไฟล์ข้อมูลในรูปแบบต่างๆ รูปภาพ  เสียง วีดีโอ  หรือ ผสมกันมา

            การจัดเก็บข้อมูล Big Data ด้วย Hadoop Technology โดยพื้นฐานตัวข้อมูลจะเป็นแบบไฟล์ข้อมูลภายใต้การจัดการ HDFS และ การเข้าถึงข้อมูลแบบไฟล์จะเป็นแบบ Sequential Access หรือ เข้าถึงตามลำดับบรรทัดของไฟล์ เพื่อประมวลผลข้อมูลเช่นการนับจำนวนคำหรือประโยคที่สนใจเพื่อนำไปสรุปรวมเป็นตัวเลขเชิงสถิติสำหรับระบบการประมวลผลภาษาธรรมชาติ

            แต่ในโลกการประมวลผลข้อมูลโดยทั่วไปที่ต้องการพึ่งพาอาศัยประสิทธิภาพของ Hadoop ที่ต้องความเร็วในการประมวลข้อมูลปริมาณมาก ด้วยการย้าย Operation Data เป็นปริมาณมากๆในระดับ 100 ล้านรายการมาเก็บใน Hadoop เพื่อการประมวลผลแบบสรุปข้อมูลเชิงสถิติแล้วส่งคืนกลับไปให้ที่เก็บข้อมูลหลักของ Operation Data ให้ใช้ในเงื่อนไขการตัดสินใจของระบบซอฟต์แวร์หลักที่ประมวลผลทางธุรกิจ หรือ ส่งต่อไปให้ระบบข้อมูลเพื่อการแสดงผลแบบ Dashboard ของ BI  หรือ การย้าย Operation Data จากถังเก็บข้อมูลปกติในระบบปฏิบัติงานออกไปเก็บที่ Hadoop เพื่อทำให้จำนวนข้อมูลใน Operation Data มีปริมาณน้อยลงที่จะส่งผลให้การเรียกข้อมูลมาปฏิบัติงานได้เร็วขึ้นด้วยการย้ายส่วนเรียกข้อมูลเก่ากว่าเวลาปกติ หรือ มีปริมาณมากให้มาเรียกดูข้อมูลที่ย้ายมาไว้บน Hadoopแทน  เมื่อข้อมูลที่ต้องการถูกนำมาวางไว้ที่ Hadoop การเรียกข้อมูลแบบ Random Access หรือ เข้าถึงตัวข้อมูลที่ต้องการได้ทันทีด้วยวิธีเดียวกับการใช้ภาษา SQL แบบปกติที่ใช้ในการจัดการข้อมูลแบบตารางฐานข้อมูลโดยทั่วไปยังเป็นความต้องการหนึ่งที่จะทำให้การปฏิบัติงานกับข้อมูลยังเป็นวิธีปกติเหมือนที่เคยปฏิบัติมา

            Apache Hive เป็นบริการหนึ่งในครอบครัวของ Hadoop Ecosystem ที่ทำงานอยู่บนพื้นฐานของ HDFS ของ Hadoop ที่รองรับการการนำเสนอข้อมูลในรูปแบบโครงสร้างตารางข้อมูลที่สามารถใช้ภาษSQL ในการเรียกข้อมูลตามปกติได้ และ มีคำสั่งที่สามารถโอนข้อมูลจากตารางข้อมูลในฐานข้อมูลของ Operation Data ที่เป็น RDBMS  รวมถึงมี API ที่สมบูรณ์สำหรับการพัฒนาโปรแกรมที่เรียกข้อมูลไปประมวลเฉพาะแอพพลิเคชั่นที่พัฒนาเพื่อวัตถุประสงค์การใช้งานทั่วไปด้วย

Apache Hive ทำงานอย่างไร

            เรามาทำความรู้จัก Apache Hive ที่ทำงานอยู่บน Hadoop เชิงเทคนิคกันสักเล็กน้อย โดยกระบวนการทำงานหลักๆนั้น Hive ทำหน้าที่ส่งคำสั่งประมวลผลข้อมูลผ่านเข้าสู่ Hadoop ซึ่งการประมวลผลใดๆกับข้อมูล ของ Hadoop ยังคงทำผ่าน MapReduce ตามกระบวนท่าปกติของ Hadoop

            ดังนั้นบทบาทของ Hive จะเป็นตัวกลางที่มี Engine ในการแปลงภาษา HQL หรือ SQL ในแบบของ Hive เป็น MapReduce เพื่อส่งไปทำงานที่ Hadoop Engine โดยกระบวนทำงานของ Hive Engine จำเป็นต้องมี Metadata ที่เป็นข้อมูลอธิบายรายละเอียดของโครงสร้างเสมือนตารางข้อมูล ประเภทข้อมูลที่อ้างอิงเป็นคอลัมน์ข้อมูล ซึ่งภาพของการจัดการกับ Metadata คือ การสร้าง Table หรือ Create Table แบบภาษา SQL นั้นเอง  

            การที่ต้องมี Metadata ของ Table ก็เพื่อให้ Hive Engine และ Hadoop Engine ทำงานร่วมกัน โดยหลักการทำงานคือการแปลง HQL เป็น MapReduce ในการประมวลผลข้อมูล หรือ แปลงผลลัพธ์การประมวลผลข้อมูลจาก MapReduce ที่อ่านจากไฟล์คืนกลับเป็นข้อมูลแบบมีโครงสร้างแบบตารางข้อมูลที่เอื้อต่อการมี API ของแต่ละภาษาโปรแกรมมิ่งมาต่อยอดนำไปสู่การทำวิเคราะห์ข้อมูล ประมวลผลข้อมูลได้อย่างง่ายๆ แสดงตัวอย่างกระบวนการทำงานตามรูปที่ 1  ดังนั้นส่วนประกอบที่สำคัญของ Hive ที่ Hive จะสร้าง MapReduce Job ตอนที่เราทำการบันทึกข้อมูล หรือ เรียกดูข้อมูล คือตัว Metastore  

Slide 1

รูปที่ 1

            ดังนั้นเราสรุปภาพได้ว่าการกำหนด Hive Architecture นั้นแปรตามรูปแบบการจัดวางหรือการติดตั้ง Matastore Service ซึ่งแบ่งออกเป็น 3 แบบ คือ

  • Embedded Metastore
  • Local Metastore
  • Remote Metastore

โดยรูปที่ 2 แสดง Metastore Service แบบต่างๆ โดยปกติใน Embedded Mode จะมาพร้อม Derby DB ซึ่งจะใช้สำหรับการทดสอบเล็กๆน้อยๆในการติดตั้งใช้งาน  ขณะที่ Local Mode แต่ละ Hive Service JVM จะมี Metastore ของตนเองโดยไม่แชร์การใช้งานกับใคร  สุดท้าย Remote Mode Metastore จะทำงานแยกมาเป็น JVM Process อิสระเพื่อเพิ่มเรื่องการให้เข้าใช้งานได้หลาย Client ที่ขอใช้บริการและรวมถึงเรื่องของเพิ่มประสิทธิภาพด้วยการกระจายโหลดการทำงาน

hiveintro6

รูปที่ 2

( Credit: https://www.edureka.co/blog/introduction-to-apache-hive/ )

Apache Hive เหมาะสมกับงานลักษณะใด

            เรามาสรุปว่า Hive เหมาะสมกับงานประมวลผลข้อมูลในลักษณะแบบใดกันบ้างสักเล็กน้อยก่อนที่จะไปสู่การติดตั้ง Hive กันครับ

            โดยสรุปแล้ว Hive ไม่ถูกออกแบบมาสำหรับงาน Online Transaction Processing หรือ ทำงานแบบ Real Time / Near Real Time เหมือนกันที่เราทำงานกับ Operation Data กับ RDBMS ที่รับข้อมูลแบบ Online หรือ Update ข้อมูลในรายการต่างๆ

            ดังนั้น Big Data Processing ด้วย Hive จะเป็นลักษณะงานที่เป็นแบบ Batch Processing เพื่อวิเคราะห์ข้อมูลสำหรับหาคำตอบหนึ่งๆหรือค่าสรุปใดๆจากข้อมูลเป็นปริมาณมาก หรือ งานแบบเรียกข้อมูลมาแสดงผลที่จากปริมาณข้อมูลมากๆแต่การใช้งานยอมรับได้เช่น ค้นหาและแสดงประวัติข้อมูล การแสดงรายงานแบบต่างๆ ดังนั้นลักษณะงานหรือแอพพลิเคชั่นที่เหมาะสมสำหรับ Hive จะเป็นตัวอย่างดังนี้

  • Data Mining
  • Log Processing
  • Document Indexing
  • Customer Facing Business Intelligence
  • Predictive Modelling
  • Hypothesis Testing

เริ่มทำการติดตั้ง Hive กัน

            เรามาเริ่มทำการติดตั้ง Hive กันในขั้นตอนการติดตั้งต่อไปนี้เราจะติดตั้งแบบ Remote Metastore และ จะติดตั้งกับ Ubuntu ด้วย VirtualBox โดยมีขั้นตอนดังนี้

  1. เตรียม Ubuntu v.14.x ( สามารถใช้ VM VirtualBox หรือ Physical Machine หรือ AWS/EC2 ก็ตามสะดวก

- หากต้องการใช้ AWS/EC2 ทำตามบทความ “การเปิดใช้งาน EC2

** หากต้องการใช้งาน VirtualBox ค้นหาวิธีการติดตั้งได้ใน Google สำหรับ Image VM VirtualBox ผมใช้ Memory 1 GB เท่านั้น ดังนั้นเครื่องที่มี Memory ประมาณ 4 GB ก็สามารถใช้ฝึกปฏิบัติได

  1. ติดตั้ง Hadoop

- การติดตั้งและStart&Stop Hadoop ทำตามบทความ “การติดตั้ง Hadoop แบบ Step-by-Step สำหรับก้าวแรกของ Big Data Engineering

  1. ติดตั้ง Apache Hive

            3.1  ดาวน์โหลด Hive

            wget http://www-eu.apache.org/dist/hive/hive-2.1.0/apache-hive-2.1.0-bin.tar.gz

            3.2 ตรวจสอบ Hive ที่ดาวน์โหลดมาแล้ว จะอยู่ที่ /home/[user account]

            $ ls

            จะเห็นไฟล์ apache-hive-2.1.0-bin.tar.gz

            3.3 ทำการแตกไฟล์

                        $ tar –vxf apache-hive-2.1.0-bin.tar.gz

                        จะได้ directory  apache-hive-2.1.0-bin ที่ home ของ user เราเอง

            3.4  สร้าง Directory  hive

                        $ sudo mkdir /usr/local/hive

                        $sudo makdir /var/log/hive

                        $ sudo chown auoychai:auoychai –R /usr/local/hive  // ส่วนคำ auoychai ให้เปลี่ยน user:group เป็นของแต่ละท่านเอง

                        $ sudo chown auoychai:auoychai –R /var/log/hive

            3.4  Move Hive ไปไว้ที่  /usr/local/hive

                        $ sudo mv ./ apache-hive-2.1.0-bin/*  /usr/local/hive

                        ไฟล์และ Directory ของ Hive จะไปอยู่ใน /usr/local/hive ทั้งหมด

            3.5  กำหนดค่า Environment ให้กับ Hive

                        3.5.1  เพิ่ม Environment Variable ลงใน .bashrc ของ user เราเอง ( เปิดด้วย nano editor , /home/auoychai/.bashrc )

                                    export HIVE_HOME=/usr/local/hive

                                    export PATH=$PATH:$HIVE_HOME/bin

                                    export PATH=$PATH:$HIVE_HOME/sbin

                        3.5.2 เพิ่ม Environment Variable ลงใน /usr/local/hive/conf/sive-env.sh  ตามรายละเอียดด้านล่างนี้

                                    export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

                                    export HIVE_HOME=/usr/local/hive

                                    export HIVE_CONF_LOG=/var/log/hive

                        3.5.3 กำหนดค่า Parameter ใน Hive Configuration  ด้วยการสร้าง file hive-site.xml โดยใช้ text editor nano หรือ ตัวที่ถนัด ในไฟล์ให้เปิดและปิดแท๊ก <configuration> </configuration> แล้วเพิ่มรายละเอียด property อื่นตามรูปที่ 3 ด้านล่างนี้

hive-site-config

รูปที่ 3

ส่วนสำคัญของ configuration นี้จะแบ่งออกเป็น 3 ส่วน คือ 1) การเชื่อมต่อกับ Metastore DB ของ MySQL ( property ชุดที่ 1-3 )  2) การเชื่อมต่อกับ Hadoop ( property ชุดมี่ 4 ) และ 3) Hive engine เชื่อมต่อกับ Metastore Service ที่แยก JVM process ออกจาก Hive Engine Service ( property ชุดที่ 5 )

  1. ติดตั้ง MySQL

            หลักจากที่เป็นเครื่องเข้าสู่หน้าจอที่เป็น Terminal ของ Linux ทำตามขั้นตอนต่อไปนี้

            4.1  ดาวน์โหลดและติดตั้ง MySQL สำหรับ Hive Metastore

                        $ sudo apt-get install mysql-server

                      แล้วกำหนด password ให้กับ User root , ใน VM Image ที่แชร์ให้ ผมกำหนดไว้คือ Password:123456

            4.2 ดาวน์โหลดและติดตั้ง MySQL Java Connector ( JDBC )

                        $ sudo apt-get install libmysql-java

            4.3 สร้าง Metastore DB ที่ MySQL สำหรับ Hive Metastore

                        $ mysql – u root –p

                        Enter password:123456

                        mysql> CREATE DATABASE metastore;

                        mysql> SOURCE /usr/local/hive/scripts/metastore/upgrade/mysql/hive-txt-scheme-2.1.0.mysql.sql

                        ** ขั้นตอนนี้คือการสร้าง Table และ ข้อมูลที่ต้องใช้สำหรับ Metastore Service

                        mysql > CREATE USER ‘hiveuser’@‘%’ IDENTIFIED BY ‘hivepassword’;

                        mysql> GRANT all on *.* to ‘hiveuser’@localhost identified by ‘hivepassword’;

                        mysql> flush priviledges;

ทดลองใช้งาน Hive กัน

            การใช้งาน Hive เนื่องจาก Hive ทำงานบน Hadoop ดั้งนั้นการเริ่มต้นใช้งานจะต้องทำการ Start Hadoop ก่อนด้วย การใช้งาน Hive ให้มองเหมือนกับเราใช้งาน RDBMS ผ่าน คำสั่งของ SQL ซึ่งจะต้องมีขั้นตอนการสร้าง Table การเอาข้อมูลเข้า การเรียกข้อมูล หรือ การลบข้อมูลเป็นต้น

  1. การ Start Hadoop

            1.1  Start Hadoop ตามขั้นตอนการ Start-Stop Hadoop ในบทความ “การติดตั้ง Hadoop แบบ Step-by-Step สำหรับก้าวแรกของ Big Data Engineering

  1. Start Hive Service:

            ขั้นตอนที่สำคัญของการใช้งาน Hive ต้องทำการ Start metastore service กกก่อนเนื่องจากเราแยก Metastore มารันแยกจาก Hive Engine

                  2.1  Start Hive Metastore Service:

                        auoychai@ubtserver:/usr/local/hive>$ hive --service metastore &

** รูปแสดง process ที่ Run อยู่ทั้งหมดทั้ง Hadoop และ metastore  ตามรูปที่ 4   PID=3029 คือ Java Process หรือ JVM ของ metastore service

start-metastore

รูปที่ 4

** Metastore จะ start อยู่ที่ port 9083 เราสามารถตรวจสอบได้โดยใช้คำสั่ง netstat –ln | grep 9083  แสดงตามรูปที่ 5

metastore-netstat

รูปที่ 5

                  2.2  Start Hive Service:

            การใช้งาน Hive เราจำใช้งานได้ทั้งแบบ Hive Command Line Interface ( CLI ) สำหรับการทดสอบว่า Hive ทำงานกับ metastore แล้ว และ HiveServer2 เป็น Server Process ให้ Client สำหรับ Run HQL หรือ Customer Application เรียกเข้าใช้งานผ่าน JDBC

                        a). การ Start Hive CLI

            >$ hive

            ** Terminal จะแสดงดังรูปที่ 6

hivecli-started

รูปที่ 6

            ทดลองใช้คำสั่ง DDL เพื่อสร้าง Table ดังนี้

hive> CREATE TABLE pokes (foo INT, bar STRING);

hive> CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING);                                                            

hive> SHOW TABLES;

                         ** แสดงผลลัพธ์ ตามรูปที่ 7

hive-ddl-showtable

รูปที่ 7

 ทดลองทำตาม GettingStarted Hive ตามลิงค์นี้ https://cwiki.apache.org/confluence/display/Hive/GettingStarted  ที่หัวข้อ Simple Example Use Cases ด้วยการโหลดข้อมูล Movielens เข้าไป

แล้วทดลอง hive> select * from u_data where userid=13 and movieid=446 ผลลัพธ์จะแสดงตามรูปที่ 8

hive-select-movielens

รูปที่ 8

                       b). การใช้ HiveServer2 ( ผ่าน JDBC Driver )

                              > hive --service hiveserver2 &  ( เปิด Run เป็น Background process )

                              ** Terminal จะแสดงการทำงานของ HiveServer2 แล้ว ดังรูปที่ 9

starthiveserver2

รูปที่ 9

b.1 Connect เข้า HiveServer2 ด้วย beeline สำหรับเป็น Terminal ในการส่งคำสั่งให้กับ Hive

                                    b.1.1  Copy Hive JDBC library ไปไว้ให้ director  hive/lib/

                                                ./hive/jdbc$ cp hive-jdbc-2.1.0-standalone.jar ../lib

                                    b.1.2 Start beeline

                                    $beeline

                                    beeline>!connect jdbc:hive2://localhost:10000

                                    ** พิมพ์ username:auoychai , password:123456 

                                    ผลลัพธ์แสดงตามตัวอย่างรูปที่ 10

connect-beeline

รูปที่ 10

                                    ทดลอง Query ข้อมูลด้วย Statement ที่ได้ทำที่ Hive CLI มาแล้วดังนี้                                      select * from u_data where userid=13 and movieid=446

                                    ** Terminal แสดงผลลัพธ์ตามรูปที่ 11

beeline-selectsql

รูปที่ 11

บทสรุปสุดท้าย

            เราได้ทำความเข้าใจ Apache Hive มาแต่ต้น และ ลำดับขั้นตอนการติดตั้ง รวมถึงตัวอย่างการใช้งาน น่าจะเป็นพื้นฐานที่ดีให้เราสามารถเดินต่อได้ตัวเองจากการฝึกปฏิบัติการ Data Processing ในการเอาข้อมูลเข้าออก รวมถึงการเขียนโปรแกรม หรือ เป็น Interface สำหรับการเชื่อมต่อกับ Data Analytic Tool อื่นๆได้ในลำดับถัดไป

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

สำหรับการติดตั้งหากท่านใดไม่สนุกกับการติดตั้ง อยากแค่ฝึกทดลองประมวลข้อมูลหรือนำไปต่อกับพวก BI Tool หรือ เล่นเชิง Data Science สามารถ Download  Image VM สำเร็จรูปที่ผมติดตั้งไว้ให้ทั้งหมดแล้วไปลองเล่นกันได้เลยที่ “แบ่งปัน VM Image สำเร็จรูป สำหรับ Big Data Processing ด้วย Apache Hive ครับ”   ฝากด้วยครับหากห็นว่าบทความนี้ประโยชน์กับท่านอื่นๆฝากช่วยแชร์ๆกันออกไปให้ด้วยครับ  แล้วติดตามกันต่อๆนะครับ

About Author

อวยชัย ภิรมย์รื่น

ทำงานมาแล้วในทุกตำแหน่งของทีมพัฒนาซอฟต์แวร์ มีประสบการณ์การวิเคราะห์และออกแบบระบบ Accounting&Warehouse , e-Payment , Freight forwarder , Logistic และ เคยดูงานด้านเทคนิคของระบบ Fraud Banking ที่ทำงานกับข้อมูลกว่า 7 ล้านรายการด้วยเข้าใจ Operation ของทุกระบบงานของธนาคารอย่างดี และ ถนัดเรื่องการบริหารจัดการโครงการพัฒนาระบบสารสนเทศ

| ปัจจุบันทำงานด้าน Big Data Solution Engineer โดยเอา Big Data Technology มาเพิ่มประสิทธิภาพการปฏิบัติงานของ Business and IT Operation

[  e-mail: p.auoychai@gmail.com , Tel. 086-813-5354 ]

Our Services

Big Data Engineering

ติดตั้ง Cloudera Enterprise Hadoop , อิมพลีเมนท์การเอาข้อมูลเข้า HDFS , Hive , HBase , Elasticsearch ผ่าน Talend  ETL Tool และ Custom Programming admin

Software&Solution

พัฒนา Smart Software Application ( Web , Mobile ) และ เชื่อมต่อกับอุปกรณ์ IoT  , พัฒนาระบบ Dashboard ทำ Visualize ข้อมูล , การพัฒนา API&Micro-Service , การเชื่อมต่อและประมวลผลข้อมูลบน Big Data Store ด้วยเทคนิค Machine Learning admin

IT Operation

อิมพลีเมนท์ระบบ IT  Monitoring สำหรับการเฝ้าระวังและแจ้งเตือนสภาพการทำงานของ Server , Application Server และ IoT Device ต่างๆ , การบริหารจัดการ Service & Application Log. admin

Leave a Reply

Your email address will not be published. Required fields are marked *