Impala一文詳解及與hive簡單對比

Impala系統(tǒng)架構(gòu)

負(fù)責(zé)協(xié)調(diào)客戶端提交的查詢的執(zhí)行 包含Query Planner、Query Coordinator和Query Exec Engine三個模塊。 與HDFS的數(shù)據(jù)節(jié)點(diǎn)(HDFS DN)運(yùn)行在同一節(jié)點(diǎn)上。 給其他Impalad分配任務(wù)以及收集其他Impalad的執(zhí)行結(jié)果進(jìn)行匯總。 Impalad也會執(zhí)行其他Impalad給其分配的任務(wù),主要就是對本地HDFS和HBase里的部分?jǐn)?shù)據(jù)進(jìn)行操作。
會創(chuàng)建一個statestored進(jìn)程。 負(fù)責(zé)收集分布在集群中各個Impalad進(jìn)程的資源信息,用于查詢調(diào)度。
給用戶提供查詢使用的命令行工具。 還提供了Hue、JDBC及ODBC的使用接口。
說明:Impala中的元數(shù)據(jù)直接存儲在Hive中。Impala采用與Hive相同的元數(shù)據(jù)、SQL語法、ODBC驅(qū)動程序和用戶接口,從而使得在一個Hadoop平臺上,可以統(tǒng)一部署Hive和Impala等分析工具,同時支持批處理和實(shí)時查詢。
Impala查詢執(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é)點(diǎn)中獲取數(shù)據(jù)地址,以得到存儲這個查詢相關(guān)數(shù)據(jù)的所有數(shù)據(jù)節(jié)點(diǎn)。 第3步,Coordinator初始化相應(yīng)impalad上的任務(wù)執(zhí)行,即把查詢?nèi)蝿?wù)分配給所有存儲這個查詢相關(guān)數(shù)據(jù)的數(shù)據(jù)節(jié)點(diǎn)。 第4步,Query Executor通過流式交換中間輸出,并由Query Coordinator匯聚來自各個impalad的結(jié)果。 第5步,Coordinator把匯總后的結(jié)果返回給CLI客戶端。
Impala與Hive的比較

Hive適合于長時間的批處理查詢分析,而Impala適合于實(shí)時交互式SQL查詢。 Hive依賴于MapReduce計(jì)算框架,Impala把執(zhí)行計(jì)劃表現(xiàn)為一棵完整的執(zhí)行計(jì)劃樹,直接分發(fā)執(zhí)行計(jì)劃到各個Impalad執(zhí)行查詢。 Hive在執(zhí)行過程中,如果內(nèi)存放不下所有數(shù)據(jù),則會使用外存,以保證查詢能順序執(zhí)行完成,而Impala在遇到內(nèi)存放不下數(shù)據(jù)時,不會利用外存,所以Impala目前處理查詢時會受到一定的限制。
Hive與Impala使用相同的存儲數(shù)據(jù)池,都支持把數(shù)據(jù)存儲于HDFS和HBase中。 Hive與Impala使用相同的元數(shù)據(jù)。 Hive與Impala中對SQL的解釋處理比較相似,都是通過詞法分析生成執(zhí)行計(jì)劃。
Impala的目的不在于替換現(xiàn)有的MapReduce工具。 把Hive與Impala配合使用效果最佳。 可以先使用Hive進(jìn)行數(shù)據(jù)轉(zhuǎn)換處理,之后再使用Impala在Hive處理后的結(jié)果數(shù)據(jù)集上進(jìn)行快速的數(shù)據(jù)分析。
評論
圖片
表情
