ไฮฟ์คืออะไร? Archiเทคเจอร์และโหมด
⚡ สรุปอย่างชาญฉลาด
Hive คือเลเยอร์ SQL ของระบบนิเวศ Hadoop โดยแปลงคำสั่ง HiveQL ให้เป็นงานแบบกระจายที่อ่านข้อมูลที่มีโครงสร้างซึ่งจัดเก็บไว้แล้วบน HDFS ทำให้นักวิเคราะห์สามารถสอบถามตารางขนาดเพตาไบต์ได้โดยไม่ต้องเขียนโค้ด MapReduce ด้วยตนเอง

ไฮฟ์คืออะไร?
Hive เป็นเครื่องมือ ETL และคลังข้อมูลที่พัฒนาขึ้นบนระบบไฟล์แบบกระจายของ Hadoop (HDFS) Hive ช่วยให้การดำเนินการต่างๆ เช่น การค้นหาและดึงข้อมูล ทำได้ง่ายขึ้น
- การห่อหุ้มข้อมูล
- แบบสอบถามเฉพาะกิจ
- การวิเคราะห์ชุดข้อมูลขนาดใหญ่
ลักษณะสำคัญของไฮฟ์
ประเด็นด้านล่างนี้จะอธิบายถึงสิ่งที่ทำให้ Hive แตกต่างจากโปรแกรม MapReduce ทั่วไป
- ใน Hive ตารางและฐานข้อมูลจะถูกสร้างขึ้นก่อน จากนั้นจึงโหลดข้อมูลลงในตารางเหล่านี้
- Hive คือคลังข้อมูลที่ออกแบบมาเพื่อจัดการและสืบค้นข้อมูลที่มีโครงสร้างซึ่งจัดเก็บอยู่ในตารางเท่านั้น
- ในขณะที่จัดการกับข้อมูลที่มีโครงสร้าง MapReduce ไม่มีคุณสมบัติการเพิ่มประสิทธิภาพและการใช้งานที่สะดวกเหมือน UDF แต่เฟรมเวิร์ก Hive มี การเพิ่มประสิทธิภาพการสืบค้นหมายถึงวิธีการดำเนินการสืบค้นที่มีประสิทธิภาพในแง่ของประสิทธิภาพ
- ภาษาของ Hive ซึ่งได้รับแรงบันดาลใจจาก SQL ช่วยให้ผู้ใช้ไม่ต้องเผชิญกับความซับซ้อนของการเขียนโปรแกรม MapReduce โดยนำแนวคิดที่คุ้นเคยจากโลกของฐานข้อมูลเชิงสัมพันธ์มาใช้ซ้ำ เช่น ตาราง แถว คอลัมน์ และสคีมา เพื่อให้เรียนรู้ได้ง่าย
- การเขียนโปรแกรมของ Hadoop ทำงานบนไฟล์แบบเรียบ ดังนั้น Hive จึงสามารถใช้โครงสร้างไดเร็กทอรีได้ “พาร์ติชั่น” ข้อมูลเพื่อปรับปรุงประสิทธิภาพในการค้นหาข้อมูลบางรายการ
- ส่วนประกอบสำคัญของ Hive คือ metastore ซึ่งใช้สำหรับจัดเก็บข้อมูล schema โดยทั่วไป metastore นี้จะอยู่ในฐานข้อมูลเชิงสัมพันธ์ เราสามารถโต้ตอบกับ Hive ได้โดยใช้วิธีการต่างๆ เช่น
- เว็บ GUI
- Java อินเทอร์เฟซการเชื่อมต่อฐานข้อมูล (JDBC)
- การติดต่อสื่อสารส่วนใหญ่มักเกิดขึ้นผ่านทางอินเทอร์เฟซบรรทัดคำสั่ง (CLI) Hive มี CLI สำหรับเขียนคำสั่งค้นหาข้อมูลใน Hive โดยใช้ภาษา Hive Query Language (HQL)
- โดยทั่วไปไวยากรณ์ HQL จะคล้ายกับ SQL ไวยากรณ์ที่นักวิเคราะห์ข้อมูลส่วนใหญ่คุ้นเคย ตัวอย่างคำสั่ง SQL ด้านล่างแสดงข้อมูลทั้งหมดที่มีอยู่ในตารางที่ระบุชื่อไว้
- ตัวอย่างแบบสอบถาม : เลือก * จาก
- Hive รองรับไฟล์สี่รูปแบบ ได้แก่ ข้อความ ลำดับไฟล์ ORC และ RCFILE (บันทึกไฟล์เรียงเป็นแนว)
- สำหรับการจัดเก็บข้อมูลเมตาแบบผู้ใช้คนเดียว Hive ใช้ฐานข้อมูล Derby และสำหรับการจัดเก็บข้อมูลเมตาแบบหลายผู้ใช้หรือแบบใช้ร่วมกัน Hive ใช้ฐานข้อมูลอื่น MySQL.
สำหรับการตั้งค่า MySQL เพื่อใช้เป็นฐานข้อมูลและจัดเก็บข้อมูลเมตา โปรดดูบทช่วยสอนเกี่ยวกับเรื่องนี้ การกำหนดค่า Hive metastore ด้วย MySQLซึ่งสืบเนื่องมาจาก คู่มือการติดตั้ง Hive.
ประเด็นสำคัญบางประการเกี่ยวกับ Hive:
- ความแตกต่างหลักระหว่าง HQL และ SQL คือ คำสั่งค้นหาของ Hive จะทำงานบนโครงสร้างพื้นฐานของ Hadoop แทนที่จะเป็นฐานข้อมูลแบบดั้งเดิม
- การประมวลผลคำสั่งค้นหาของ Hive คือชุดของคำสั่งที่สร้างขึ้นโดยอัตโนมัติ แผนที่ลด งาน
- Hive รองรับแนวคิดเรื่องพาร์ติชันและบัคเก็ต เพื่อให้สามารถดึงข้อมูลได้ง่ายเมื่อไคลเอ็นต์เรียกใช้คำสั่งค้นหา
- Hive รองรับการปรับแต่ง ฟังก์ชันที่ผู้ใช้กำหนดเอง (UDFs) สำหรับการทำความสะอาดข้อมูล การกรองข้อมูล และงานอื่นๆ ที่คล้ายคลึงกัน เราสามารถกำหนด UDF ของ Hive ได้ตามความต้องการของโปรแกรมเมอร์
ฐานข้อมูล Hive Vs เชิงสัมพันธ์
Hive ทำงานที่ฐานข้อมูลเชิงสัมพันธ์ทำไม่ได้ เมื่อข้อมูลมีขนาดใหญ่ถึงระดับเพตาไบต์ การส่งผลลัพธ์กลับมาภายในไม่กี่วินาทีจึงมีความสำคัญ และ Hive ก็ทำได้อย่างมีประสิทธิภาพ ความแตกต่างที่สำคัญมีดังต่อไปนี้
ฐานข้อมูลเชิงสัมพันธ์คือ... “สคีมาสำหรับการอ่านและสคีมาสำหรับการเขียน”ขั้นตอนแรกคือการสร้างตาราง จากนั้นจึงแทรกข้อมูลลงในตารางนั้น ในตารางฐานข้อมูลเชิงสัมพันธ์ สามารถดำเนินการต่างๆ เช่น การแทรก การอัปเดต และการแก้ไขได้
รังผึ้งคือ “schema อยู่ในโหมดอ่านอย่างเดียว”ดังนั้นฟังก์ชันต่างๆ เช่น การอัปเดตและการแก้ไข จึงใช้งานไม่ได้ในเวอร์ชันแรกๆ เนื่องจากโดยทั่วไปแล้วการสืบค้นข้อมูลใน Hive ในคลัสเตอร์จะทำงานข้าม DataNode หลายตัว ทำให้ไม่สามารถอัปเดตและแก้ไขข้อมูลข้ามหลายโหนดได้ (Hive เวอร์ชันต่ำกว่า 0.13)
นอกจากนี้ Hive ยังรองรับสิ่งต่อไปนี้ด้วย “อ่านมาก เขียนครั้งเดียว” รูปแบบดังกล่าว ทำให้ในเวอร์ชันล่าสุด ตารางสามารถอัปเดตได้หลังจากแทรกข้อมูลแล้ว
หมายเหตุ: Hive เวอร์ชันใหม่กว่ามาพร้อมกับคุณสมบัติที่ได้รับการอัปเดต Hive 0.14 ได้เพิ่มฟังก์ชัน UPDATE และ DELETE เข้ามา และเวอร์ชันต่อมาได้เพิ่มการรองรับธุรกรรม ACID อย่างเต็มรูปแบบ
ตารางด้านล่างนี้สรุปการเปรียบเทียบไว้โดยย่อ
| แง่มุม | ฐานข้อมูลเชิงสัมพันธ์ | อาปาเช่ไฮฟ์ |
|---|---|---|
| การตรวจสอบความถูกต้องของสคีมา | ในการเขียน | อ่านแล้ว |
| ปริมาณข้อมูลทั่วไป | กิกะไบต์ถึงเทราไบต์ | เทราไบต์ถึงเพตาไบต์ |
| จำนวนงาน | การอ่านและการเขียนข้อมูลระดับแถวใน OLTP | การวิเคราะห์แบบกลุ่มสแกนเต็มรูปแบบ |
| ภาษาแบบสอบถาม | SQL | HQL เป็นภาษาโปรแกรมที่ได้รับแรงบันดาลใจจาก SQL |
| การกระทำ | เครื่องมือฐานข้อมูล | งานคลัสเตอร์แบบกระจาย |
รัง Archiเทคเจอร์
แผนภาพด้านล่างนี้อธิบายถึง อาปาเช่ รายละเอียดสถาปัตยกรรมของรังผึ้ง
Hive ประกอบด้วยส่วนหลักๆ 3 ส่วน ได้แก่:
- ไคลเอนต์ Hive
- บริการ Hive
- ระบบจัดเก็บข้อมูลและการประมวลผล Hive
ลูกค้าไฮฟ์
Hive มีไดรเวอร์ที่แตกต่างกันสำหรับการสื่อสารกับแอปพลิเคชันประเภทต่างๆ สำหรับแอปพลิเคชันที่ใช้ Thrift นั้น Hive จะมีไคลเอ็นต์ Thrift สำหรับการสื่อสาร
ใช้เพื่อการ Java สำหรับแอปพลิเคชันที่เกี่ยวข้อง จะมีไดรเวอร์ JDBC ให้ใช้งาน สำหรับแอปพลิเคชันประเภทอื่นๆ จะมีไดรเวอร์ ODBC ให้ใช้งาน ไคลเอ็นต์และไดรเวอร์เหล่านี้จะสื่อสารกับเซิร์ฟเวอร์ Hive ในบริการของ Hive ต่อไป
บริการไฮฟ์
การโต้ตอบระหว่างไคลเอ็นต์กับ Hive จะดำเนินการผ่านบริการของ Hive หากไคลเอ็นต์ต้องการดำเนินการใดๆ ที่เกี่ยวข้องกับการสืบค้นข้อมูลใน Hive ไคลเอ็นต์จะต้องสื่อสารผ่านบริการของ Hive
CLI ทำหน้าที่เป็นบริการ Hive สำหรับการดำเนินการ DDL ไดรเวอร์ทั้งหมดสื่อสารกับเซิร์ฟเวอร์ Hive และไดรเวอร์หลักในบริการ Hive ดังแสดงในแผนภาพสถาปัตยกรรมด้านบน
ไดรเวอร์ในบริการ Hive เป็นตัวขับเคลื่อนหลัก: มันสื่อสารกับ JDBC, ODBC และแอปพลิเคชันเฉพาะไคลเอ็นต์อื่นๆ จากนั้นส่งคำขอเหล่านั้นไปยังเมตาสโตร์และระบบไฟล์เพื่อประมวลผลต่อไป
ไฮฟ์สตอเรจและคอมพิวเตอร์
บริการต่างๆ ของ Hive เช่น metastore, ระบบไฟล์ และ job client จะสื่อสารกับพื้นที่จัดเก็บข้อมูลของ Hive และดำเนินการดังต่อไปนี้:
- ข้อมูลเมตาเกี่ยวกับตารางที่สร้างขึ้นใน Hive จะถูกจัดเก็บไว้ใน Hive ฐานข้อมูลเมตาสโตร์.
- ผลลัพธ์จากการสืบค้นและข้อมูลที่โหลดลงในตารางจะถูกจัดเก็บไว้ในคลัสเตอร์ Hadoop เอชดีเอฟเอส.
ขั้นตอนการดำเนินการงาน
แผนภาพด้านล่าง tracคือการส่งคำสั่งค้นหาจากส่วนติดต่อผู้ใช้ไปยัง DataNodes และส่งกลับมา
จากแผนภาพด้านบน เราสามารถเข้าใจขั้นตอนการทำงานของ Hive ร่วมกับ Hadoop ได้ โดยการไหลของข้อมูลใน Hive มีรูปแบบดังต่อไปนี้
- การเรียกใช้คำสั่งค้นหาจากส่วนติดต่อผู้ใช้ (UI)
- ไดรเวอร์จะโต้ตอบกับคอมไพเลอร์เพื่อรับแผน (ในที่นี้ แผนหมายถึงกระบวนการประมวลผลคำสั่งค้นหาและการรวบรวมข้อมูลเมตาที่เกี่ยวข้อง)
- คอมไพเลอร์สร้างแผนสำหรับการประมวลผลงาน คอมไพเลอร์สื่อสารกับเมตาสโตร์เพื่อรับคำขอเมตาเดตา
- เมตาสโตร์จะส่งข้อมูลเมตาเดต้ากลับไปยังคอมไพเลอร์
- คอมไพเลอร์สื่อสารกับไดรเวอร์โดยเสนอแผนการที่จะดำเนินการกับคำสั่งค้นหา
- ไดรเวอร์ส่งแผนการดำเนินการไปยังเอนจินการดำเนินการ
- หน่วยประมวลผล (EE) ทำหน้าที่เป็นสะพานเชื่อมระหว่าง Hive และ Hadoop เพื่อประมวลผลคำสั่งค้นหา รวมถึงการดำเนินการ DFS:
- EE จะติดต่อ NameNode ก่อน จากนั้นจึงติดต่อ DataNode เพื่อดึงค่าที่จัดเก็บไว้ในตาราง
- EE จะดึงข้อมูลที่ต้องการจาก DataNodes โดยข้อมูลตารางจริงจะอยู่บน DataNodes เท่านั้น ส่วนจาก NameNode จะดึงเฉพาะเมตาเดต้าสำหรับคำสั่งค้นหาเท่านั้น
- ระบบจะรวบรวมข้อมูลจริงจากโหนดข้อมูลที่เกี่ยวข้องกับคำค้นหาที่กล่าวถึง
- EE สื่อสารแบบสองทิศทางกับเมตาสโตร์เพื่อดำเนินการ DDL (ภาษาการกำหนดข้อมูล) เช่น สร้าง ลบ และแก้ไข เกี่ยวกับตารางและฐานข้อมูล เมตาสโตร์จะจัดเก็บเฉพาะชื่อฐานข้อมูล ชื่อตาราง และชื่อคอลัมน์เท่านั้น
- EE จะสื่อสารกับ daemon ของ Hadoop เช่น NameNode, DataNode และ job tracใช้เคอร์เนลเพื่อเรียกใช้คำสั่งค้นหาบนระบบไฟล์ Hadoop
- กำลังดึงผลลัพธ์จากไดรเวอร์
- ส่งผลลัพธ์ไปยังหน่วยประมวลผล เมื่อดึงผลลัพธ์จากโหนดข้อมูลมายังหน่วยประมวลผลแล้ว หน่วยประมวลผลจะส่งผลลัพธ์กลับไปยังไดรเวอร์และส่วนติดต่อผู้ใช้ (ส่วนหน้า)
Hive ติดต่อสื่อสารกับระบบไฟล์ Hadoop และโปรแกรมเบื้องหลัง (daemon) ผ่านทางกลไกการประมวลผล ลูกศรเส้นประในแผนภาพแสดงถึงการสื่อสารนั้น
โหมดต่างๆ ของไฮฟ์
Hive สามารถทำงานได้สองโหมด ขึ้นอยู่กับขนาดของโหนดข้อมูลใน Hadoop โหมดเหล่านี้ได้แก่:
- โหมดท้องถิ่น
- โหมด MapReduce
ควรใช้โหมดโลคอลเมื่อใด
- หากติดตั้ง Hadoop ในโหมดจำลองการกระจายตัวโดยมีโหนดข้อมูลเพียงโหนดเดียว เราจะใช้ Hive ในโหมดนี้
- หากขนาดข้อมูลเล็กพอที่จะจำกัดไว้เฉพาะเครื่องคอมพิวเตอร์เครื่องเดียว เราสามารถใช้โหมดนี้ได้
- การประมวลผลจะรวดเร็วมากในชุดข้อมูลขนาดเล็กที่มีอยู่ในเครื่องท้องถิ่น
ควรใช้โหมด MapReduce เมื่อใด
- หาก Hadoop มีโหนดข้อมูลหลายโหนดและข้อมูลกระจายอยู่ตามโหนดต่างๆ เราจะใช้ Hive ในโหมดนี้
- โปรแกรมนี้ทำงานกับข้อมูลจำนวนมาก และคำสั่งค้นหาจะถูกประมวลผลแบบขนาน
- การประมวลผลชุดข้อมูลขนาดใหญ่ที่มีประสิทธิภาพดีขึ้นสามารถทำได้ผ่านโหมดนี้
ใน Hive เราสามารถตั้งค่าคุณสมบัติเพื่อระบุโหมดการทำงานของ Hive ได้ โดยค่าเริ่มต้นจะทำงานในโหมด MapReduce และสำหรับโหมดโลคอล คุณสามารถใช้การตั้งค่าต่อไปนี้:
SET mapred.job.tracker=local;
ตั้งแต่ Hive เวอร์ชัน 0.7 เป็นต้นไป จะรองรับโหมดที่รันงาน MapReduce ในโหมดโลคอลโดยอัตโนมัติ ใน Hive 4.x เอ็นจิ้นเริ่มต้นคือ Apache Tez ดังนั้นคุณสมบัตินี้จึงใช้กับเส้นทาง MapReduce แบบดั้งเดิม
ไฮฟ์เซิร์ฟเวอร์2 (HS2) คืออะไร?
HiveServer2 (HS2) เป็นอินเทอร์เฟซเซิร์ฟเวอร์ที่ทำหน้าที่ดังต่อไปนี้:
- ช่วยให้ไคลเอนต์ระยะไกลสามารถดำเนินการค้นหากับ Hive
- ดึงผลลัพธ์ของคำค้นหาเหล่านั้น
เวอร์ชันปัจจุบันเพิ่มคุณสมบัติขั้นสูงโดยใช้ Thrift RPC เช่น:
- การทำงานพร้อมกันหลายไคลเอนต์
- การยืนยันตัวตน
HS2 ทำงานอยู่เบื้องหลัง Beeline และทุกเซสชัน JDBC หรือ ODBC ซึ่งเป็นเหตุผลที่มันเข้ามาแทนที่ Hive CLI สำหรับผู้ใช้คนเดียว ตัวดำเนินการและฟังก์ชันในตัวของ HiveQL การอ้างอิงคือขั้นตอนต่อไปที่เหมาะสม


