Impala的運行需要依賴於Hive的元數據
Impala是參照 Dremel系統進行設計的
Impala採用了與商用並行關係數據庫類似的分佈式查詢引擎,可以直接與HDFS和HBase進行交互查詢
Impala和Hive採用相同的SQL語法、ODBC驅動程序和用戶接口
註釋:虛線框爲自身組件,實線框爲外部結構;
Impala主要由Impalad,State Store和CLI三部分組成:
Impalad:
負責協調客戶端提交的查詢的執行
包含Query Planner、Query Coordinator和Query Exec Engine三個模塊
與HDFS的數據節點(HDFS DN)運行在同一節點上
給其他Impalad分配任務以及收集其他Impalad的執行結果進行彙總
Impalad也會執行其他Impalad給其分配的任務,主要就是對本地HDFS和HBase裏的部分數據進行操作
State Store:
會創建一個statestored進程
負責收集分佈在集羣中各個Impalad進程的資源信息,用於查詢調度
CLI:
給用戶提供查詢使用的命令行工具
還提供了Hue、JDBC及ODBC的使用接口
說明:
Impala中的元數據直接存儲在Hive中。Impala採用與Hive相同的元數據、SQL語法、ODBC驅動程序和用戶接口,從而使得在一個Hadoop平臺上,可以統一部署Hive和Impala等分析工具,同時支持批處理和實時查詢
Impala執行查詢的具體過程:
第0步,當用戶提交查詢前,Impala先創建一個負責協調客戶端提交的查詢的Impalad進程,該進程會向Impala State Store提交註冊訂閱信息,State Store會創建一個statestored進程,statestored進程通過創建多個線程來處理Impalad的註冊訂閱信息。
第1步,用戶通過CLI客戶端提交一個查詢到impalad進程,Impalad的Query Planner對SQL語句進行解析,生成解析樹;然後,Planner把這個查詢的解析樹變成若干PlanFragment,發送到Query Coordinator
第2步,Coordinator通過從MySQL元數據庫中獲取元數據,從HDFS的名稱節點中獲取數據地址,以得到存儲這個查詢相關數據的所有數據節點。
第3步,Coordinator初始化相應impalad上的任務執行,即把查詢任務分配給所有存儲這個查詢相關數據的數據節點。
第4步,Query Executor通過流式交換中間輸出,並由Query Coordinator匯聚來自各個impalad的結果。
第5步,Coordinator把彙總後的結果返回給CLI客戶端。
Hive與Impala的不同點總結如下:
1、Hive適合批處理;Impala適合實時交互;
2、Hive一來MapReduce計算框架,Impala把執行計劃表現爲一棵完整的執行計劃樹,直接分發執行計劃到各個Impalad執行查詢
3、Hive可以溢寫磁盤;Impala受限於內存大小;
Hive與Impala的相同點總結如下:
1、相同存儲數據池HDFS、HBase;
2、相同元數據;
3、對SQL解釋處理比較相似(通過詞法分析生成執行計劃XML文件);
總結:
Impala是彌補Hive中的不足之處而非替代;
Impala的目的不在於替換現有的MapReduce工具把Hive與Impala配合使用效果最佳
可以先使用Hive進行數據轉換處理,之後再使用Impala在Hive處理後的結果數據集上進行快速的數據分析