Hive Story EP.1: Let’s Understand Hive

Thapanee Boonchob
5 min readMay 3, 2022

--

Hive คืออะไร เอาไว้ใช้ทำงานแบบไหน วันนี้เรามาทำความเข้าใจ Hive กันเถอะ

แต่ก่อนที่เราจะไปทำความรู้จัก Hive เรามาดูภาพรวมของ Hadoop กันก่อนค่ะ เพื่อให้เห็นภาพมากขึ้น

Hadoop Ecosystem — Hortonworks Data Platform in 2022 — Reviews, Features, Pricing, Comparison — PAT RESEARCH: B2B Reviews, Buying Guides & Best Practices (predictiveanalyticstoday.com)

Hadoop เป็น Open-source Framework สำหรับการเก็บและประมวลผลข้อมูลขนาดใหญ่ โดยประกอบไปด้วย 3 modules หลักๆ คือ MapReduce, Yarn และ Hadoop Distributed File System (HDFS)

  1. MapReduce เป็น Parallel Programming Model สำหรับการประมวลผลข้อมูลขนาดใหญ่ โดยจะทำงานแบบขนาน ซึ่งหมายถึง การแบ่งข้อมูลเป็นหลายๆส่วนแล้วอาศัยคอมพิวเตอร์หลายๆเครื่องมาช่วยกันทำงาน (Processing) ซึ่ง MapReduce ทำงานยังไง สามารถอ่านได้จาก link ด้านล่างเลยค่ะ

2. Yarn เป็นหน่วยจัดการทรัพยากร (Resource Management) ที่คอยดูแลและจัดสรรปันส่วนทรัพยากรให้เพียงพอต่อการใช้งานในขณะนั้น

3. Hadoop Distributed File System (HDFS) เป็นส่วนที่ใช้ในการเก็บข้อมูล (Storage)

โดย Hadoop Ecosystem ก็ยังประกอบไปด้วยองค์ประกอบอื่นๆ อีกมากมาย เช่น Sqoop, Pig และ Hive เป็นต้น

Hive

Hive เป็น 1 ในองค์ประกอบของ Big Data Ecosystem ที่ถือว่าเป็น Data Warehouse Tool ตัวหนึ่งสำหรับการประมวลผลข้อมูลที่มีโครงสร้างใน Hadoop ซึ่งมีคุณสมบัติ ดังนี้

  • ถูกออกแบบมาสำหรับการประมวลผลเชิงวิเคราะห์ออนไลน์ (Online Analytical Processing: OLAP)
  • มี Metastore ที่ถูกใช้ในการเก็บโครงสร้างข้อมูล
  • มีภาษาของตัวเอง เรียกว่า HiveQL หรือ HQL สำหรับสืบค้นข้อมูล ซึ่งคล้ายกับภาษา SQL

Hive Architecture

Hive Architecture — What is Hive? Architecture & Modes (guru99.com)

Hive ประกอบด้วย 3 องค์ประกอบหลัก คือ

  1. Hive Clients: Hive จะมี Driver ต่างๆ สำหรับการติดต่อสื่อสารกับ Application
  • Hive Thrift Client Hive ใช้ Thrift เพื่ออนุญาตให้ผู้ใช้ระยะไกล (remote user) ติดต่อกับ HiveServer2 (the thrift server) เพื่อเชื่อมต่อและส่ง query
  • Hive JDBC Driver: Hive ใช้ JDBC สำหรับ Application ที่เกี่ยวข้องกับ Java
  • Hive ODBC Driver: Hive ใช้ ODBC สำหรับ Application ที่รองรับการเชื่อมต่อ ODBC

2. Hive Services: Application สามารถติดต่อกับ Hive ได้โดยผ่าน Hive Server นอกจากนี้ Hive ก็ยังมีช่องทางอื่นๆที่สามารถติดต่อได้ คือ Hive Web Interface และ Command Line Interface

Hive Web Interface — How to run Hive queries through Hive Web Interface. (cloudfront.blogspot.com)

เมื่อได้รับการติดต่อไม่ว่าจะผ่าน Hive Web Interface, Hive Server หรือ Command Line Interface จะส่งต่อ Request ไปยัง Driver ซึ่ง Driver จะประมวลผล Request เหล่านั้นให้เป็นสิ่งที่เข้าใจกันภายใน เช่น Meta Store, File System หรือ Job Client

3. Hive Storage and Compute

  • ผลลัพธ์จาก Query จะถูกจัดเก็บไว้ใน Hadoop Cluster บน HDFS
  • Metastore มีหน้าที่หลักคือการเก็บทุกสิ่งอย่าง ไม่ว่าจะเป็น Schema (โครงสร้างข้อมูล), Metadata (คำอธิบายข้อมูล) ของ Table, คอลัมน์ใน Table, ประเภทของข้อมูลและ HDFS mapping เป็นต้น โดยจะถูกเก็บลง Meta Storage Database

Hive Metastore จะแบ่งออกเป็น 3 ประเภท คือ Embedded Metastore, Local Metastore และ Remote Metastore

Embedded Metastore

Embedded Metastore — Deploying Hive Metastore | Apache Hive Cookbook (packtpub.com)

สำหรับ Embedded Metastore จะใช้ Derby Database เป็น Default แต่ Metastore ประเภทนี้จะสามารถเปิด Hive ได้ครั้งละหนึ่ง Session ซึ่งแชร์ Metastore เดียวกัน ดังนั้น Embedded Metastore จึงไม่เหมาะกับการใช้งานจริง แต่เหมาะสำหรับการทำ Unit Tests

Local Metastore

Local Metastore — Deploying Hive Metastore | Apache Hive Cookbook (packtpub.com)

ในโหมดนี้จะรองรับผู้ใช้หลายคนในการเปิดการเชื่อมต่อกับ Metastore และทำการสืบค้น SQL ได้ โดยจะใช้ Standalone Database (MySQL, PostgreSQL หรือ database อื่นๆที่เชื่อมต่อได้ด้วย JDBC driver) ในการเก็บข้อมูล Metastore และแต่ละ Hive Service JVM จะมี Metastore ของตนเองโดยไม่แชร์การใช้งานกับใคร

Remote Metastore

Remote Metastore — Deploying Hive Metastore | Apache Hive Cookbook (packtpub.com)

โหมดนี้จะรองรับผู้ใช้หลายคนเหมือนกับ Local Metastore แต่จะแยก Metastore ออกมาจาก Hive Service JVM และ Metastore จะแชร์การใช้งานกับ Driver อื่นเพื่อช่วยกันทำงาน

Different Modes of Hive

Hive สามารถทำงานได้สองโหมดขึ้นอยู่กับขนาดของ Data Node ใน Hadoop ดังนี้

  1. Local Mode จะถูกใช้งานเมื่อ Hadoop ถูกติดตั้งภายใต้ Pseudo Mode โดยมี Data Node เพียงหนึ่งโหนด หรือ เราสามารถใช้โหมดนี้ได้หากข้อมูลมีขนาดเล็ก ซึ่งการทำงานในโหมดนี้จะมีความเร็วในการประมวลผลเร็วมากสำหรับชุดข้อมูลขนาดเล็ก
  2. MapReduce Mode จะถูกใช้งานเมื่อ Hadoop มีหลาย Data Node และข้อมูลถูกกระจายไปยังโหนดต่างๆ ซึ่งโหมดนี้จะดำเนินการกับชุดข้อมูลขนาดใหญ่ที่ถูกแบ่งออกเป็นข้อมูลขนาดย่อยหลายๆชิ้น และดำเนินการในลักษณะคู่ขนาน (Parallel)

Hive Data Model

Hive สามารถสร้าง Table ได้สองประเภทที่แตกต่างกัน คือ

  1. Internal Table มีอีกชื่อหนึ่งว่า Managed Table เป็น Default Table ของ Hive ซึ่ง Hive จะเป็นคนจัดการกับข้อมูล หมายถึง เมื่อผู้ใช้งานทำการสร้าง Table ใน Hive โดยไม่ได้กำหนดประเภทของตาราง Hive จะถือว่า Table นั้นเป็น Internal Table ตามค่า Default ซึ่ง Table จะถูกสร้างขึ้นในตำแหน่งเฉพาะใน HDFS
Internal Table — Apache Hive Table Types | Apache Hive — DataValley

การทำงานของ Internal Table คือ สร้างตารางและ Metadata ก่อน จากนั้นทำการย้ายข้อมูลจาก HDFS มาที่ไว้ที่ Hive ดังนั้น หากเรา Drop Table จะทำให้ทั้ง Metadata และข้อมูลถูกลบไปด้วย (การดำเนินการใดๆกับ Table จะส่งผลต่อไฟล์ข้อมูลจริง)

2. External Table เป็นประเภทของตารางที่ Hive ไม่ต้องรับผิดชอบในด้านการจัดการข้อมูล

External Table — Apache Hive Table Types | Apache Hive — DataValley

