數(shù)據(jù)倉庫Hive vs 準(zhǔn)實(shí)時(shí)分析系統(tǒng)Impala
一、什么是Hive?
Hive是基于Hadoop的一個(gè)數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供完整的SQL查詢功能,可以將SQL語句轉(zhuǎn)換為MapReduce任務(wù)進(jìn)行運(yùn)行。Hive支持HSQL,是一種類SQL。
也由于這種機(jī)制導(dǎo)致Hive最大的缺點(diǎn)是慢。MapReduce調(diào)度本身只適合批量,長周期任務(wù),類似查詢這種要求短平快的業(yè)務(wù),代價(jià)太高。
二、什么是Impala?
Impala是用于處理存儲在Hadoop集群中的大量數(shù)據(jù)的MPP(大規(guī)模并行處理)SQL查詢引擎。它是一個(gè)用C++和Java編寫的開源軟件。與其他Hadoop的SQL引擎相比,它提供了高性能和低延遲。
換句話說,Impala是性能最高的SQL引擎(提供類似RDBMS的體驗(yàn)),它提供了訪問存儲在Hadoop分布式文件系統(tǒng)中的數(shù)據(jù)的最快方法。
三、Hive vs Impala
Impala與Hive都是構(gòu)建在Hadoop之上的數(shù)據(jù)查詢工具,各有不同的側(cè)重適應(yīng)面,但從客戶端使用來看Impala與Hive有很多的共同之處,如數(shù)據(jù)表元數(shù)據(jù)、ODBC/JDBC驅(qū)動(dòng)、SQL語法、靈活的文件格式、存儲資源池等。Impala與Hive在Hadoop中的關(guān)系如下圖所示。

Hive適合于長時(shí)間的批處理查詢分析,而Impala適合于實(shí)時(shí)交互式SQL查詢,Impala給數(shù)據(jù)分析人員提供了快速實(shí)驗(yàn)、驗(yàn)證想法的大數(shù)據(jù)分析工具。可以先使用Hive進(jìn)行數(shù)據(jù)轉(zhuǎn)換處理,之后使用Impala在Hive處理后的結(jié)果數(shù)據(jù)集上進(jìn)行快速的數(shù)據(jù)分析。
Impala沒有使用 MapReduce進(jìn)行并行計(jì)算,雖然MapReduce是非常好的并行計(jì)算框架,但它更多的面向批處理模式,而不是面向交互式的SQL執(zhí)行。與 MapReduce相比:Impala把整個(gè)查詢分成一執(zhí)行計(jì)劃樹,而不是一連串的MapReduce任務(wù)。在分發(fā)執(zhí)行計(jì)劃后,Impala使用拉式獲取數(shù)據(jù)的方式獲取結(jié)果,把結(jié)果數(shù)據(jù)組成按執(zhí)行樹流式傳遞匯集,減少了把中間結(jié)果寫入磁盤的步驟,再從磁盤讀取數(shù)據(jù)的開銷。Impala使用服務(wù)的方式避免每次執(zhí)行查詢都需要啟動(dòng)的開銷,即相比Hive沒了MapReduce啟動(dòng)時(shí)間。
四、處理數(shù)據(jù)的方式
(1)Hive處理數(shù)據(jù)的方式
HiveQL通過CLI/Web UI或者thrift 、odbc 或 jdbc接口的外部接口提交,經(jīng)過complier編譯器,運(yùn)用Metastore中的元數(shù)據(jù)進(jìn)行類型檢測和語法分析,生成一個(gè)邏輯計(jì)劃(logical plan),然后通過簡單的優(yōu)化處理,產(chǎn)生一個(gè)以有向無環(huán)圖DAG數(shù)據(jù)結(jié)構(gòu)形式展現(xiàn)的MapReduce任務(wù)。

(2)Impala處理數(shù)據(jù)的方式
每當(dāng)用戶使用提供的任何接口發(fā)起查詢時(shí),集群中的Impalads之一就會接受該查詢。 此Impalad被視為該特定查詢的協(xié)調(diào)程序。
在接收到查詢后,查詢協(xié)調(diào)器使用Hive元存儲中的表模式驗(yàn)證查詢是否合適。 然后,它從HDFS名稱節(jié)點(diǎn)(NameNode)收集關(guān)于執(zhí)行查詢所需的數(shù)據(jù)的位置的信息,并將該信息發(fā)送到其他Impalad以便執(zhí)行查詢。
所有其他Impala守護(hù)程序讀取指定的數(shù)據(jù)塊并處理查詢。 一旦所有守護(hù)程序完成其任務(wù),查詢協(xié)調(diào)器將收集結(jié)果并將其傳遞給用戶。

黃色部分是 Imapla模塊,藍(lán)色部分為運(yùn)行 Impala 依賴的其他模塊。Impala 整體分為兩部分:StateStore 和 Impalad。
StateStore 是 Impala 的一個(gè)子服務(wù),用來監(jiān)控集群中各個(gè)節(jié)點(diǎn)的健康狀況,提供節(jié)點(diǎn)注冊,錯(cuò)誤檢測等功能。
Impala Daemon 進(jìn)程是運(yùn)行在集群每個(gè)節(jié)點(diǎn)上的守護(hù)進(jìn)程,每個(gè)節(jié)點(diǎn)上這個(gè)進(jìn)程名稱為Impalad。
Impalad 運(yùn)行在 DataNode 節(jié)點(diǎn)上,主要有兩個(gè)作用 :
- 一是協(xié)調(diào)Client提交的 Query 的執(zhí)行,給其他Impalad分配任務(wù),收集其他Impalad的執(zhí)行結(jié)果進(jìn)行匯總;
- 二是這個(gè)Impalad也會執(zhí)行其他Impalad給其分配的任務(wù),執(zhí)行這部分任務(wù)主要就是對本地HDFS和HBase中的數(shù)據(jù)進(jìn)行操作。
Impala中表的元數(shù)據(jù)存儲借用的是Hive的,也就是表的元數(shù)據(jù)信息存儲在Hive的Metastore中。
位于HDFS數(shù)據(jù)節(jié)點(diǎn)DataNode上的每個(gè)Impalad進(jìn)程,都具有如下幾個(gè)模塊:
- Query Planner;
- Query Coordinator;
- Query Exec Engine;
Query Planner 接收來自SQL APP和ODBC的SQL語句,解釋成功執(zhí)行計(jì)劃。Query Coordinator將執(zhí)行計(jì)劃進(jìn)行優(yōu)化和拆分,形成執(zhí)行計(jì)劃片段,調(diào)度這些片段分發(fā)到各個(gè)節(jié)點(diǎn)上,由各個(gè)節(jié)點(diǎn)上的Query Exec Engine 負(fù)責(zé)執(zhí)行,最后返回中間結(jié)果,這些中間結(jié)果經(jīng)過聚集之后,最終返回給用戶。





























