วิธีการติดตั้ง HIVE บน Ubuntu (คู่มือการดาวน์โหลดและการตั้งค่า)

⚡ สรุปอย่างชาญฉลาด

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

  • 🧱 Hadoop มาก่อน: ทุกดีมอนของ Hadoop ต้องทำงานอยู่แล้ว เนื่องจาก Hive จะจัดเก็บข้อมูลตารางไว้ใน HDFS และส่งงานไปยังคลัสเตอร์
  • ⬇️ แหล่งดาวน์โหลด: ไฟล์ไบนารีจะเผยแพร่จากหน้ามิเรอร์ของ Apache และเวอร์ชัน 3.x สิ้นสุดการสนับสนุนในเดือนตุลาคม 2024
  • 📁 ไฟล์การกำหนดค่าสองไฟล์: ไฟล์ HIVE_HOME ควรอยู่ใน bashrc และไฟล์ HADOOP_HOME ควรอยู่ใน hive-config.sh ภายในไดเร็กทอรี bin ของ Hive
  • 💾 โฟลเดอร์ HDFS: ต้องมีไดเร็กทอรี warehouse และ tmp อยู่ใน HDFS และมีสิทธิ์ในการเขียนสำหรับกลุ่มก่อนที่จะสร้างตารางแรก
  • 🧩 ขั้นตอนการสร้างแผนผัง: ยูทิลิตี้ schematool จะสร้างตาราง metastore และ Hive เวอร์ชัน 3.x ขึ้นไปจะไม่ยอมเริ่มต้นทำงานกับสคีมาที่ยังไม่ได้เริ่มต้นใช้งาน
  • 🔨 ตรวจสอบอย่างรวดเร็ว: คำสั่ง create ตามด้วย describe พิสูจน์ได้ว่า shell, metastore และ HDFS เชื่อมต่อกันอย่างถูกต้อง

วิธีการติดตั้ง Hive บน Ubuntu

ก่อนการติดตั้ง Apache Hive เราต้องการพื้นที่เฉพาะ Hadoop การติดตั้ง เริ่มต้นและรันด้วย Hadoop daemons ทั้งหมด

สำหรับการติดตั้ง Hadoop โปรดตรวจสอบที่นี่ ลิงค์.

เมื่อ daemon ของ Hadoop ทั้งหมดทำงานได้อย่างราบรื่นแล้ว ให้เริ่มติดตั้งส่วนของ Hive ได้เลย ขั้นตอนการติดตั้งด้านล่างนี้แบ่งออกเป็นสี่ขั้นตอน:

ขั้นตอนการติดตั้ง Apache Hive

  1. ข้อกำหนดเบื้องต้นและความเข้ากันได้ของเวอร์ชัน
  2. การติดตั้งไฮฟ์
  3. การเริ่มต้นสคีมา Metastore
  4. คำสั่งเชลล์ไฮฟ์

ข้อกำหนดเบื้องต้นสำหรับการติดตั้ง Apache Hive บน Ubuntu

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

  • JDK ที่รองรับ Hive 4.1.x ทำงานบน JDK 17 ในขณะที่ Hive 4.2.x เพิ่มขั้นต่ำเป็น JDK 21 ตรวจสอบเวอร์ชันด้วย java -version และตรวจสอบให้แน่ใจว่าได้ส่งออกตัวแปร JAVA_HOME แล้ว
  • คลัสเตอร์ Hadoop ที่กำลังทำงานอยู่ ทั้ง NameNode และ DataNode ต้องทำงานอยู่ รันคำสั่ง JPS และตรวจสอบให้แน่ใจว่า NameNode, DataNode, ResourceManager และ NodeManager ปรากฏอยู่ในรายการทั้งหมด
  • สิทธิ์ในการเขียนไปยัง HDFS บัญชีผู้ใช้ที่เริ่มต้นใช้งาน Hive จำเป็นต้องได้รับอนุญาตในการสร้างไดเร็กทอรีภายใต้ เอชดีเอฟเอส.
  • เวอร์ชันที่ตรงกัน Hive 4.2.0 สร้างขึ้นบน Hadoop 3.4.1 และ Tez 0.10.5 ตระกูล Hive 3.x สิ้นสุดการสนับสนุนในเดือนตุลาคม 2024 ดังนั้นการติดตั้งใหม่ควรเลือกใช้ตระกูล 4.x
  • แหล่งข้อมูลฟรี ระบบการเรียนรู้แบบโหนดเดียวสามารถทำงานได้อย่างสะดวกสบายด้วย RAM ประมาณ 4 GB และพื้นที่ว่างในดิสก์ 20 GB

เมื่อตรวจสอบเงื่อนไขเหล่านั้นครบถ้วนแล้ว ขั้นตอนการดาวน์โหลดและแตกไฟล์ด้านล่างจะดำเนินไปโดยไม่มีปัญหาใดๆ

วิธีการติดตั้ง Hive บน Ubuntu

ด้านล่างนี้เป็นกระบวนการทีละขั้นตอนเกี่ยวกับวิธีการติดตั้ง Hive Ubuntu:

ขั้นตอนที่ 1) ดาวน์โหลดและติดตั้ง Hive บน Ubuntu

หากต้องการดาวน์โหลดโปรแกรมติดตั้ง Hive เวอร์ชันเสถียร โปรดดูที่... อาปาเช่ URL ตามที่กล่าวไว้ด้านล่างนี้

https://www.apache.org/dyn/closer.cgi/hive/ — ไปที่ URL และเลือกที่ลิงก์ดาวน์โหลดมิเรอร์ของ Apache หน้าดาวน์โหลด Apache Hive แสดงรายการว่ารุ่นใดใช้งานร่วมกับ Hadoop เวอร์ชันใด

หน้าเว็บจำลองจะเปิดขึ้นพร้อมรายการไดเร็กทอรีการเผยแพร่ Hive ที่มีอยู่ ดังที่แสดงด้านล่าง

หน้าเว็บมิเรอร์ของ Apache ที่แสดงรายการไดเร็กทอรีรุ่นของ Apache Hive ที่พร้อมใช้งาน

เลือกเวอร์ชันล่าสุดของโปรแกรมติดตั้ง Hive (ในกรณีของฉันคือ Hive เวอร์ชัน 3.1.2) โฟลเดอร์ release จะแสดงไฟล์ไบนารีและไฟล์ซอร์สโค้ดควบคู่กันไป

โฟลเดอร์เผยแพร่ Hive แสดงไฟล์เก็บถาวรสำหรับการแจกจ่ายไบนารีและซอร์สโค้ด

คลิกที่ไฟล์ .bin แล้วการดาวน์โหลดจะเริ่มต้นขึ้น

เบราว์เซอร์จะแสดงข้อความแจ้งให้ดาวน์โหลดไฟล์ติดตั้ง apache-hive bin tar.gz

ขั้นตอนที่ 2) ตัวอย่างเช่นtract ไฟล์ tar

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

tar -xvf  apache-hive-3.1.2-bin.tar.gz

เทอร์มินัลจะแสดงข้อความของแต่ละไฟล์ขณะที่กำลังแตกไฟล์ลงในไดเร็กทอรี Hive ใหม่

เอาต์พุตเทอร์มินัลขณะที่ไฟล์เก็บถาวร Hive tar กำลังถูกแตกไฟล์tracเท็ด ออน Ubuntu

ขั้นตอนที่ 3) วางคุณสมบัติการกำหนดค่าที่แตกต่างกันใน Apache Hive

ในขั้นตอนนี้ เราจะทำสองสิ่งต่อไปนี้:

  1. การระบุพาธโฮมของ Hive ในไฟล์ bashrc
  2. การระบุตำแหน่งพาธโฮมของ Hadoop ในไฟล์ hive-config.sh

1) ระบุพาธของ Hive ในไฟล์ ~/.bashrc

เปิดไฟล์เพื่อแก้ไขโดยใช้คำสั่งที่แสดงด้านล่าง

คำสั่งที่ใช้เปิดไฟล์ bashrc เพื่อแก้ไขตัวแปรสภาพแวดล้อมของ Hive

  • เปิดไฟล์ bashrc ตามที่แสดงในภาพหน้าจอข้างต้น
  • ระบุพาธโฮมของ Hive หรือก็คือพาธ HIVE_HOME ในไฟล์ bashrc และส่งออกพาธนั้นดังที่แสดงด้านล่าง

มีการเพิ่มบรรทัดการส่งออก HIVE_HOME และ PATH ไว้ที่ท้ายไฟล์ bashrc

Code นำไปใส่ไว้ในไฟล์ bashrc:

export HIVE_HOME="/home/guru99hive/apache-hive-1.2.0-bin"
export PATH=$PATH:$HIVE_HOME/bin

