溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Impala的組件和架構(gòu)有哪些

發(fā)布時間:2021-12-16 13:52:06 來源:億速云 閱讀:172 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“Impala的組件和架構(gòu)有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Impala的組件和架構(gòu)有哪些”吧! 

一、概述 

1.1簡介

Impala是由Cloudera公司開發(fā)的新型查詢系統(tǒng),能夠?qū)Υ鎯υ贖DFS、HBase以及S3上的數(shù)據(jù)進(jìn)行快速的交互式SQL查詢。另外,impala與Hive使用了統(tǒng)一的存儲系統(tǒng)、同樣的元數(shù)據(jù)庫、SQL語法(Hive SQL)、ODBC驅(qū)動和用戶交互接口(Hue),Impala對實時的或者面向批處理的查詢提供了一個統(tǒng)一的平臺,Impala在性能上比Hive高出3~30倍。

Impala是用于查詢大數(shù)據(jù)的工具的補(bǔ)充,Impala不是取代構(gòu)建在MapReduce之上的批處理框架,比如Hive。Hive和其他的基于MapReduce的框架適合處理長時間運行的批處理作業(yè),比如涉及到批處理的ETL類型的作業(yè)。

 

1.2優(yōu)勢

  • 使用的是數(shù)據(jù)科學(xué)家和分析師熟悉的SQL接口
  • 能查詢大數(shù)據(jù)集
  • 是集群環(huán)境中的分布式查詢,便于擴(kuò)展和使用廉價商用硬件
  • 能夠在不同的分析引擎之前共享數(shù)據(jù),比如可以通過pig寫數(shù)據(jù),使用Hive轉(zhuǎn)換數(shù)據(jù),再使用impala查詢數(shù)據(jù)。impala能夠讀寫hive中的表,使用impala對Hive生成的數(shù)據(jù)進(jìn)行分析,實現(xiàn)簡單的數(shù)據(jù)交換
  • 單一系統(tǒng)用于大數(shù)據(jù)處理和分析,因此可以避免成本高昂的建模和ETL.
 

1.3主要特點

  • 支持Hive查詢語言(HiveQL)最常見的SQL-92功能,包括 SELECT, JOIN和聚合函數(shù)
  • 支持HDFS, HBase和S3存儲, 包括:
    • HDFS 文件格式: delimited text files, Parquet, Avro, SequenceFile,和 RCFile.
    • 壓縮: Snappy, GZIP, Deflate, BZIP.
  • 常見的數(shù)據(jù)訪問接口,包括JDBC driver、ODBC driver
  • 支持impala-shell命令行接口
  • Kerberos授權(quán)
 

二、Impala架構(gòu)

為了避免延遲,impala繞過MapReduce,采用了與商用并行關(guān)系數(shù)據(jù)庫類似的分布式查詢引擎,可以直接與HDFS和HBase進(jìn)行交互查詢,性能上比Hive要快。

Impala server 是一個分布式的大規(guī)模并行處理(MPP)的數(shù)據(jù)庫引擎, 它由運行在集群中特定主機(jī)上的不同守護(hù)進(jìn)程組成。其架構(gòu)圖如下圖所示:

Impala的組件和架構(gòu)有哪些  
 

2.1Impala Daemon

這個進(jìn)程是運行在集群每個DataNode節(jié)點上的守護(hù)進(jìn)程,是impala的核心組件。在每個節(jié)點上這個進(jìn)程的名字稱為impalad。主要負(fù)責(zé)讀寫數(shù)據(jù),接受 impala-shell,Hue, JDBC或者ODBC的查詢請求,與集群中的其他節(jié)點分布式并行工作,并將本節(jié)點的查詢結(jié)果返回給中心協(xié)調(diào)者節(jié)點(central coordinator)。

我們可以向運行在DataNode上的任何impalad進(jìn)程提交一個查詢,提交查詢的這個節(jié)點將作為這個查詢的“協(xié)調(diào)者節(jié)點”(coordinator)為這個查詢提供服務(wù)。其他節(jié)點的運算結(jié)果會被傳輸?shù)絽f(xié)調(diào)者節(jié)點,協(xié)調(diào)者節(jié)點將最終的運算結(jié)果返回。當(dāng)使用 mpala-shell命令進(jìn)行功能性測試的時候,為了方便起見,我們總是會連接到同一個節(jié)點上的impalad。但是對于生產(chǎn)環(huán)境中的impala集群而言,必須要考慮到各個節(jié)點的負(fù)載均衡,建議使用JDBC/ODBC接口以輪詢(round-robin)的方式提交到不同的impalad進(jìn)程上。

為了了解其他節(jié)點的健康狀況和負(fù)載,Impalad進(jìn)程會一直與 statestore保持通信,用以確保哪個節(jié)點是健康的并且可以接受任務(wù)的。

當(dāng)impala集群中創(chuàng)建,修改或者刪除了對象,或者進(jìn)行了INSERT/LOAD DATAT操作,catalogd進(jìn)程會向所有的節(jié)點廣播消息,以保證每個impalad節(jié)點都能夠及時地了解整個集群中對象元數(shù)據(jù)的最新狀態(tài)。后臺進(jìn)程間的通信最大限度的降低了對 REFRESH/INVALIDATE METADATA命令的依賴。(但是對于和impala1.2版本之前的節(jié)點通信,還是需要顯示指定)

對impala 2.9或者更高版本,可以控制哪一個節(jié)點為查詢協(xié)調(diào)器( query coordinators ),也可以控制哪一個節(jié)點為查詢協(xié)調(diào)器(query executors), 能夠提高大型集群上高并發(fā)工作負(fù)載的可擴(kuò)展性。

 

2.2Impala Statestore

statestore檢查集群中impalad進(jìn)程節(jié)點的健康狀況,并不斷地將健康狀況結(jié)果轉(zhuǎn)發(fā)給所有的impalad進(jìn)程節(jié)點。statestore進(jìn)程的名稱為statestored。一個impala集群只需要一個statestored進(jìn)程,如果impala節(jié)點由于硬件故障、網(wǎng)絡(luò)錯誤、軟件問題或者其他的原因?qū)е鹿?jié)點不可用,statestore將確保這條信息及時地傳達(dá)到所有的impalad進(jìn)程節(jié)點上,當(dāng)有新的查詢請求時 ,impalad進(jìn)程節(jié)點將不會把查詢請求放松到不可用的節(jié)點上。

由于statestore的目的是在集群故障時對impalad進(jìn)程節(jié)點同步信息,所以對于一個正常運行的impala集群來說,它并不是一個關(guān)鍵進(jìn)程。如果statestore不可用,impalad進(jìn)程節(jié)點之間仍然可以相互協(xié)調(diào)正常對外提供分布式查詢。在statestore不可用的情況下,impalad進(jìn)程節(jié)點失敗,只是會讓集群不再那么強(qiáng)健。當(dāng)statestore恢復(fù)正常時,它重新與impalad進(jìn)程節(jié)點建立通信,恢復(fù)對集群的監(jiān)控功能。

對于負(fù)載平衡和高可用性都適用于impalad守護(hù)進(jìn)程。statestore和catalog進(jìn)程對高可用性沒有特殊要求,因為即便這些守護(hù)進(jìn)程存在問題,也不會導(dǎo)致數(shù)據(jù)丟失。如果這些守護(hù)進(jìn)程因中斷而變得不可用,則可以停止impala服務(wù),刪除impala StateStore和impala Catalog角色,將角色添加到不同的主機(jī)上,并重新啟動impala服務(wù)。

 

2.3Impala Catalog Service

當(dāng)impala集群中執(zhí)行的SQL語句會引起元數(shù)據(jù)變化時,catalog服務(wù)會將這些變化推送到其他的impalad進(jìn)程節(jié)點上。catalog服務(wù)對應(yīng)的進(jìn)程名稱為catalogd,一個impala集群只需要一個catalogd進(jìn)程 。由于所有的請求都是通過statestore進(jìn)程發(fā)送過來的,所以建議讓statestore和catalog運行在同一個節(jié)點上。

catalog服務(wù)大大地減少了對 REFRESH / INVALIDATE METADATA 語句的元數(shù)據(jù)同步的需求。在創(chuàng)建和刪除表的過程中,catalogd進(jìn)程負(fù)責(zé)連接元數(shù)據(jù)庫并進(jìn)行元數(shù)據(jù)更新操作,從而確保不必執(zhí)行REFRESH / INVALIDATE METADATA這樣的元數(shù)據(jù)同步語句。但是,如果通過Hive執(zhí)行了創(chuàng)建表 、加載數(shù)據(jù)等操作,則在impala中執(zhí)行查詢之前需要先執(zhí)行 REFRESH或者INVALIDATE METADATA 命令。

 

三、Impala查詢的執(zhí)行過程 

3.1Impala查詢過程圖

Impala的組件和架構(gòu)有哪些  
 

3.2Impala執(zhí)行查詢的具體過程

第0步,當(dāng)用戶提交查詢前,Impala先創(chuàng)建一個負(fù)責(zé)協(xié)調(diào)客戶端提交的查詢的Impalad進(jìn)程,該進(jìn)程會向Impala State Store提交注冊訂閱信息,State Store會創(chuàng)建一個statestored進(jìn)程,statestored進(jìn)程通過創(chuàng)建多個線程來處理Impalad的注冊訂閱信息。

第1步,用戶通過CLI客戶端提交一個查詢到impalad進(jìn)程,Impalad的Query Planner對SQL語句進(jìn)行解析,生成解析樹;然后,Planner把這個查詢的解析樹變成若干PlanFragment,發(fā)送到Query Coordinator

第2步,Coordinator通過從MySQL元數(shù)據(jù)庫中獲取元數(shù)據(jù),從HDFS的名稱節(jié)點中獲取數(shù)據(jù)地址,以得到存儲這個查詢相關(guān)數(shù)據(jù)的所有數(shù)據(jù)節(jié)點。

第3步,Coordinator初始化相應(yīng)impalad上的任務(wù)執(zhí)行,即把查詢?nèi)蝿?wù)分配給所有存儲這個查詢相關(guān)數(shù)據(jù)的數(shù)據(jù)節(jié)點。

第4步,Query Executor通過流式交換中間輸出,并由Query Coordinator匯聚來自各個impalad的結(jié)果。

第5步,Coordinator把匯總后的結(jié)果返回給CLI客戶端。

 

四、Impala與Hive的比較 

4.1Impala與Hive對比圖

Impala的組件和架構(gòu)有哪些  
 

4.2Hive與Impala的相同點

  • Hive與Impala使用相同的存儲數(shù)據(jù)池,都支持把數(shù)據(jù)存儲于HDFS和HBase中

  • Hive與Impala使用相同的元數(shù)據(jù)

  • Hive與Impala中對SQL的解釋處理比較相似,都是通過詞法分析生成執(zhí)行計劃

 

4.3Hive與Impala的不同點

  • Hive適合于長時間的批處理查詢分析,而Impala適合于實時交互式SQL查詢

  • Hive依賴于MapReduce計算框架,Impala把執(zhí)行計劃表現(xiàn)為一棵完整的執(zhí)行計劃樹,直接分發(fā)執(zhí)行計劃到各個Impalad執(zhí)行查詢

  • Hive在執(zhí)行過程中,如果內(nèi)存放不下所有數(shù)據(jù),則會使用外存,以保證查詢能順序執(zhí)行完成,而Impala在遇到內(nèi)存放不下數(shù)據(jù)時,不會利用外存,所以Impala目前處理查詢時會受到一定的限制

到此,相信大家對“Impala的組件和架構(gòu)有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI