Hive Tutorial - สถาปัตยกรรม Hive และกรณีศึกษาของ NASA



บล็อกการสอน Hive นี้จะให้ความรู้เชิงลึกเกี่ยวกับ Hive Architecture และ Hive Data Model นอกจากนี้ยังอธิบายกรณีศึกษาของ NASA เกี่ยวกับ Apache Hive

Apache Hive Tutorial: บทนำ

Hive เป็นเครื่องมือที่ใช้กันอย่างแพร่หลายในอุตสาหกรรมสำหรับ Big Data Analytics และเป็นเครื่องมือที่ยอดเยี่ยมในการเริ่มต้น ด้วย. ในบล็อกการสอน Hive นี้เราจะพูดคุยเกี่ยวกับ Apache Hive ในเชิงลึก Apache Hive เป็นเครื่องมือจัดเก็บข้อมูลในไฟล์ ซึ่งให้ SQL เป็นเหมือนภาษาสำหรับการสืบค้นและวิเคราะห์ข้อมูลขนาดใหญ่ แรงจูงใจที่อยู่เบื้องหลังการพัฒนา Hive คือเส้นทางการเรียนรู้ที่ไร้แรงเสียดทานสำหรับนักพัฒนาและนักวิเคราะห์ SQL Hive ไม่ได้เป็นเพียงผู้ช่วยให้ผู้ที่ไม่มีพื้นฐานการเขียนโปรแกรม แต่ยังช่วยลดการทำงานของโปรแกรมเมอร์ที่ใช้เวลานานในการเขียนโปรแกรม MapReduce ในบล็อก Apache Hive Tutorial นี้ฉันจะพูดถึง:





Apache Hive Tutorial: Hive คืออะไร?

Apache Hive เป็นระบบคลังข้อมูลที่สร้างขึ้นจาก Hadoop และใช้สำหรับวิเคราะห์ข้อมูลที่มีโครงสร้างและกึ่งโครงสร้างไฮฟ์สรุปความซับซ้อนของ Hadoop MapReduce โดยทั่วไปจะมีกลไกในการฉายโครงสร้างไปยังข้อมูลและดำเนินการสืบค้นที่เขียนด้วย HQL (Hive Query Language) ที่คล้ายกับคำสั่ง SQL ภายในแบบสอบถามหรือ HQL เหล่านี้จะถูกแปลงเป็นงานลดแผนที่โดยคอมไพเลอร์ Hive ดังนั้นคุณไม่จำเป็นต้องกังวลเกี่ยวกับการเขียนโปรแกรม MapReduce ที่ซับซ้อนเพื่อประมวลผลข้อมูลของคุณโดยใช้ Hadoop มีเป้าหมายสำหรับผู้ใช้ที่พอใจกับ SQL Apache Hive รองรับ Data Definition Language (DDL), Data Manipulation Language (DML) และ User Defined Functions (UDF)

Hive Tutorial สำหรับมือใหม่ | การทำความเข้าใจ Hive ในเชิงลึก | Edureka



SQL + Hadoop MapReduce = HiveQL

Apache Hive Tutorial: Story of Hive - จาก Facebook ไปยัง Apache

Facebook Use Case - Hive Tutorial - Edurekaรูปที่ : Hive Tutorial - กรณีการใช้งาน Facebook

ความท้าทายที่ Facebook: การเติบโตของข้อมูลแบบทวีคูณ

ก่อนปี 2008 โครงสร้างพื้นฐานการประมวลผลข้อมูลทั้งหมดใน Facebook ถูกสร้างขึ้นรอบ ๆ คลังข้อมูลตาม RDBMS เชิงพาณิชย์ โครงสร้างพื้นฐานเหล่านี้มีความสามารถเพียงพอต่อความต้องการของ Facebook ในขณะนั้น แต่เนื่องจากข้อมูลเริ่มเติบโตอย่างรวดเร็วจึงกลายเป็นความท้าทายอย่างมากในการจัดการและประมวลผลชุดข้อมูลขนาดใหญ่นี้ ตามบทความของ Facebook ข้อมูลที่ปรับขนาดจากชุดข้อมูล 15 TB ในปี 2550 เป็นข้อมูล PB 2 รายการในปี 2552 นอกจากนี้ผลิตภัณฑ์ของ Facebook จำนวนมากยังเกี่ยวข้องกับการวิเคราะห์ข้อมูลเช่นข้อมูลเชิงลึกของผู้ชม, คำศัพท์ของ Facebook, โฆษณาบน Facebook และอื่น ๆ ต้องการโซลูชันที่ปรับขนาดได้และประหยัดเพื่อรับมือกับปัญหานี้ดังนั้นจึงเริ่มใช้ Hadoop framework



การทำให้เป็นประชาธิปไตย Hadoop - MapReduce

แต่เมื่อข้อมูลเพิ่มขึ้นความซับซ้อนของรหัสลดแผนที่ก็เพิ่มขึ้นตามสัดส่วน ดังนั้นการฝึกอบรมผู้ที่ไม่มีพื้นฐานการเขียนโปรแกรมให้เขียนโปรแกรม MapReduce จึงเป็นเรื่องยาก นอกจากนี้สำหรับการวิเคราะห์อย่างง่ายคุณต้องเขียนโค้ด MapReduce ร้อยบรรทัด เนื่องจากวิศวกรและนักวิเคราะห์ใช้ SQL กันอย่างแพร่หลายรวมถึง Facebook ดังนั้นการวาง SQL ไว้ด้านบนของ Hadoop จึงดูเหมือนเป็นวิธีที่สมเหตุสมผลในการทำให้ Hadoop สามารถเข้าถึงได้สำหรับผู้ใช้ที่มีพื้นหลัง SQL

ดังนั้นความสามารถของ SQL ที่เพียงพอสำหรับข้อกำหนดด้านการวิเคราะห์ส่วนใหญ่และความสามารถในการปรับขนาดของ Hadoop จึงให้กำเนิด อาปาเช่ไฮฟ์ ที่อนุญาตให้ดำเนินการ SQL เช่นแบบสอบถามบนข้อมูลที่มีอยู่ใน HDFS ต่อมาโครงการ Hive ได้เปิดให้บริการในเดือนสิงหาคม 2008 โดย Facebook และเปิดให้ใช้ฟรีในชื่อ Apache Hive ในวันนี้

ตอนนี้ให้เราดูคุณสมบัติหรือข้อดีของ Hive ที่ทำให้เป็นที่นิยม

Apache Hive Tutorial: ข้อดีของ Hive

  • มีประโยชน์สำหรับผู้ที่ไม่ได้มีพื้นฐานมาจากการเขียนโปรแกรมเนื่องจากไม่จำเป็นต้องเขียนโปรแกรม MapReduce ที่ซับซ้อน
  • ขยายได้ และ ปรับขนาดได้ เพื่อรับมือกับปริมาณที่เพิ่มขึ้นและข้อมูลที่หลากหลายโดยไม่ส่งผลกระทบต่อประสิทธิภาพของระบบ
  • เป็นเครื่องมือ ETL (Extract, Transform, Load) ที่มีประสิทธิภาพ
  • Hive รองรับแอปพลิเคชันไคลเอนต์ใด ๆ ที่เขียนด้วย Java, PHP, Python, C ++ หรือ Ruby โดยการเปิดเผยไฟล์ เซิร์ฟเวอร์ Thrift . (คุณสามารถใช้ภาษาฝั่งไคลเอ็นต์เหล่านี้ที่ฝังกับ SQL เพื่อเข้าถึงฐานข้อมูลเช่น DB2 เป็นต้น)
  • เนื่องจากข้อมูลเมตาดาต้าของ Hive ถูกเก็บไว้ใน RDBMS จึงช่วยลดเวลาในการตรวจสอบความหมายระหว่างการดำเนินการสืบค้นได้อย่างมาก

Apache Hive Tutorial: จะใช้ Apache Hive ได้ที่ไหน?

Apache Hive ใช้ประโยชน์จากทั้งสองโลกเช่นระบบฐานข้อมูล SQL และ กรอบ. ดังนั้นจึงถูกใช้โดย บริษัท จำนวนมาก ส่วนใหญ่จะใช้สำหรับคลังข้อมูลซึ่งคุณสามารถทำการวิเคราะห์และการขุดข้อมูลที่ไม่ต้องใช้การประมวลผลแบบเรียลไทม์ ฟิลด์บางฟิลด์ที่คุณสามารถใช้ Apache Hive มีดังนี้:

  • คลังข้อมูล
  • การวิเคราะห์เฉพาะกิจ

ดังที่กล่าวไปแล้วว่าคุณไม่สามารถปรบมือเพียงข้างเดียวได้นั่นคือคุณไม่สามารถแก้ปัญหาทุกอย่างได้ด้วยเครื่องมือเดียว ดังนั้นคุณสามารถจับคู่ Hive กับเครื่องมืออื่น ๆ เพื่อใช้ในโดเมนอื่น ๆ ได้ ตัวอย่างเช่น Tableau พร้อมกับ Apache Hive สามารถใช้สำหรับ Data Visualization การรวม Apache Tez กับ Hive จะช่วยให้คุณสามารถประมวลผลแบบเรียลไทม์เป็นต้น
ก้าวไปข้างหน้าในบล็อก Apache Hive Tutorial นี้ให้เราดูกรณีศึกษาของ NASA ที่คุณจะได้เรียนรู้ว่า Hive แก้ปัญหาที่นักวิทยาศาสตร์ของ NASA เผชิญอยู่ได้อย่างไรขณะทำการประเมิน Climate Models

Hive Tutorial: กรณีศึกษาของ NASA

แบบจำลองสภาพภูมิอากาศเป็นการแสดงทางคณิตศาสตร์ของระบบภูมิอากาศโดยพิจารณาจากปัจจัยต่างๆที่ส่งผลกระทบต่อสภาพภูมิอากาศของโลก โดยทั่วไปจะอธิบายถึงปฏิสัมพันธ์ของตัวขับเคลื่อนต่างๆของสภาพภูมิอากาศเช่นมหาสมุทรดวงอาทิตย์บรรยากาศ ฯลฯ ถึงให้ข้อมูลเชิงลึกเกี่ยวกับพลวัตของระบบภูมิอากาศ ใช้เพื่อแสดงสภาพภูมิอากาศโดยจำลองการเปลี่ยนแปลงสภาพภูมิอากาศตามปัจจัยที่ส่งผลต่อสภาพภูมิอากาศ ห้องปฏิบัติการ Jet Propulsion ของ NASA ได้พัฒนา Regional Climate Model Evaluation System (RCMES) สำหรับการวิเคราะห์และประเมินโมเดลเอาต์พุตสภาพภูมิอากาศเทียบกับข้อมูลการสำรวจระยะไกลที่มีอยู่ในที่เก็บภายนอกต่างๆ

RCMES (Regional Climate Model Evaluation System) มีองค์ประกอบสองส่วน:

  • RCMED (ฐานข้อมูลการประเมินแบบจำลองสภาพภูมิอากาศในภูมิภาค):

เป็นฐานข้อมูลระบบคลาวด์ที่ปรับขนาดได้ซึ่งโหลดข้อมูลการสำรวจระยะไกลและข้อมูลการวิเคราะห์ซ้ำซึ่งเกี่ยวข้องกับสภาพอากาศโดยใช้ตัวแยกเช่น Apache OODT extractors, Apache Tika เป็นต้นสุดท้ายจะแปลงข้อมูลเป็นแบบจำลองจุดข้อมูลซึ่งอยู่ในรูปแบบ (ละติจูด , ลองจิจูด, เวลา, ค่า, ความสูง) และจัดเก็บไว้ในฐานข้อมูล My SQL ไคลเอนต์สามารถดึงข้อมูลที่มีอยู่ใน RCMED โดยดำเนินการสอบถาม Space / Time คำอธิบายของคำถามดังกล่าวไม่เกี่ยวข้องกับเราในขณะนี้

  • RCMET (ชุดเครื่องมือประเมินแบบจำลองสภาพภูมิอากาศในภูมิภาค):

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

java แบบตื้นและแบบชัดลึก

ข้อมูลอ้างอิงใน RCMED มาจากการสำรวจระยะไกลโดยใช้ดาวเทียมตามพารามิเตอร์ต่างๆที่จำเป็นสำหรับการประเมินแบบจำลองสภาพภูมิอากาศ ตัวอย่างเช่น - AIRS (Atmospheric Infrared Sounder) ให้พารามิเตอร์ต่างๆเช่นอุณหภูมิอากาศพื้นผิวอุณหภูมิและ Geopotential TRMM (ภารกิจการวัดปริมาณน้ำฝนในเขตร้อน) ให้ปริมาณน้ำฝนรายเดือนเป็นต้น

ปัญหาที่ NASA ต้องเผชิญกับระบบฐานข้อมูล MySQL:

  • หลังจากโหลดฐานข้อมูล MySQL ด้วย 6 พันล้าน tuples ของแบบฟอร์ม (ละติจูดลองจิจูดเวลาค่าจุดข้อมูลความสูง) ระบบขัดข้องดังที่แสดงในภาพด้านบน
  • แม้ว่าจะแบ่งตารางทั้งหมดออกเป็นส่วนย่อย ๆ แล้วระบบก็สร้างค่าใช้จ่ายจำนวนมากในขณะประมวลผลข้อมูล

ดังนั้นพวกเขาจึงต้องการโซลูชันที่ปรับขนาดได้ซึ่งสามารถจัดเก็บและประมวลผลข้อมูลจำนวนมหาศาลนี้ด้วย SQL เช่นความสามารถในการสืบค้น ในที่สุดพวกเขาตัดสินใจใช้ Apache Hive เพื่อเอาชนะปัญหาที่ระบุไว้ข้างต้น

Apache Hive สามารถแก้ปัญหาได้อย่างไร?

ตอนนี้เรามาดูกันว่าคุณลักษณะเหล่านี้มีอะไรบ้างที่ทำให้ทีมงาน JPL ของ NASA รวม Apache Hive เป็นส่วนสำคัญในกลยุทธ์การแก้ปัญหา:

  • เนื่องจาก Apache Hive ทำงานอยู่ด้านบนของ Hadoop จึงสามารถปรับขนาดได้และสามารถประมวลผลข้อมูลแบบกระจายและแบบขนาน
  • มี Hive Query Language ซึ่งคล้ายกับ SQL และง่ายต่อการเรียนรู้

การปรับใช้ Hive:

ภาพต่อไปนี้อธิบายถึง RCMES Architect ที่มีการรวม Apache Hive:

รูปที่ : Hive Tutorial - สถาปัตยกรรม RCMES พร้อม Apache Hive

ภาพด้านบนแสดงการปรับใช้ apache hive ใน RCMES ทีม NASA ทำตามขั้นตอนต่อไปนี้ในขณะที่ใช้ Apache Hive:

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

การสังเกตการเปรียบเทียบเบื้องต้นกับกลุ่ม:

  • ในขั้นต้นพวกเขาโหลดจุดข้อมูล 2.5 พันล้านจุดลงในตารางเดียวและดำเนินการค้นหาแบบนับ ตัวอย่างเช่น, รัง> เลือกจำนวน (datapoint_id) จาก dataPoint ใช้เวลา 5-6 นาทีในการนับบันทึกทั้งหมด (15–17 นาทีสำหรับข้อมูลทั้งหมด 6.8 พันล้านรายการ)
  • ขั้นตอนการลดนั้นรวดเร็ว แต่ระยะแผนที่ใช้เวลาดำเนินการ 95% ของเวลาทั้งหมด พวกเขาใช้หก ( 4x ควอดคอร์ ) กับ แรม 24 GB (โดยประมาณ) ในแต่ละระบบ
  • แม้ว่าจะเพิ่มเครื่องมากขึ้นแล้วก็ตามการเปลี่ยนขนาดบล็อก HDFS (64 MB, 128 MB, 256 MB) และการเปลี่ยนแปลงตัวแปรการกำหนดค่าอื่น ๆ อีกมากมาย (io.เรียงลำดับ.ปัจจัย i.เรียงลำดับ.mb) พวกเขาไม่ประสบความสำเร็จมากนักในการลดเวลาในการนับ

ข้อมูลจากสมาชิกของชุมชน Hive:

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

  • พวกเขากล่าวว่าความเร็วในการอ่าน HDFS อยู่ที่ประมาณ 60 MB / วินาที เมื่อเทียบกับ 1GB / s ในกรณีของดิสก์ภายในขึ้นอยู่กับความจุของเครือข่ายและปริมาณงานบน NameNode
  • สมาชิกแนะนำว่า 16 ผู้ทำแผนที่ จะต้องใช้ในระบบปัจจุบันเพื่อให้ตรงกับประสิทธิภาพ I / O ของงานโลคัลที่ไม่ใช่ Hadoop
  • พวกเขายังแนะนำให้ลด แยกขนาด สำหรับผู้ทำแผนที่แต่ละคนเพื่อเพิ่มจำนวนของผู้ทำแผนที่จึงให้ความเท่าเทียมกันมากขึ้น
  • สุดท้ายสมาชิกในชุมชนบอกให้พวกเขา ใช้จำนวน (1) แทนที่จะอ้างถึง นับ ( datapoint_id) . เนื่องจากในกรณีของ count (1) ไม่มีคอลัมน์อ้างอิงดังนั้นจึงไม่มีการคลายการบีบอัดและการดีซีเรียลไลเซชันเกิดขึ้นในขณะที่ทำการนับ

ในที่สุด NASA ก็สามารถปรับแต่งกลุ่ม Hive ของตนได้ตามความคาดหวังโดยคำนึงถึงคำแนะนำทั้งหมดที่ได้รับจากสมาชิกชุมชน Hive ดังนั้นพวกเขาจึงสามารถสืบค้นแถวหลายพันล้านแถวในเวลาเพียง 15 วินาทีโดยใช้การกำหนดค่าระบบที่กล่าวมาข้างต้น

Apache Hive Tutorial: Hive Architecture และส่วนประกอบต่างๆ

รูปภาพต่อไปนี้อธิบายถึงสถาปัตยกรรมไฮฟ์และโฟลว์ที่ส่งแบบสอบถามเข้ามารังและสุดท้ายประมวลผลโดยใช้กรอบ MapReduce:

รูปที่ : Hive Tutorial - สถาปัตยกรรม Hive

ดังที่แสดงในภาพด้านบน Hive Architecture สามารถแบ่งออกเป็นส่วนประกอบต่อไปนี้:

  • ลูกค้ากลุ่ม: Hive รองรับแอปพลิเคชันที่เขียนในหลายภาษาเช่น Java, C ++, Python เป็นต้นโดยใช้ไดรเวอร์ JDBC, Thrift และ ODBC ดังนั้นเราสามารถเขียนโปรแกรมไคลเอนต์กลุ่มที่เขียนด้วยภาษาที่พวกเขาเลือกได้ตลอดเวลา
  • บริการ Hive: Apache Hive ให้บริการต่างๆเช่น CLI, Web Interface เป็นต้นเพื่อดำเนินการสืบค้น เราจะสำรวจแต่ละคนในบล็อกการสอน Hive นี้ในไม่ช้า
  • กรอบการประมวลผลและการจัดการทรัพยากร: ภายในHive ใช้เฟรมเวิร์ก Hadoop MapReduce เป็นเอนจิ้นโดยพฤตินัยเพื่อดำเนินการสืบค้น เป็นหัวข้อแยกต่างหากในตัวมันเองดังนั้นจึงไม่ได้กล่าวถึงในที่นี้
  • พื้นที่จัดเก็บแบบกระจาย: เนื่องจาก Hive ได้รับการติดตั้งไว้ที่ด้านบนของ Hadoop จึงใช้ HDFS พื้นฐานสำหรับที่เก็บข้อมูลแบบกระจาย คุณสามารถอ้างถึงไฟล์ บล็อก HDFS เพื่อเรียนรู้เพิ่มเติม

ตอนนี้ให้เราสำรวจองค์ประกอบหลักสองส่วนแรกใน Hive Architecture:

1. ลูกค้ากลุ่ม:

Apache Hive รองรับแอปพลิเคชันไคลเอนต์ประเภทต่างๆสำหรับการดำเนินการค้นหาใน Hive ไคลเอนต์เหล่านี้สามารถแบ่งออกเป็นสามประเภท:

  • ลูกค้าประหยัด: เนื่องจากเซิร์ฟเวอร์ Hive ใช้ Apache Thrift จึงสามารถตอบสนองคำขอจากภาษาโปรแกรมทั้งหมดที่รองรับ Thrift
  • ลูกค้า JDBC: Hive อนุญาตให้แอปพลิเคชัน Java เชื่อมต่อโดยใช้ไดรเวอร์ JDBC ซึ่งกำหนดไว้ในคลาส org.apache.Hadoop.hive.jdbc.HiveDriver
  • ลูกค้า ODBC: Hive ODBC Driver อนุญาตให้แอปพลิเคชันที่รองรับโปรโตคอล ODBC เชื่อมต่อกับ Hive (เช่นเดียวกับไดรเวอร์ JDBC ไดรเวอร์ ODBC ใช้ Thrift เพื่อสื่อสารกับเซิร์ฟเวอร์ Hive)

2. บริการ Hive:

Hive ให้บริการมากมายดังที่แสดงในภาพด้านบน ให้เราดูแต่ละรายการ:

  • Hive CLI (อินเตอร์เฟสบรรทัดคำสั่ง): นี่คือเชลล์เริ่มต้นที่จัดเตรียมโดย Hive ซึ่งคุณสามารถดำเนินการสอบถามและคำสั่ง Hive ของคุณได้โดยตรง
  • Apache Hive Web อินเทอร์เฟซ: นอกเหนือจากอินเทอร์เฟซบรรทัดคำสั่งแล้ว Hive ยังมี GUI บนเว็บสำหรับดำเนินการสืบค้นและคำสั่ง Hive
  • เซิร์ฟเวอร์ไฮฟ์: เซิร์ฟเวอร์ Hive สร้างขึ้นบน Apache Thrift ดังนั้นจึงเรียกอีกอย่างว่า Thrift Server ที่อนุญาตให้ไคลเอนต์ต่าง ๆ ส่งคำขอไปยัง Hive และเรียกผลลัพธ์สุดท้าย
  • ไดรเวอร์ Apache Hive: มีหน้าที่รับแบบสอบถามที่ส่งผ่านอินเตอร์เฟส CLI, UI ของเว็บ, Thrift, ODBC หรือ JDBC โดยไคลเอ็นต์ จากนั้นโปรแกรมควบคุมจะส่งแบบสอบถามไปยังคอมไพเลอร์ที่ซึ่งการแยกวิเคราะห์การตรวจสอบประเภทและการวิเคราะห์ความหมายเกิดขึ้นด้วยความช่วยเหลือของสคีมาที่มีอยู่ในการแพร่กระจาย. ในขั้นตอนต่อไปแผนตรรกะที่ปรับให้เหมาะสมจะถูกสร้างขึ้นในรูปแบบของ DAG (Directed Acyclic Graph) ของงานลดแผนที่และงาน HDFS ในที่สุดโปรแกรมเรียกใช้งานจะเรียกใช้งานเหล่านี้ตามลำดับการอ้างอิงโดยใช้ Hadoop
  • การแพร่กระจาย: คุณสามารถคิดว่าการแพร่กระจายเป็นที่เก็บส่วนกลางสำหรับจัดเก็บข้อมูลเมตาดาต้าทั้งหมดของ Hive ข้อมูลเมตาของไฮฟ์ประกอบด้วยข้อมูลประเภทต่างๆเช่นโครงสร้างของตารางและพาร์ติชันพร้อมกับคอลัมน์ประเภทคอลัมน์ซีเรียลไลเซอร์และ deserializer ซึ่งจำเป็นสำหรับการอ่าน / เขียนบนข้อมูลที่มีอยู่ใน HDFS การแพร่กระจายประกอบด้วยสองหน่วยพื้นฐาน:
    • บริการที่ให้การแพร่กระจายเข้าถึง otheบริการ Hive
    • พื้นที่จัดเก็บดิสก์สำหรับข้อมูลเมตาซึ่งแยกจากที่เก็บข้อมูล HDFS

ตอนนี้ให้เราเข้าใจวิธีต่างๆในการใช้งาน Hive metastoreในส่วนถัดไปของ Hive Tutorial นี้

Apache Hive Tutorial: Metastore Configuration

Metastore เก็บข้อมูลข้อมูลเมตาโดยใช้ RDBMS และเลเยอร์โอเพนซอร์ส ORM (Object Relational Model) ที่เรียกว่า Data Nucleus ซึ่งจะแปลงการแสดงวัตถุเป็นสคีมาเชิงสัมพันธ์และในทางกลับกัน เหตุผลในการเลือก RDBMS แทน HDFS คือเพื่อให้ได้เวลาแฝงต่ำ เราสามารถใช้ metastore ได้ในสามการกำหนดค่าดังต่อไปนี้:

1. Metastore ในตัว:

ทั้งบริการ metastore และบริการ Hive จะทำงานใน JVM เดียวกันตามค่าเริ่มต้นโดยใช้อินสแตนซ์ Derby Database ที่ฝังไว้ซึ่งข้อมูลเมตาถูกเก็บไว้ในดิสก์ภายในเครื่อง สิ่งนี้เรียกว่าการกำหนดค่าการแพร่กระจายแบบฝัง ในกรณีนี้ผู้ใช้สามารถเชื่อมต่อกับฐานข้อมูล metastore ได้ครั้งละหนึ่งคนเท่านั้น หากคุณเริ่มอินสแตนซ์ที่สองของไดรเวอร์ Hive คุณจะได้รับข้อผิดพลาด นี่เป็นสิ่งที่ดีสำหรับการทดสอบหน่วย แต่ไม่ใช่สำหรับโซลูชันที่ใช้ได้จริง

2. การแพร่กระจายในท้องถิ่น:

การกำหนดค่านี้ช่วยให้เรามี Hive หลายเซสชันเช่นผู้ใช้หลายคนสามารถใช้ฐานข้อมูล metastore ในเวลาเดียวกัน สิ่งนี้ทำได้โดยใช้ฐานข้อมูลที่สอดคล้องกับ JDBC เช่น MySQL ซึ่งทำงานใน JVM แยกต่างหากหรือเครื่องอื่นนอกเหนือจากบริการ Hive และบริการ metastore ซึ่งทำงานใน JVM เดียวกันดังที่แสดงด้านบน โดยทั่วไปทางเลือกที่นิยมมากที่สุดคือการติดตั้งเซิร์ฟเวอร์ MySQL เป็นฐานข้อมูลการแพร่กระจาย

3. การแพร่กระจายระยะไกล:

ในการกำหนดค่าการแพร่กระจายระยะไกลบริการ metastore จะทำงานบน JVM แยกต่างหากของตัวเองและไม่อยู่ใน Hive service JVM กระบวนการอื่น ๆ สื่อสารกับเซิร์ฟเวอร์ metastore โดยใช้ Thrift Network API คุณสามารถมีเซิร์ฟเวอร์ metastore อย่างน้อยหนึ่งเซิร์ฟเวอร์ในกรณีนี้เพื่อให้มีความพร้อมใช้งานมากขึ้นข้อได้เปรียบหลักของการใช้การแพร่กระจายระยะไกลคือคุณไม่จำเป็นต้องแชร์ข้อมูลรับรองการเข้าสู่ระบบ JDBC กับผู้ใช้ Hive แต่ละคนเพื่อเข้าถึงฐานข้อมูล metastore

Apache Hive Tutorial: Data Model

ข้อมูลใน Hive สามารถแบ่งออกเป็นสามประเภทในระดับรายละเอียด:

  • โต๊ะ
  • พาร์ทิชัน
  • ถัง

ตาราง:

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

1. ตารางการจัดการ:

คำสั่ง:

สร้างตาราง (column1 data_type, column2 data_type)

โหลดข้อมูลเข้าตารางที่จัดการ _table

ตามชื่อที่แนะนำ (ตารางที่มีการจัดการ) Hive มีหน้าที่จัดการข้อมูลของตารางที่มีการจัดการ กล่าวอีกนัยหนึ่งความหมายของการพูดว่า“ Hive จัดการข้อมูล” ก็คือถ้าคุณโหลดข้อมูลจากไฟล์ที่มีอยู่ใน HDFS ลงใน Hive ตารางที่มีการจัดการ และออกคำสั่ง DROP ตารางพร้อมกับข้อมูลเมตาจะถูกลบ ดังนั้นข้อมูลที่เป็นของตกหล่น Managed_table ไม่มีอยู่ที่ใดใน HDFS อีกต่อไปและคุณไม่สามารถเรียกคืนได้ด้วยวิธีใด ๆ โดยทั่วไปคุณกำลังย้ายข้อมูลเมื่อคุณออกคำสั่ง LOAD จากตำแหน่งไฟล์ HDFS ไปยังไดเรกทอรี Hive warehouse

บันทึก: พา ธ ดีฟอลต์ของไดเร็กทอรี warehouse ถูกตั้งค่าเป็น / user / hive / warehouse ข้อมูลของตารางไฮฟ์อยู่ใน warehouse_directory / table_name (HDFS) คุณยังสามารถระบุพา ธ ของไดเร็กทอรี warehouse ในพารามิเตอร์คอนฟิกูเรชัน hive.metastore.warehouse.dir ที่มีอยู่ใน hive-site.xml

2. ตารางภายนอก:

คำสั่ง:

สร้างตารางภายนอก (column1 data_type, column2 data_type) LOCATION ''

โหลดข้อมูลทางเข้า ‘’ ลงในตาราง

สำหรับ ตารางภายนอก Hive ไม่รับผิดชอบในการจัดการข้อมูล ในกรณีนี้เมื่อคุณออกคำสั่ง LOAD Hive จะย้ายข้อมูลไปยังไดเร็กทอรีคลังข้อมูล จากนั้นไฮฟ์จะสร้างข้อมูลเมตาดาต้าสำหรับตารางภายนอก ตอนนี้ถ้าคุณออกคำสั่ง DROP บน ตารางภายนอก ระบบจะลบเฉพาะข้อมูลเมตาดาต้าเกี่ยวกับตารางภายนอกเท่านั้น ดังนั้นคุณยังคงสามารถดึงข้อมูลของตารางภายนอกนั้นจากไดเร็กทอรีคลังข้อมูลโดยใช้คำสั่ง HDFS

พาร์ทิชัน:

คำสั่ง:

สร้างตาราง table_name (column1 data_type, column2 data_type) PARTITIONED BY (partition1 data_type, partition2 data_type และ hellip.)

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

บันทึก: โปรดจำไว้ว่าข้อผิดพลาดที่เกิดขึ้นบ่อยที่สุดในขณะสร้างพาร์ติชันคือการระบุชื่อคอลัมน์ที่มีอยู่เป็นคอลัมน์พาร์ติชัน ขณะดำเนินการดังกล่าวคุณจะได้รับข้อผิดพลาด -“ ข้อผิดพลาดในการวิเคราะห์เชิงความหมาย: คอลัมน์ที่ทำซ้ำในคอลัมน์การแบ่งพาร์ติชัน”

ให้เราเข้าใจการแบ่งพาร์ติชันโดยใช้ตัวอย่างที่ฉันมีตาราง student_details ที่มีข้อมูลนักศึกษาของวิทยาลัยวิศวกรรมบางแห่งเช่น student_id ชื่อแผนกปี ฯลฯ ตอนนี้ถ้าฉันทำการแบ่งพาร์ติชันตามคอลัมน์แผนกข้อมูลของนักเรียนทั้งหมด ที่เป็นของแผนกใดแผนกหนึ่งจะถูกจัดเก็บไว้ด้วยกันในพาร์ติชันนั้น ในทางกายภาพพาร์ติชันไม่ใช่อะไรนอกจากไดเร็กทอรีย่อยในไดเร็กทอรีตาราง

สมมติว่าเรามีข้อมูลสำหรับสามแผนกในตาราง student_details - CSE, ECE และ Civil ดังนั้นเราจะมีพาร์ติชั่นทั้งหมดสามพาร์ติชั่นสำหรับแต่ละแผนกดังที่แสดงในภาพด้านล่าง และสำหรับแต่ละแผนกเราจะมีข้อมูลทั้งหมดเกี่ยวกับแผนกนั้น ๆ ที่อยู่ในไดเร็กทอรีย่อยแยกต่างหากภายใต้ไดเร็กทอรีตาราง Hive ตัวอย่างเช่นข้อมูลนักเรียนทั้งหมดเกี่ยวกับแผนก CSE จะถูกเก็บไว้ใน user / hive / warehouse / student_details / dept. = CSE ดังนั้นคำถามเกี่ยวกับนักเรียน CSE จะต้องดูข้อมูลที่มีอยู่ในพาร์ติชัน CSE เท่านั้น ทำให้การแบ่งพาร์ติชันมีประโยชน์มากเนื่องจากช่วยลดเวลาในการตอบสนองของแบบสอบถามโดยการสแกนเท่านั้น เกี่ยวข้อง ข้อมูลที่แบ่งพาร์ติชันแทนชุดข้อมูลทั้งหมด ในความเป็นจริงในการใช้งานจริงคุณจะต้องจัดการกับข้อมูลหลายร้อย TB ลองนึกภาพการสแกนข้อมูลจำนวนมากนี้เพื่อค้นหาบางส่วน 95% ข้อมูลที่คุณสแกนไม่เกี่ยวข้องกับข้อความค้นหาของคุณ

ฉันขอแนะนำให้คุณอ่านบล็อกบน คำสั่ง Hive ซึ่งคุณจะพบวิธีต่างๆในการนำพาร์ติชันไปใช้ด้วยตัวอย่าง

ถัง:

คำสั่ง:

สร้างตาราง table_name PARTITIONED BY (partition1 data_type, partition2 data_type และ hellip.) CLUSTERED BY (column_name1, column_name2, ... ) จัดเรียงโดย (column_name [ASC | DESC], ... )] ลงในถัง num_buckets

ตอนนี้คุณสามารถแบ่งแต่ละพาร์ติชันหรือตารางที่ไม่มีการแบ่งพาร์ติชันออกเป็น Buckets ตามฟังก์ชันแฮชของคอลัมน์ในตาราง จริงๆแล้วแต่ละที่เก็บข้อมูลเป็นเพียงไฟล์ในไดเร็กทอรีพาร์ติชันหรือไดเร็กทอรีตาราง (ตารางที่ไม่แบ่งพาร์ติชัน) ดังนั้นหากคุณเลือกที่จะแบ่งพาร์ติชันออกเป็น n ที่เก็บข้อมูลคุณจะมีไฟล์ n ในไดเร็กทอรีพาร์ติชันของคุณ ตัวอย่างเช่นคุณจะเห็นภาพด้านบนซึ่งเราได้จัดเก็บแต่ละพาร์ติชันเป็น 2 ที่เก็บข้อมูล ดังนั้นพาร์ติชันแต่ละพาร์ติชันกล่าวว่า CSE จะมีไฟล์สองไฟล์ซึ่งแต่ละพาร์ติชันจะใช้เก็บข้อมูลของนักเรียน CSE

Hive กระจายแถวลงในถังอย่างไร?

Hive กำหนดหมายเลขถังสำหรับแถวโดยใช้สูตร: hash_function (bucketing_column) โมดูโล (num_of_buckets) . ที่นี่ hash_function ขึ้นอยู่กับชนิดข้อมูลคอลัมน์ ตัวอย่างเช่นหากคุณกำลังจัดเก็บตารางโดยใช้คอลัมน์บางคอลัมน์สมมติว่า user_id ของประเภทข้อมูล INT ฟังก์ชัน hash_function จะเป็น - hash_function (user_id ) = ค่าจำนวนเต็มของ user_id . และสมมติว่าคุณได้สร้างที่เก็บข้อมูลสองถังจากนั้น Hive จะกำหนดแถวที่จะไปที่ถัง 1 ในแต่ละพาร์ติชันโดยการคำนวณ: (ค่าของ user_id) modulo (2) ดังนั้นในกรณีนี้แถวที่มี user_id ที่ลงท้ายด้วยเลขจำนวนเต็มคู่จะอยู่ในที่เก็บข้อมูลเดียวกันกับแต่ละพาร์ติชัน hash_function สำหรับข้อมูลประเภทอื่นมีความซับซ้อนเล็กน้อยในการคำนวณและในความเป็นจริงสำหรับสตริงนั้นไม่สามารถจดจำได้โดยมนุษย์

บันทึก: หากคุณใช้ Apache Hive 0.x หรือ 1.x คุณต้องออกคำสั่ง - ตั้งค่า hive.enforce.bucketing = true จาก Hive terminal ก่อนที่จะทำการฝากข้อมูล สิ่งนี้จะช่วยให้คุณมีจำนวนตัวลดที่ถูกต้องในขณะที่ใช้คลัสเตอร์ทีละคำสั่งในการฝากคอลัมน์ ในกรณีที่คุณยังไม่ได้ทำคุณอาจพบว่าจำนวนไฟล์ที่สร้างขึ้นในไดเรกทอรีตารางของคุณไม่เท่ากับจำนวนที่เก็บข้อมูล อีกทางเลือกหนึ่งคุณสามารถตั้งค่าจำนวนตัวลดให้เท่ากับจำนวนที่เก็บข้อมูลได้โดยใช้ set mapred.reduce.task = num_bucket

การตั้งค่าเส้นทางคลาสใน java

ทำไมเราต้องมีถัง?

มีสองเหตุผลหลักในการดำเนินการฝากข้อมูลไปยังพาร์ติชัน:

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

ฉันอยากจะสรุปบล็อกการสอน Hive ที่นี่ ฉันค่อนข้างมั่นใจว่าหลังจากอ่านบล็อกการสอน Hive นี้แล้วคุณจะได้ตระหนักถึงความเรียบง่ายของ Apache Hive เนื่องจากพวกคุณได้เรียนรู้พื้นฐานทั้งหมดของ Hive แล้วถึงเวลาแล้วที่จะได้สัมผัสกับ Apache Hive ลองดูบล็อกถัดไปในบล็อก Hive Tutorial ซึ่งอยู่ในการติดตั้ง Hive และเริ่มทำงานกับ Apache Hive

ตอนนี้คุณเข้าใจ Apache Hive และคุณสมบัติต่างๆแล้วลองดูไฟล์ โดย Edureka บริษัท การเรียนรู้ออนไลน์ที่เชื่อถือได้ซึ่งมีเครือข่ายผู้เรียนที่พึงพอใจมากกว่า 250,000 คนกระจายอยู่ทั่วโลก หลักสูตรการฝึกอบรม Edureka Big Data Hadoop Certification ช่วยให้ผู้เรียนมีความเชี่ยวชาญใน HDFS, Yarn, MapReduce, Pig, Hive, HBase, Oozie, Flume และ Sqoop โดยใช้กรณีการใช้งานแบบเรียลไทม์ในโดเมนการค้าปลีกโซเชียลมีเดียการบินการท่องเที่ยวการเงิน

มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็นแล้วเราจะติดต่อกลับไป