โหลดไฟล์ใหม่ด้วย แหล่ง ~ / .bashrc ดังนั้นเส้นทางใหม่จะมีผลในเซสชันเทอร์มินัลปัจจุบัน

2) การส่งออกพาธ Hadoop ในไฟล์ hive-config.sh

ในการสื่อสารกับระบบนิเวศของ Hadoop เราจะกำหนดพาธโฮมของ Hadoop ในไฟล์การกำหนดค่าของ Hive เปิดไฟล์ hive-config.sh ตามที่แสดงด้านล่าง

คำสั่งที่ใช้ในการเปิดไฟล์ hive-config.sh จากไดเร็กทอรี bin ของ Hive

ระบุพาธ HADOOP_HOME ในไฟล์ hive-config.sh ดังที่แสดงด้านล่าง

เส้นทาง HADOOP_HOME ที่ประกาศไว้ภายในไฟล์ hive-config.sh

ขั้นตอนที่ 4) สร้างไดเร็กทอรี Hive ใน Hadoop

ในการสื่อสารกับ Hadoop เราจำเป็นต้องสร้างไดเร็กทอรีใน Hadoop ดังแสดงด้านล่าง Hive จะเขียนข้อมูลตารางที่จัดการแล้วลงในไดเร็กทอรี warehouse และเขียนเอาต์พุตชั่วคราวลงในไดเร็กทอรี tmp

คำสั่ง HDFS ที่ใช้สร้างไดเร็กทอรีชั่วคราว (tmp) และไดเร็กทอรีเก็บข้อมูล (warehouse) ของ Hive

การให้สิทธิ์ระดับ root ในการสร้างโฟลเดอร์ Hive ใน Hadoop หากไม่มีข้อความแสดงข้อผิดพลาดใดๆ แสดงว่า Hadoop ได้ให้สิทธิ์แก่โฟลเดอร์ Hive เรียบร้อยแล้ว

หน้าต่างเทอร์มินัลแสดงสิทธิ์การเขียนของกลุ่มที่มอบให้กับโฟลเดอร์ Hive บน HDFS

ขั้นตอนที่ 5) เข้าสู่เชลล์ Hive

เข้าสู่ Hive shell โดยการป้อน - /รัง' คำสั่งดังแสดงด้านล่าง

หน้าต่างคำสั่ง Hive shell เปิดขึ้นจากไดเร็กทอรี bin ของ Hive บน Ubuntu

วิธีการเริ่มต้นใช้งาน Schema ของ Hive Metastore

Hive เก็บชื่อตาราง ชื่อคอลัมน์ และชนิดข้อมูลทั้งหมดไว้ในฐานข้อมูลเชิงสัมพันธ์ที่เรียกว่า metastore ในการติดตั้งใหม่ metastore จะว่างเปล่า และตั้งแต่ Hive เวอร์ชัน 3.x เป็นต้นไป shell จะไม่ยอมเริ่มทำงานจนกว่าตาราง schema จะมีอยู่ ยูทิลิตี้ schematool ที่มาพร้อมกับ Hive ในไดเร็กทอรี bin จะสร้างตารางเหล่านั้นขึ้นมา

สำหรับการตั้งค่าการเรียนรู้สำหรับผู้ใช้คนเดียว ฐานข้อมูล Derby ที่มาพร้อมกับโปรแกรมก็เพียงพอแล้ว:

$HIVE_HOME/bin/schematool -dbType derby -initSchema

คำสั่งนี้จะแสดงเวอร์ชันสคีมาที่สร้างขึ้นและจบลงด้วย schemaTool เสร็จสมบูรณ์แล้วDerby จะเขียนไฟล์ลงในไดเร็กทอรีเดียวกับที่เรียกใช้คำสั่ง ดังนั้นจึงต้องเรียกใช้ Hive จากไดเร็กทอรีเดียวกันนั้นเสมอหลังจากนั้น

Derby อนุญาตให้มีเซสชันที่ใช้งานอยู่ได้เพียงครั้งละหนึ่งเซสชันเท่านั้น ทำให้ไม่เหมาะสำหรับคลัสเตอร์ที่ใช้ร่วมกัน Point Hive ที่ MySQL โดยการเพิ่มคุณสมบัติการเชื่อมต่อลงในไฟล์ hive-site.xml แล้วเรียกใช้เครื่องมืออีกครั้งโดยใช้ประเภทฐานข้อมูลที่แตกต่างกัน:

$HIVE_HOME/bin/schematool -dbType mysql -initSchema

รายชื่อสถานที่ทั้งหมดและการจัดวางตำแหน่งคนขับจะอธิบายไว้ในคู่มือวิธีการใช้งาน กำหนดค่า Hive metastore ด้วย MySQLนอกจากนี้ยังมีธงอีกสองแบบที่ควรค่าแก่การจดจำ:

  • -ข้อมูล รายงานเวอร์ชันสคีมาที่บันทึกไว้ในเมตาสโตร์ในปัจจุบัน โดยไม่เปลี่ยนแปลงอะไรเลย
  • -อัปเกรดสคีมา ย้าย metastore ที่มีอยู่ไปยังเวอร์ชัน schema ของ Hive เวอร์ชันใหม่ที่ติดตั้ง

เมื่อกำหนดโครงสร้างข้อมูลเรียบร้อยแล้ว ระบบก็พร้อมที่จะรับคำสั่ง HiveQL แรก

คำสั่งเชลล์ไฮฟ์

ในที่นี้เราจะสร้างตารางตัวอย่างโดยใช้คำสั่ง "create" ใน Hive shell พร้อมระบุชื่อคอลัมน์

ตัวอย่างโค้ดสำหรับการสร้างฐานข้อมูลใน Hive ภาพหน้าจอด้านล่างแสดงคำสั่งสร้างและผลลัพธ์การอธิบายฐานข้อมูลทีละขั้นตอน

เอาต์พุตของ Hive shell สำหรับคำสั่ง create table และ describe product

จากภาพหน้าจอข้างต้น เราสามารถสังเกตได้ดังต่อไปนี้:

1) การสร้างตารางตัวอย่างที่มีชื่อคอลัมน์ใน Hive

  • ชื่อตารางคือ "ผลิตภัณฑ์" โดยมีชื่อคอลัมน์สามคอลัมน์ สินค้า ชื่อ และราคา
  • ชื่อคอลัมน์ทั้งสามนั้นระบุด้วยชนิดข้อมูลที่เกี่ยวข้อง
  • ทุกช่องข้อมูลจะปิดท้ายด้วยเครื่องหมายจุลภาค ', '

2) การแสดงข้อมูลตาราง Hive

  • การใช้คำสั่ง “describe” จะช่วยให้เราสามารถดูข้อมูลตารางที่มีอยู่ใน Hive ได้
  • ต่อไปนี้คือการแสดงชื่อคอลัมน์พร้อมชนิดข้อมูลที่เกี่ยวข้องซึ่งปรากฏอยู่ในโครงสร้างตาราง
  • ในตอนท้าย ระบบจะแสดงเวลาที่ใช้ในการดำเนินการคำสั่งนี้และจำนวนแถวที่ดึงมาได้

ตัวอย่างโค้ดสำหรับการสร้างฐานข้อมูลใน รัง (สำหรับตรวจสอบตนเอง)

1) สร้างตาราง product (product int, pname string, price float)

Row format delimited
Fields terminated by ',';

2) อธิบายรายละเอียดสินค้า;

เมื่อตารางตอบสนองต่อคำอธิบายแล้ว เชลล์ เมตาสโตร์ และ HDFS ก็จะเชื่อมต่อเข้าด้วยกัน จากนั้นเซสชันเดียวกันนี้ก็จะยอมรับข้อมูลที่กว้างขึ้น สร้าง แก้ไข และลบตาราง คำแถลงและ เรียงลำดับตาม จัดกลุ่มตาม และจัดกลุ่มตาม คำสั่ง

ข้อผิดพลาดทั่วไปในการติดตั้ง Hive บน Ubuntu และจะแก้ไขอย่างไร

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

