1、什麼是Hive
Hive是一個基於Hadoop的數據倉庫工具,用於處理和分析大規模結構化數據。Hive提供了類似SQL的查詢語言(HiveQL),使得熟悉SQL的用戶能夠查詢數據。Hive將SQL查詢轉換爲MapReduce任務,以在Hadoop集羣上執行數據處理和分析。
2、Hive起源
回答這個問題之前,先介紹下Hadoop。Hadoop是專門爲離線和大數據分析而設計的分佈式基礎架構。Hadoop的計算模型是MapReduce,將計算任務分割成多個處理單元,並將其分散到一羣家用或服務級別的硬件機器上,從而降低成本。但是直接用MapReduce處理大數據會面臨難題:
在此背景下Hive應運而生。Hive是基於Hadoop的一個數據倉庫工具,本質是將SQL轉換成MapReduce任務進行運算。將結構化的數據文件映射爲一張數據庫表,並提供簡單的sql查詢功能,極大降低用戶使用難度。
3、Hive架構
3.1 基本組成部分
Hive的架構是一個複雜的系統,通過用戶接口、元數據存儲、驅動器和Hadoop集羣等多個組件的協同工作,實現了對大規模數據的高效存儲和查詢處理。其架構圖如下圖所示。
這是用戶與Hive進行交互的主要方式。Hive提供了多種用戶接口,包括CLI(命令行接口)、Client(客戶端)、WUI(Web用戶界面)以及JDBC/ODBC(允許Java或其他編程語言通過JDBC或ODBC訪問Hive)。通過這些接口,用戶可以執行HQL(Hive查詢語言)語句,進行數據的查詢、分析和管理。
BDP平臺將頁面的SQL轉換成SHELL腳本,調用CLI來啓動Hive引擎。
Hive是將數據文件映射成一張表,元數據模塊主要負責描述和管理數據存儲、表結構、分區信息等,通常存儲在關係型數據庫中,如MySQL或Derby。
驅動器是Hive的核心組件,主要作用是將HiveQL語句轉換成一系列的MapReduce(MR)作業。驅動器中包含了解析器、編譯器、優化器和執行器等多個子組件。解析器將用戶的HQL查詢語句轉換爲抽象語法樹(AST),編譯器將AST編譯成邏輯執行計劃,優化器對邏輯計劃進行優化,最後執行器將優化後的計劃轉換成可以運行的物理計劃並執行。
Hive是建立在Hadoop上的數據倉庫基礎構架,因此Hadoop集羣是Hive架構的重要組成部分。Hive使用Hadoop的分佈式文件系統(HDFS)進行數據存儲,利用Hadoop的MapReduce框架進行大規模數據的計算和處理。
3.2 Hadoop
Hadoop是開源的分佈式存儲和計算系統,旨在處理大規模數據集。它最初由Apache軟件基金會開發,現已成爲處理大數據的行業標準之一。Hadoop主要包括以下核心組件:HDFS、MapReduce。
3.2.1 分佈式文件系統(HDFS)
HDFS是Hadoop的分佈式文件系統,用於存儲大規模數據集。它將數據分佈存儲在集羣中的多臺服務器上,通過數據冗餘存儲來提供容錯性和高可靠性。
HDFS它將文件數據劃分爲多個數據塊,並在集羣中的多個節點上進行復制存儲。每個數據塊默認會有多個(通常是三個)副本存儲在不同的節點上。這種冗餘存儲機制確保了即使某個節點或副本發生故障,數據仍然可以從其他副本中恢復,從而保證了數據的高可靠性。
HDFS採用了主從架構,包括一個NameNode和多個DataNode。NameNode負責管理文件系統的命名空間和元數據信息,而DataNode負責存儲實際的數據塊。
3.2.2 分佈式計算框架(MapReduce)
MapReduce是Hadoop的分佈式計算框架,用於在大規模數據集上執行並行計算任務。它將計算任務分解爲多個獨立的子任務,然後在集羣中的多臺計算節點上並行執行這些子任務。MapReduce包括Map階段和Reduce階段 ,2個階段。
4、Hive工作流程
Hive是一個建立在Hadoop之上的數據倉庫系統,它提供了類似於SQL的查詢語言(HiveQL),使用戶可以在大規模數據集上執行查詢和分析操作。下面是Hive的工作流程: