高并发MPP查询引擎Impala初识
官網(wǎng):http://impala.apache.org/
?
Apache Impala是高性能的專用SQL引擎,使用Impala SQL,因為Impala無需借助任何的框架,直接實現(xiàn)對數(shù)據(jù)塊的查詢,所以查詢延遲毫秒級。還是得放到和Hive一起說說,Impala適用實時查詢,因為比Hive查詢快多了。Impala是Cloudera公司主導(dǎo)開發(fā)的新型查詢系統(tǒng),它提供SQL語義,能查詢存儲在Hadoop的HDFS和HBase中的PB級大數(shù)據(jù)。已有的Hive系統(tǒng)雖然也提供了SQL語義,但由于Hive底層執(zhí)行使用的是MapReduce引擎,仍然是一個批處理過程,難以滿足查詢的交互性。
1、Impala即時查詢原理
Impala是架構(gòu)于Hadoop之上的開源、高并發(fā)的MPP查詢引擎,被廣泛應(yīng)用于各種行業(yè)。Impala是完全集成的,用以平衡Hadoop的靈活性和可擴展性,為BI/數(shù)據(jù)分析師提供低延遲、高并發(fā)的以讀為主的查詢。
Impala將傳統(tǒng)分析數(shù)據(jù)庫的SQL支持和多用戶性能與Hadoop的靈活性和可擴展性結(jié)合起來,它通過利用HDFS、HBase、Metastore、YARN、Sentry等標準組件能夠讀取大多數(shù)廣泛使用的文件格式比如Parquet、Avro、RCFile來維護Hadoop的靈活性;為了降低延遲,避免利用MR或者讀遠程數(shù)據(jù),基于負責查詢執(zhí)行所有方面、作為Hadoop基礎(chǔ)設(shè)施一部分運行于各臺服務(wù)器上的Deamon進程實現(xiàn)了一個分布式架構(gòu),在相同負載的情形下其性能相當或超過了商用MPP分析數(shù)據(jù)庫。
在Cloudera的測試中,Impala的查詢效率比Hive有數(shù)量級的提升。從技術(shù)角度上來看,Impala之所以能有好的性能,主要有以下幾方面的原因。
1)? Impala不需要把中間結(jié)果寫入磁盤,省掉了大量的I/O開銷。
2)? 省掉了MapReduce作業(yè)啟動的開銷。MapReduce啟動task的速度很慢(默認每個心跳間隔是3秒鐘),Impala直接通過相應(yīng)的服務(wù)進程來進行作業(yè)調(diào)度,速度快了很多。
3)? Impala完全拋棄了MapReduce這個不太適合做SQL查詢的范式,而是像Dremel一樣借鑒了MPP并行數(shù)據(jù)庫的思想另起爐灶,因此可做更多的查詢優(yōu)化,從而省掉不必要的shuffle、sort等開銷。
4)? 通過使用LLVM來統(tǒng)一編譯運行時代碼,避免了為支持通用編譯而帶來的不必要開銷。
5)? 用C++實現(xiàn),做了很多有針對性的硬件優(yōu)化,例如使用SSE指令。
6)? 使用了支持Data locality的I/O調(diào)度機制,盡可能地將數(shù)據(jù)和計算分配在同一臺機器上進行,減少了網(wǎng)絡(luò)開銷。
2、Impala架構(gòu)
Impala是Cloudera在受到Google的Dremel啟發(fā)下開發(fā)的實時交互SQL大數(shù)據(jù)查詢工具(實時SQL查詢引擎Impala),Impala沒有再使用緩慢的Hive+MapReduce批處理,而是通過使用與商用并行關(guān)系數(shù)據(jù)庫中類似的分布式查詢引擎(由Query Planner、Query Coordinator和Query Exec Engine三部分組成),可以直接從HDFS或HBase中用SELECT、JOIN和統(tǒng)計函數(shù)查詢數(shù)據(jù),從而大大降低了延遲。
Impala主要由Impalad, State Store和CLI組成。
?
1)Impalad: 與DataNode運行在同一節(jié)點上,由Impalad進程表示,它接收客戶端的查詢請求(接收查詢請求的Impalad為Coordinator,Coordinator通過JNI調(diào)用java前端解釋SQL查詢語句,生成查詢計劃樹,再通過調(diào)度器把執(zhí)行計劃分發(fā)給具有相應(yīng)數(shù)據(jù)的其它Impalad進行執(zhí)行),讀寫數(shù)據(jù),并行執(zhí)行查詢,并把結(jié)果通過網(wǎng)絡(luò)流式的傳送回給Coordinator,由Coordinator返回給客戶端。同時Impalad也與State Store保持連接,用于確定哪個Impalad是健康和可以接受新的工作。
在Impalad中啟動三個ThriftServer:beeswax_server(連接客戶端),hs2_server(借用Hive元數(shù)據(jù)), be_server(Impalad內(nèi)部使用)和一個ImpalaServer服務(wù)。
2)Impala State Store: 跟蹤集群中的Impalad的健康狀態(tài)及位置信息,由statestored進程表示,它通過創(chuàng)建多個線程來處理Impalad的注冊訂閱和與各Impalad保持心跳連接,各Impalad都會緩存一份State Store中的信息,當State Store離線后(Impalad發(fā)現(xiàn)State Store處于離線時,會進入recovery模式,反復(fù)注冊,當State Store重新加入集群后,自動恢復(fù)正常,更新緩存數(shù)據(jù))因為Impalad有State Store的緩存仍然可以工作,但會因為有些Impalad失效了,而已緩存數(shù)據(jù)無法更新,導(dǎo)致把執(zhí)行計劃分配給了失效的Impalad,導(dǎo)致查詢失敗。
3)CLI: 提供給用戶查詢使用的命令行工具(Impala Shell使用python實現(xiàn)),同時Impala還提供了Hue,JDBC,ODBC使用接口。
?
3、與Hive關(guān)系
Impala與Hive都是構(gòu)建在Hadoop之上的數(shù)據(jù)查詢工具各有不同的側(cè)重適應(yīng)面,但從客戶端使用來看Impala與Hive有很多的共同之處,如數(shù)據(jù)表元數(shù)據(jù)、ODBC/JDBC驅(qū)動、SQL語法、靈活的文件格式、存儲資源池等。Hive適合于長時間的批處理查詢分析,而Impala適合于實時交互式SQL查詢,Impala給數(shù)據(jù)分析人員提供了快速實驗、驗證想法的大數(shù)據(jù)分析工具。可以先使用hive進行數(shù)據(jù)轉(zhuǎn)換處理,之后使用Impala在Hive處理后的結(jié)果數(shù)據(jù)集上進行快速的數(shù)據(jù)分析。Impala與Hive在Hadoop中的關(guān)系如下圖。
4、Impala查詢處理過程
Impalad分為Java前端與C++處理后端,接受客戶端連接的Impalad即作為這次查詢的Coordinator,Coordinator通過JNI調(diào)用Java前端對用戶的查詢SQL進行分析生成執(zhí)行計劃樹,不同的操作對應(yīng)不用的PlanNode, 如:SelectNode, ScanNode, SortNode, AggregationNode, HashJoinNode等等。
?
執(zhí)行計劃樹的每個原子操作由一個PlanFragment表示,通常一條查詢語句由多個Plan Fragment組成, Plan Fragment 0表示執(zhí)行樹的根,匯聚結(jié)果返回給用戶,執(zhí)行樹的葉子結(jié)點一般是Scan操作,分布式并行執(zhí)行。
?
?????Java前端產(chǎn)生的執(zhí)行計劃樹以Thrift數(shù)據(jù)格式返回給Impala C++后端(Coordinator)(執(zhí)行計劃分為多個階段,每一個階段叫做一個PlanFragment,每一個PlanFragment在執(zhí)行時可以由多個Impalad實例并行執(zhí)行(有些PlanFragment只能由一個Impalad實例執(zhí)行,如聚合操作),整個執(zhí)行計劃為一執(zhí)行計劃樹),由Coordinator根據(jù)執(zhí)行計劃,數(shù)據(jù)存儲信息(Impala通過libhdfs與HDFS進行交互。通過hdfsGetHosts方法獲得文件數(shù)據(jù)塊所在節(jié)點的位置信息),通過調(diào)度器(現(xiàn)在只有simple-scheduler, 使用round-robin算法)Coordinator::Exec對生成的執(zhí)行計劃樹分配給相應(yīng)的后端執(zhí)行器Impalad執(zhí)行(查詢會使用LLVM進行代碼生成,編譯,執(zhí)行。對于使用LLVM如何提高性能這里有說明),通過調(diào)用GetNext()方法獲取計算結(jié)果,如果是insert語句,則將計算結(jié)果通過libhdfs寫回HDFS當所有輸入數(shù)據(jù)被消耗光,執(zhí)行結(jié)束,之后注銷此次查詢服務(wù)。
?
Impala與標準的BI環(huán)境集成,客戶端通過ODBC或JDBC連接服務(wù)器、通過Kerberos或LDAP實現(xiàn)認證、遵循標準的SQL角色和權(quán)限實現(xiàn)權(quán)限管理。Impala的查詢處理流程大概如圖所示:
總結(jié)
以上是生活随笔為你收集整理的高并发MPP查询引擎Impala初识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分布式大数据sql查询引擎Presto初
- 下一篇: linux内存释放和使用限制