1、概述html
Impala 是參照google 的新三篇論文Dremel(大批量數據查詢工具)的開源實現,功能相似shark(依賴於hive)和Drill(apache),impala 是clouder 公司主導開發並開源,基於 hive並使用內存進行計算,兼顧數據倉庫,具備實時,批處理,多併發等優勢。是使用cdh 的首選PB 級大數據實時查詢分析引擎。(也能夠單獨安裝使用,但通常都是和CDH一塊兒使用;) 參考: https://www.cloudera.com/products/open-source/apache-hadoop/impala.html http://impala.apache.org/
Impala能夠直接在存儲在HDFS,HBase或Amazon Simple Storage Service(S3)中的Apache Hadoop數據上提供快速,交互式的SQL查詢。 除了使用相同的統一存儲平臺, Impala和Apache Hive同樣還使用相同的元數據,SQL語法(Hive SQL),ODBC驅動程序和用戶界面(Hue中的Impala查詢UI)。 Impala是用於查詢大數據的工具的補充。 Impala不會替代基於MapReduce的批處理框架,如Hive。 基於MapReduce的Hive和其餘框架最適用於長時間運行的批處理做業, 例如涉及批處理Extract,Transform和Load(ETL)類型做業的工做。
2、impala架構前端
Impala屬於無主模型,沒有再使用緩慢的 Hive+MapReduce批處理,而是經過使用與商用並行關係數據庫中相似的分佈式查詢引擎(由Query Planner、Query Coordinator和
Query Exec Engine三部分組成),能夠直接從HDFS或HBase中用SELECT、JOIN和統計函數查詢數據,從而大大下降了延遲。
因爲impala是基於hive的,impala表的元數據信息依然存儲在Hive Metastore中;
Statestore Daemon:java
該進程負責蒐集集羣中Impalad進程節點的健康情況,它經過建立多個線程來處理Impalad的註冊訂閱,並與各節點保持心跳鏈接,不斷地將健康情況的結果轉發給全部的
Impalad進程節點。一個Impala集羣只需一個statestored進程節點,當某一節點不可用時,該進程負責將這一信息傳遞給全部的Impalad進程節點,再有新的查詢時不會把請
求發送到不可用的Impalad節點上。
statestored也是容許掛掉的,不會影響集羣運行,由於impalad節點之間也會保持通訊,可是當statestored和某一部分impalad都掛掉了,就會出問題,由於沒有了statestored,
而impalad節點之間並不能識別出是否有某些impalad掛了,依然會與掛掉的impalad通訊,此時就會出問題;
把impala表的metadata分發到各個impalad 中,說他是基於hive 的,因此就須要metadata數據分到impalad 中,之前沒有此進程,就是手動來進行同步的。雖然以後加入了,
可是也沒有那麼智能,並非保證全部的數據都能同步,好比你插入一些數據,他能夠把數據發到其餘節點,可是好比建立表ddl 語句,建議去手動作一下。接收來自
statestore 的全部請求,當impala deamon節點插入或者查詢數據時候(數據改變的時候),他把本身的操做結果彙報給state deamon,而後state store 請求catelog deamon,告知重
新更新元數據信息給impalad 中,因此catalog deamon 與statedeamon 放到一臺機器上,並且不建議在此機器上再去安裝impala deamon 進程,避免形成提供查詢形成集羣管
理出問題;
Impala Daemon:web
與DataNode運行在同一節點上,是Impala的核心組件,在每一個節點上這個進程的名稱爲Impalad。該進程負責讀寫數據文件;接受來自Impala-shell、Hue、JDBC、ODBC等客
戶端的查詢請求(接收查詢請求的Impalad爲Coordinator),Coordinator經過JNI調用java前端解釋SQL查詢語句,生成查詢計劃樹,再經過調度器把執行計劃分發給具備相應
數據的其它節點分佈式並行執行,並將各節點的查詢結果返回給中心協調者節點Coordinator,再由該節點返回給客戶端。同時Impalad會與State Store保持通訊,以瞭解其
他節點的健康情況和負載。
Impalad 裏面的三個組件:算法
impalad:
impala statestore 和catalog server兩個角色,就具有集羣調節的功能;
真正的工做就是在impalad節點上,客戶端執行查詢的時候能夠選一個impalad節點來執行,此時這個節點的內存要配置大一些,由於最後要彙總查詢結果;
當選定impalad節點後,此節點上的Query coordinato進程會進行協調,找到與此查詢相關的數據塊在哪些機器節點上,而後由每一個節點的Query executor進程負責查詢;
也能夠寫一個輪詢或者權重算法,當有查詢任務時,負載到一批impalad節點上,解決高併發問題;
Query planner(查詢解析器):
接收來自SQL APP和ODBC等的查詢,而後將查詢轉換爲許多子查詢(執行計劃),至關於一個代理;
Query coordinator(中心協調節點):
將這些子查詢分發到各個節點上
Query executor(查詢執行器):
真正負責子查詢的執行,而後返回子查詢的結果,這些中間結果通過彙集以後最終返回給用戶。
3、impala安裝sql
安裝就不說了,對於熟悉CDH的朋友來講,是很簡單的,徹底圖形化操做;shell
通常有兩種方式:數據庫
一、cloudermanager安裝(建議)apache
方便、快捷安全
二、手動安裝(不建議)
沒試過,估計有坑
4、impala shell
外部shell:
外部shell也就是在Linux命令行裏配合"impala-shell"命令使用的; -h (--help) 幫助 -v (--version) 查詢版本信息-V(--verbose) 啓用詳細輸出 --quiet 關閉詳細輸出 -p 顯示執行計劃 -i hostname(--impalad=hostname) 指定鏈接主機 格式hostname:port 默認端口21000 -r(--refresh_after_connect)刷新全部元數據,全量刷新,不太建議使用,當數據量大的時候很慢,還可能致使某些節點出問題。 -q query(--query=query) 從命令行執行查詢,不進入impala-shell -d default_db(--database=default_db) 指定數據庫 -B(--delimited)去格式化輸出 --output_delimiter=character 指定分隔符 --print_header 打印列名 -f query_file(--query_file=query_file)執行查詢文件,也就是執行SQL文件,文件內容以分號分隔 -o filename(--output_file filename) 結果輸出到指定文件 -c 查詢執行失敗時繼續執行,也就是跳過失敗的sql語句 -k(--kerberos) 使用kerberos安全加密方式運行impala-shell -l 啓用LDAP認證 -u 啓用LDAP時,指定用戶名Impala Shell
內部shell:
內部sell,也就是使用「impala-shell」命令鏈接進impala後使用的; help 幫助選項 connect <hostname:port> 鏈接到某個impalad 實例,默認端口21000 refresh <tablename> 增量刷新元數據庫 invalidate metadata 全量刷新元數據庫,性能消耗較大 explain <sql> 顯示查詢執行計劃、步驟信息 set explain_level 設置顯示級別( 0,1,2,3),越高信息越詳細 shell <shell> 不退出impala-shell執行Linux命令 impala>shell ls /home profile (查詢完成後執行) 查詢最近一次查詢的底層信息
5、web監控
impala提供了StateStore和Catalog進程的web監控頁面;
StateStore:
http://ip:25020
Catalog:
http://ip:25010