ข้อความบนหน้าจอ สาเหตุน่าจะ แก้ไขปัญหา
hive: ไม่พบคำสั่ง โฟลเดอร์ HIVE_HOME/bin ไม่อยู่ใน PATH ตรวจสอบบรรทัดการส่งออกในไฟล์ bashrc อีกครั้ง จากนั้นเรียกใช้คำสั่ง แหล่ง ~ / .bashrc
ไม่พบข้อมูลเวอร์ชันใน metastore โครงสร้างข้อมูลเมตาสโตร์ไม่เคยได้รับการเริ่มต้นใช้งาน เรียกใช้ schematool ด้วยตัวเลือก -initSchema สำหรับประเภทฐานข้อมูลที่เลือก
การเรียกไปยัง localhost:9000 ล้มเหลวเนื่องจากข้อผิดพลาดในการเชื่อมต่อ HDFS ไม่ทำงาน เริ่มการทำงานของ Hadoop daemon และตรวจสอบว่า NameNode และ DataNode ปรากฏอยู่ในรายการหรือไม่ JPS
โหนดชื่ออยู่ในโหมดปลอดภัย NameNode ยังคงอยู่ในโหมดปลอดภัยในการเริ่มต้นระบบ ออกจากโหมดปลอดภัยด้วย hdfs dfsadmin -safemode leave
การอนุญาตถูกปฏิเสธ: การเข้าถึง = เขียน บน /user/hive/warehouse ไดเร็กทอรีคลังสินค้าขาดสิทธิ์ในการเขียนแบบกลุ่ม สมัครใหม่ hdfs dfs -chmod g+w ในไดเร็กทอรีคลังสินค้าและ tmp
NoSuchMethodError บน Preconditions.checkArgument Hive และ Hadoop มีไฟล์ jar ของ Guava เวอร์ชันที่แตกต่างกัน ลบไฟล์ Guava jar เวอร์ชันเก่าในไดเร็กทอรี lib ของ Hive แล้วคัดลอกไฟล์ Hadoop jar เข้าไปแทนที่

วิธีง่ายๆ ในการแยกแยะปัญหาของ Hive ออกจากปัญหาของ Hadoop คือการรันคำสั่งต่อไปนี้ JPS ขั้นแรก หากไม่มีเดมอน แสดงว่าคลัสเตอร์มีปัญหา หากมีเดมอนอยู่แต่เชลล์ยังคงใช้งานไม่ได้ แสดงว่าปัญหาอยู่ที่การตั้งค่า Hive หรือสคีมาของเมตาสโตร์ เมื่อเชลล์เสถียรแล้ว... ตัวดำเนินการและฟังก์ชันในตัวของ HiveQL การอ้างอิงคือขั้นตอนต่อไปที่เหมาะสม

คำถามที่พบบ่อย

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

Hive สามารถทำงานได้ทุกที่ที่มี JVM และ Hadoop แต่สคริปต์เชลล์จะสมมติว่าใช้โครงสร้างแบบ Unix Windows ทีมส่วนใหญ่ใช้ WSL2 หรืออิมเมจ Docker; macOS ไฟล์เก็บถาวร tar เดียวกันนี้ยังคงใช้งานได้เมื่อมีการส่งออก JAVA_HOME และ HADOOP_HOME แล้ว

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

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

Copilot จะร่างไฟล์ bashrc exports, hive-site.xml blocks และ schematool อย่างรวดเร็ว และ agentic runners สามารถเรียกใช้งานในสภาพแวดล้อมจำลองได้ โปรดพิจารณาผลลัพธ์เป็นเพียงร่างแรก: หมายเลขเวอร์ชัน พอร์ต และเส้นทางไดเร็กทอรี ยังต้องได้รับการตรวจสอบกับคลัสเตอร์ของคุณเองอีกครั้ง

แรมประมาณ 4 GB และพื้นที่ว่างในดิสก์ 20 GB นั้นเพียงพอสำหรับการเรียนรู้ เนื่องจาก Hive เองเป็นไคลเอนต์แบบบาง (thin client) ขนาดของโหนดสำหรับการใช้งานจริงจะขึ้นอยู่กับคลัสเตอร์ Hadoop และฐานข้อมูล metastore มากกว่าตัว Hive เอง

แตกไฟล์เวอร์ชันใหม่ข้างๆ เวอร์ชันเก่า เปลี่ยนเส้นทาง HIVE_HOME จากนั้นเรียกใช้ schematool ด้วยตัวเลือก -upgradeSchema เพื่อให้ metastore ตรงกัน การลบทำได้ง่ายๆ โดยการลบไดเร็กทอรี Hive และ stripping บรรทัดการส่งออกจาก bashrc ยังคงอยู่ ข้อมูลคลังข้อมูล HDFS ยังคงอยู่

ไม่ MapReduce ถูกยกเลิกการใช้งานแล้วในฐานะเครื่องมือประมวลผลของ Hive และ Hive 4.x ทำงานบน Apache Tez เป็นค่าเริ่มต้น แผนที่ลด โมเดลนี้ยังคงคุ้มค่าแก่การทำความเข้าใจ เพราะ Tez ก็ใช้โมเดลงานแบบเดียวกัน

สรุปโพสต์นี้ด้วย: