Apache Hive 與 Apache Impala:主要區別

已發表: 2022-11-23

如果您不熟悉大數據分析,那麼您可能會注意到大量的 apache 工具; 然而,純粹的不同工具可能會讓人感到困惑,有時甚至會讓人不知所措。

這篇文章將解決這一困惑,並解釋什麼是 Apache Hive 和 Impala,以及它們之間的區別!

阿帕奇蜂巢

Apache Hive 是 Apache Hadoop 平台的 SQL 數據訪問接口。 Hive 允許您使用 SQL 語法查詢、聚合和分析數據。

讀取訪問方案用於 HDFS 文件系統中的數據,允許您像處理普通表或關係 DBMS 一樣處理數據。 HiveQL 查詢被翻譯成用於 MapReduce 作業的 Java 代碼。

蜂巢

Hive 查詢是用 HiveQL 查詢語言編寫的,它基於 SQL 語言,但不完全支持 SQL-92 標準。

但是,這種語言允許程序員在使用 HiveQL 功能不方便或效率低下時使用他們的查詢。 HiveQL 可以使用用戶定義的標量函數 (UDF)、聚合(UDAF 代碼)和表函數 (UDTF) 進行擴展。

Apache Hive 是如何工作的

Apache Hive 將用 HiveQL 語言(接近 SQL)編寫的程序翻譯成一個或多個 MapReduce、Apache Tez 或 Apache Spark 任務。 這是可以在 Hadoop 上啟動的三個執行引擎。 然後,Apache Hive 將數據組織成 Hadoop 分佈式文件系統 (HDFS) 文件的數組,以便在集群上運行作業以產生響應。

Apache Hive 表類似於關係數據庫,數據單元按照從最重要的單元到最細粒度的單元進行組織。 數據庫是由分區組成的數組,分區可以再次分解為“桶”。

配置單元服務器 1

數據可通過 HiveQL 訪問。 在每個數據庫中,數據都是有編號的,每個表對應一個HDFS目錄。

Apache Hive 架構中有多個接口可用,例如 Web 接口、CLI 或外部客戶端。

實際上,“Apache Hive Thrift”服務器允許遠程客戶端使用各種編程語言向 Apache Hive 提交命令和請求。 Apache Hive 的中央目錄是一個包含所有信息的“元存儲”。

使 Hive 工作的引擎稱為“驅動程序”。 它捆綁了編譯器和優化器以確定最佳執行計劃。

最後,安全性由 Hadoop 提供。 因此,它依賴於 Kerberos 在客戶端和服務器之間進行相互身份驗證。 Apache Hive 中新創建的文件的權限由 HDFS 規定,允許用戶、組或其他授權。

蜂巢的特點

  • 同時支持Hadoop和Spark的計算引擎
  • 使用 HDFS 並作為數據倉庫工作。
  • 使用 MapReduce 並支持 ETL
  • 由於HDFS,它具有類似於Hadoop的容錯能力

Apache Hive:優勢

Apache Hive 是查詢和數據分析的理想解決方案。 它使獲得定性見解成為可能,從而提供競爭優勢並促進對市場需求的響應。

在 Apache Hive 的主要優勢中,我們可以提到與其“SQL 友好”語言相關的易用性。 此外,它加快了數據的初始插入,因為數據不需要從磁盤以內部數據庫格式讀取或編號。

知道數據存儲在 HDFS 中,在 Apache Hive 上存儲高達數百 PB 數據的大型數據集是可能的。 該解決方案比傳統數據庫更具可擴展性。 知道它是一種雲服務,Apache Hive 允許用戶根據工作負載(即任務)的波動快速啟動虛擬服務器。

安全性也是 Hive 表現更好的一個方面,它能夠在出現問題時復制對恢復至關重要的工作負載。 最後,工作能力無與倫比,因為它每小時可以執行多達 100,000 個請求。

阿帕奇黑斑羚

Apache Impala 是一個大規模並行 SQL 查詢引擎,用於對存儲在 Apache Hadoop 中的數據交互式執行 SQL 查詢,用 C++ 編寫並在 Apache 2.0 許可下分發。

Impala 也被稱為 MPP(大規模並行處理)引擎、分佈式 DBMS,甚至是 SQL-on-Hadoop 堆棧數據庫。

apache-impala-標誌-1

Impala 以分佈式模式運行,其中流程實例運行在不同的集群節點上,接收、調度和協調客戶端請求。 在這種情況下,可以並行執行 SQL 查詢的片段。

客戶端是針對存儲在 Apache Hadoop(HBase 和 HDFS)或 Amazon S3 中的數據發送 SQL 查詢的用戶和應用程序。 與 Impala 的交互通過 HUE(Hadoop 用戶體驗)Web 界面、ODBC、JDBC 和 Impala Shell 命令行 shell 進行。

Impala 在基礎架構上依賴於另一個流行的 SQL-on-Hadoop 工具 Apache Hive,使用其元數據存儲。 特別是,Hive Metastore 讓 Impala 了解數據庫的可用性和結構。

當創建、修改和刪除模式對像或通過 SQL 語句將數據加載到表中時,相應的元數據更改會使用專門的目錄服務自動傳播到所有 Impala 節點。

Impala 的關鍵組件是以下可執行文件:

  • Impalad 或 Impala 守護進程是一種系統服務,用於安排和執行對 HDFS、HBase 和 Amazon S3 數據的查詢。 一個 impalad 進程在每個集群節點上運行。
  • Statestore 是一種命名服務,用於跟踪集群中所有 impalad 實例的位置和狀態。 該系統服務的一個實例在每個節點和主服務器(Name Node)上運行。
  • Catalog 是一種元數據協調服務,可將 Impala DDL 和 DML 語句的更改傳播到所有受影響的 Impala 節點,以便集群中的任何節點都能立即看到新表或新加載的數據。 建議 Catalog 的一個實例與 Statestored 守護進程在同一台集群主機上運行。

Apache Impala 是如何工作的

Impala 與 Apache Hive 一樣,使用類似的聲明式查詢語言 Hive 查詢語言 (HiveQL),它是 SQL92 的一個子集,而不是 SQL。

Impala中請求的實際執行情況如下:

客戶端應用程序通過標準化的 ODBC 或 JDBC 驅動程序接口連接到任何 impalad 來發送 SQL 查詢。 已連接的 impalad 成為當前請求的協調器。

分析 SQL 查詢以確定集群中 impalad 實例的任務; 然後,構建最優查詢執行計劃。

Impalad 使用系統服務的本地實例直接訪問 HDFS 和 HBase 來提供數據。 與 Apache Hive 不同,這種直接交互顯著節省了查詢執行時間,因為不會保存中間結果。

作為響應,每個守護進程將數據返回給協調的 impalad,將結果發送回客戶端。

黑斑羚

黑斑羚的特點

  • 支持實時內存處理
  • SQL 友好
  • 支持 HDFS、Apache HBase 和 Amazon S3 等存儲系統
  • 支持與Pentaho、Tableau等BI工具集成
  • 使用 HiveQL 語法

Apache Impala:優勢

Impala 避免了可能的啟動開銷,因為所有系統守護進程都是在引導時直接啟動的。 它顯著節省了查詢執行時間。 Impala 速度的額外提升是因為這個 Hadoop 的 SQL 工具與 Hive 不同,它不存儲中間結果並直接訪問 HDFS 或 HBase。

此外,Impala 在運行時生成程序代碼,而不是像 Hive 那樣在編譯時生成。 然而,Impala 的高速性能的副作用是降低了可靠性。

特別是,如果在 SQL 查詢執行過程中數據節點宕機,Impala 實例將重啟,Hive 將繼續保持與數據源的連接,提供容錯能力。

Impala 的其他優勢包括對安全網絡身份驗證協議 Kerberos 的內置支持、優先級排序、管理請求隊列的能力以及對流行的大數據格式(如 LZO、Avro、RCFile、Parquet 和 Sequence)的支持。

Hive 與 Impala:相似之處

Hive 和 Impala 在 Apache Software Foundation 許可下免費分發,是指用於處理存儲在 Hadoop 集群中的數據的 SQL 工具。 此外,他們還使用了HDFS分佈式文件系統。

Impala 和 Hive 執行不同的任務,共同關注存儲在 Apache Hadoop 集群中的大數據的 SQL 處理。 Impala 提供類似 SQL 的接口,允許您讀寫 Hive 表,從而實現輕鬆的數據交換。

同時,Impala 使 Hadoop 上的 SQL 操作非常快速和高效,允許在大數據分析研究項目中使用此 DBMS。 只要有可能,Impala 就會與現有的 Apache Hive 基礎設施一起工作,該基礎設施已經用於執行長時間運行的 SQL 批處理查詢。

此外,Impala 將其表定義存儲在 Metastore(傳統的 MySQL 或 PostgreSQL 數據庫)中,即與 Hive 存儲類似數據的位置相同。 只要所有列都使用 Impala 支持的數據類型、文件格式和壓縮編解碼器,它就允許 Impala 訪問 Hive 表。

Hive 與 Impala:差異

Hive-Vs-Impala-差異

編程語言

Hive 是用 Java 編寫的,而 Impala 是用 C++ 編寫的。 然而,Impala 也使用一些基於 Java 的 Hive UDF。

用例

數據工程師在 ETL 過程(提取、轉換、加載)中使用 Hive,例如,在大型數據集上進行長時間運行的批處理作業,例如,在旅行聚合器和機場信息系統中。 反過來,Impala 主要面向分析師和數據科學家,主要用於商業智能等任務。

表現

Impala實時執行SQL查詢,而Hive的特點是數據處理速度慢。 通過簡單的 SQL 查詢,Impala 的運行速度可以比 Hive 快 6-69 倍。 但是,Hive 可以更好地處理複雜查詢。

延遲/吞吐量

Hive 的吞吐量明顯高於 Impala。 LLAP(Live Long and Process)特性支持內存中的查詢緩存,為 Hive 提供了良好的低級性能。

LLAP 包括長期系統服務(守護進程),它允許您直接與 HDFS 數據節點交互並取代緊密集成的 DAG 查詢結構(有向無環圖)——一種在大數據計算中廣泛使用的圖形模型。

容錯性

Hive 是一個容錯系統,可以保留所有中間結果。 它還對可伸縮性產生積極影響,但會導致數據處理速度下降。 反過來,Impala 不能稱為容錯平台,因為它更多地受內存限制。

代碼轉換

Hive 在編譯時生成查詢表達式,而 Impala 在運行時生成它們。 Hive 的特點是在應用程序首次啟動時存在“冷啟動”問題; 由於需要與數據源建立連接,查詢轉換緩慢。

Impala 沒有這種啟動開銷。 用於處理 SQL 查詢的必要係統服務(守護進程)在啟動時啟動,從而加快了工作速度。

存儲支持

Impala 支持 LZO、Avro 和 Parquet 格式,而 Hive 支持純文本和 ORC。 但是,兩者都支持 RCFIle 和 Sequence 格式。

阿帕奇蜂巢阿帕奇黑斑羚
爪哇C++
用例數據工程分析與分析
表現對於簡單查詢高比較低
潛伏緩存導致更多延遲潛伏較少
容錯由於 MapReduce,容忍度更高由於 MPP,容忍度較低
轉換冷啟動慢更快的轉換
存儲支持純文本和 ORC LZO、Avro、實木複合地板

最後的話

Hive 和 Impala 並不競爭,而是有效地互補。 儘管兩者之間存在顯著差異,但也有很多共同點,選擇其中一個取決於項目的數據和特定要求。

您還可以探索 Hadoop 和 Spark 之間的直接比較。

.