การทำงานของ External Table คือ สร้างตารางมาครอบข้อมูลที่ถูกวางไว้ที่ HDFS ตามโครงสร้างของข้อมูลนั้นๆ ดังนั้น หากเรา Drop Table จะมีเพียงแค่ Metadata ที่ถูกลบไปด้วย แต่ข้อมูลจะยังคงอยู่ (การกระทำใดๆกับ Table จะมีผลแค่เฉพาะกับ Metadata เท่านั้น)

สรุปคร่าวๆระหว่าง Internal Table และ External Table คือ เมื่อเรา DROP Table ในกรณีที่เป็น Internal Table ข้อมูลและ Metadata จะถูกลบไปด้วย แต่ถ้าเป็น External Table ข้อมูลจะไม่ถูกลบ มีเพียงแค่ Metadata ที่ถูกลบเท่านั้น นอกจากนี้ก็ยังมีเรื่องการใช้คำสั่ง TRUNCATE ที่ Internal Table รองรับแต่ External Table ไม่รองรับ

Supported File Format

  • TEXTFILE เป็นไฟล์ข้อความธรรมดาทั่วไป
  • SEQUENCEFILE เป็นการเก็บข้อมูลในลักษณะของคู่ Key-Value ซึ่งแนวคิดของ SEQUENCEFILE คือการรวมไฟล์ขนาดเล็กหลายๆไฟล์ให้กลายเป็นไฟล์ขนาดใหญ่ไฟล์เดียวโดยให้ชื่อไฟล์เป็น Key และเนื้อหาในไฟล์ย่อยเป็น Value เป็นต้น
  • AVRO (Serializable Data)
  • PARQUET (Columnar File Format)
  • RCFILE (Record Columnar File Format)
  • ORC (Optimized Row and Columnar format = compressed + RCFILE) ถูกตั้งค่าเป็น Default File Format ใน Hive3

Supported Datatype

ประเภทของข้อมูลใน Hive แบ่งออกเป็น 4 กลุ่มใหญ่ๆ คือ

  1. Column Types จะถูกใช้เป็นชนิดข้อมูลของคอลัมน์ คือ
  • Integral Types ใช้กับข้อมูลที่เป็นจำนวนเต็ม ซึ่งสามารถกำหนดขนาดของข้อมูลได้โดยการเติม Postfix เช่น TINYINT =>10Y, SMALLINT => 10S, INT => 10 และ BIGINT => 10L โดย TINIYINT จะมีขนาดเล็กที่สุด ในขณะที่ BIGINT มีขนาดใหญ่ที่สุด
  • String Types สามารถเขียนใน Single Quotes (‘ ’) หรือ Double Quotes (“ ”) ก็ได้ ซึ่งแบ่งได้เป็นอีก 2 ประเภท คือ VARCHAR เป็นการเก็บข้อมูลที่ไม่กำหนดพื้นที่ในการเก็บ ซึ่งมีความยาวได้ตั้งแต่ 1 – 65355 ตัวอักษร และ CHAR เป็นการเก็บข้อมูลที่กำหนดพื้นที่ในการเก็บไว้แล้ว อยู่ที่ 255 ตัวอักษร
  • Timestamp รองรับ UNIX ด้วยความแม่นยำระดับนาโนวินาที และรองรับ java.sql.Timestamp
  • Dates แสดงข้อมูลวันเดือนปีในรูปแบบ YYYY-MM-DD
  • Decimals ใช้สำหรับแสดงความแม่นยำที่ไม่สามารถเปลี่ยนรูปได้ โดยมี syntax คือ decimal(precision, scale)
  • Union Types เป็นชุดของประเภทข้อมูลที่แตกต่างกัน

2. Literals แบ่งออกเป็น 2 ประเภท คือ

  • Floating Point Types ใช้สำหรับตัวเลขที่มีหลักทศนิยม
  • Decimal Types เป็นตัวเลขที่หลักทศนิยมมีความยาวกว่า Floating Point Types ซึ่งความยาวอยู่ที่ประมาณ -10^308 ถึง 10308 ตำแหน่ง

3. Null Values ข้อมูลที่เป็นค่าว่าง หรือไม่มีข้อมูล จะแทนด้วย NULL

4. Complex Types แบ่งออกเป็น 3ประเภท คือ Arrays, Maps และ Structs

NASA Case Study

ยกตัวอย่างกรณีศึกษาที่ใช้ Hive คือ NASA ได้สร้างระบบประเมินแบบจำลองสภาพภูมิอากาศระดับภูมิภาค (Regional Climate Model Evaluation System: RCMES) เพื่อวิเคราะห์ ประเมิน และคาดการณ์สภาพอากาศ โดยจำลองสภาพภูมิอากาศกับข้อมูลจาก Sensor ภายนอก ซึ่ง RCMES มีองค์ประกอบ 2 ส่วนหลัก คือ

Components of RCMES — Hive Tutorial for Beginners | Hive Architecture | NASA Case Study | Edureka
  1. RCMED (Regional Climate Model Evaluation Database) เป็นฐานข้อมูลบนคลาวด์ที่สามารถปรับขนาดได้ มีหน้าที่โหลดข้อมูลมาจาก Sensor จากนั้นสกัดข้อมูลที่ต้องการออกมาเพื่อทำการวิเคราะห์ และสุดท้ายจะแปลงข้อมูลที่วิเคราะห์ได้ให้อยู่ในรูปแบบ Tuples โดยเก็บค่าข้อมูล ดังนี้ (latitude, longitude, time, value, height) จากนั้น นำข้อมูลไปเก็บไว้ที่ฐานข้อมูล My SQL โดยผู้ใช้งานสามารถเข้าถึงข้อมูลที่มีอยู่ใน RCMED ได้โดยการ Query
  2. RCMET (Regional Climate Model Evaluation Toolkit) ผู้ใช้งานสามารถเปรียบเทียบ Reference Data ที่มีอยู่ใน RCMED กับข้อมูลผลลัพธ์ของแบบจำลองสภาพภูมิอากาศได้ เพื่อทำการวิเคราะห์และประเมินผลด้วยวิธีการต่างๆ โดย Reference Data ใน RCMED มาจากการสำรวจระยะไกลบนดาวเทียมด้วยพารามิเตอร์ต่างๆที่จำเป็นสำหรับการประเมินแบบจำลองสภาพภูมิอากาศ ตัวอย่างเช่น อุณหภูมิ พื้นผิวอากาศ และศักยภาพทางภูมิศาสตร์ สามารถนำมาคาดการณ์ปริมาณน้ำฝนรายเดือนได้ เป็นต้น

แต่แล้ว NASA ก็เผชิญปัญหาจากการใช้ระบบฐานข้อมูล MySQL

ปัญหาที่ NASA เจอก็คือ

  • เมื่อข้อมูลมีอยู่ในระบบฐานข้อมูล MySQL จำนวนมาก เช่น 6 พันล้าน Tuples แล้วเราต้องการ Query ข้อมูลทั้งหมดมาวิเคราะห์ จะทำให้ระบบขัดข้องได้ เนื่องจาก ข้อมูลมีขนาดใหญ่มาก
  • ถึงแม้ว่าเราจะแก้ปัญหาการโหลดข้อมูลขนาดใหญ่มาวิเคราะห์โดยการแบ่ง Table ใหญ่ๆ ให้กลายเป็น Table ย่อย แต่ระบบก็จะเกิด Overhead เยอะมากในขั้นตอนการประมวลผลข้อมูล

ดังนั้น เพื่อแก้ไขปัญหาดังกล่าวข้างต้น เราจำเป็นต้องใช้ระบบจัดเก็บข้อมูลที่สามารถขยายขนาดได้เพื่อรองรับการเก็บข้อมูลที่เพิ่มมากขึ้นเรื่อยๆอย่างรวดเร็ว NASA จึงเลือกใช้ Apache Hive มาช่วยในการแก้ปัญหา เนื่องจาก Hive ทำงานบน Hadoop จึงสามารถปรับขนาดได้ (Scale-up, Scale-out) และสามารถประมวลผลข้อมูลในรูปแบบกระจาย (Distributed) และขนาน (Parallel) กันได้ นอกจากนี้ HQL ก็ง่ายต่อการเรียนรู้เนื่องจากมี Syntax ที่คล้ายกับ SQL อีกด้วย

RCMES with Apache Hive — Hive Tutorial for Beginners | Hive Architecture | NASA Case Study | Edureka

จากภาพด้านบนแสดงการนำ Hive มาใช้ร่วมกับ RCMES โดยมีขั้นตอน คือ ติดตั้ง Hive โดยใช้ Cloudera และ Apache Hadoop จากนั้นใช้ Apache Sqoop เพื่อนำเข้าข้อมูลจากฐานข้อมูล MySQL ไปยัง Hive และผู้ใช้งานสามารถติดต่อกับ Hive ได้โดยผ่าน Cloudera Hue

--

--

No responses yet