impala入門

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架構前端

image


Impala屬於無主模型,沒有再使用緩慢的 Hive+MapReduce批處理,而是經過使用與商用並行關係數據庫中相似的分佈式查詢引擎(由Query Planner、Query Coordinator和
Query Exec Engine三部分組成),能夠直接從HDFS或HBase中用SELECT、JOIN和統計函數查詢數據,從而大大下降了延遲。

因爲impala是基於hive的,impala表的元數據信息依然存儲在Hive Metastore中;


Statestore Daemonjava

該進程負責蒐集集羣中Impalad進程節點的健康情況,它經過建立多個線程來處理Impalad的註冊訂閱,並與各節點保持心跳鏈接,不斷地將健康情況的結果轉發給全部的
Impalad進程節點。一個Impala集羣只需一個statestored進程節點,當某一節點不可用時,該進程負責將這一信息傳遞給全部的Impalad進程節點,再有新的查詢時不會把請
求發送到不可用的Impalad節點上。

statestored也是容許掛掉的,不會影響集羣運行,由於impalad節點之間也會保持通訊,可是當statestored和某一部分impalad都掛掉了,就會出問題,由於沒有了statestored,
而impalad節點之間並不能識別出是否有某些impalad掛了,依然會與掛掉的impalad通訊,此時就會出問題;


Catalog Daemon

把impala表的metadata分發到各個impalad 中,說他是基於hive 的,因此就須要metadata數據分到impalad 中,之前沒有此進程,就是手動來進行同步的。雖然以後加入了,
可是也沒有那麼智能,並非保證全部的數據都能同步,好比你插入一些數據,他能夠把數據發到其餘節點,可是好比建立表ddl 語句,建議去手動作一下。接收來自
statestore 的全部請求,當impala deamon節點插入或者查詢數據時候(數據改變的時候),他把本身的操做結果彙報給state deamon,而後state store 請求catelog deamon,告知重
新更新元數據信息給impalad 中,因此catalog deamon 與statedeamon 放到一臺機器上,並且不建議在此機器上再去安裝impala deamon 進程,避免形成提供查詢形成集羣管
理出問題;


Impala Daemonweb

與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
相關文章
相關標籤/搜索