一、前述
Cloudera公司推出,提供對HDFS、Hbase資料的高效能、低延遲的互動式SQL查詢功能。基於Hive使用記憶體計算,兼顧資料倉儲、具有實時、批處理、多併發等優點 是CDH平臺首選的PB級大資料實時查詢分析引擎.一般公司選擇使用CDH部署叢集,可以考慮下Impala。
二、具體原理
優點:
1、基於記憶體進行計算,能夠對PB級資料進行互動式實時查詢、分析
2、無需轉換為MR,直接讀取HDFS資料
3、C++編寫,LLVM統一編譯執行
4、相容HiveSQL
5、具有資料倉儲的特性,可對hive資料直接做資料分析
6、支援Data Local
7、支援列式儲存
8、支援JDBC/ODBC遠端訪問
缺點:
1、對記憶體依賴大
2、C++編寫 開源?!
3、完全依賴於hive
4、實踐過程中 分割槽超過1w 效能嚴重下降
5、穩定性不如hive
6. 此外,Impala不支援HiveQL以下特性:
可擴充套件機制,例如:TRANSFORM、自定義檔案格式、自定義SerDes
XML、JSON函式
某些聚合函式:
covar_pop, covar_samp, corr, percentile, percentile_approx, histogram_numeric, collect_set
Impala僅支援:AVG,COUNT,MAX,MIN,SUM
多Distinct查詢
UDF、UDAF
以下語句:
ANALYZE TABLE (Impala:COMPUTE STATS)、DESCRIBE COLUMN、DESCRIBE DATABASE、EXPORT TABLE、IMPORT TABLE、SHOW TABLE EXTENDED、SHOW INDEXES、SHOW COLUMNS、
架構:
解釋:
真正計算程式:
整條sql的分發。中心功能。將任務分發給對應的executor計算。彙總結果返回給客戶端:
executor 關聯子查詢,沒有子查詢就沒有關聯了:
Statestore Daemon(負責健康叢集)
例項*1 - statestored
負責收集分佈在叢集中各個impalad程式的資源資訊、各節點健康狀況,同步節點資訊.
負責query的排程
Catalog Daemon(分發後設資料資訊)
例項*1 - catalogd
分發表的後設資料資訊到各個impalad中
接收來自statestore的所有請求
Impala Daemon(真正處理節點)
例項*N – impalad
接收client、hue、jdbc或者odbc請求、Query執行並返回給中心協調節點
子節點上的守護程式,負責向statestore保持通訊,彙報工作
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)執行查詢檔案,以分號分隔
-o filename(--output_file filename)結果輸出到指定檔案
-c 查詢執行失敗時繼續執行(一般專案升級的時候,二期可以執行一期的業務看下具體哪些業務語句失敗了)
-k(--kerberos) 使用kerberos安全加密方式執行impala-shell
-l 啟用LDAP認證
-u 啟用LDAP時,指定使用者名稱
Impala Shell(控制檯內部執行時命令)
help
connect <hostname:port> 連線主機,預設埠21000
refresh <tablename> 增量重新整理後設資料庫
invalidate metadata 全量重新整理後設資料庫
explain <sql> 顯示查詢執行計劃、步驟資訊(不執行sql)
set explain_level 設定顯示級別(0,1,2,3)
shell <shell> 不退出impala-shell執行Linux命令
profile (查詢完成後執行) 查詢最近一次查詢的底層資訊
例項:
去格式化:
可以用於以後的結果的使用!!!!
備註:
Impala HBase整合(實際上hive與hbase整合即可,共用同一套後設資料)
Impala可以通過Hive外部表方式和HBase進行整合,步驟如下:
步驟1:建立hbase 表,向表中新增資料
create 'test_info', 'info'
put 'test_info','1','info:name','zhangsan'
put 'test_info','2','info:name','lisi'
步驟2:建立hive表
CREATE EXTERNAL TABLE test_info(key string,name string )
ROW FORMAT SERDE 'org.apache.hadoop.hive.hbase.HBaseSerDe'
STORED by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping"=":key,info:name")
TBLPROPERTIES
("hbase.table.name" = "test_info");
步驟3:重新整理Impala表
invalidate metadata
Impala 儲存&&分割槽
Impala 儲存&&分割槽
Impala 效能優化
1.執行計劃
查詢sql執行之前,先對該sql做一個分析,列出需要完成這一項查詢的詳細方案
命令:explain sql、profile。
2.要點:
1、SQL優化,使用之前呼叫執行計劃
2、選擇合適的檔案格式進行儲存
3、避免產生很多小檔案(如果有其他程式產生的小檔案,可以使用中間表)
4、使用合適的分割槽技術,根據分割槽粒度測算
5、使用compute stats進行表資訊蒐集
6、網路io的優化:
a.避免把整個資料傳送到客戶端
b.儘可能的做條件過濾
c.使用limit字句
d.輸出檔案時,避免使用美化輸出
7、使用profile輸出底層資訊計劃,在做相應環境優化
備註: