一、前述
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輸出底層信息計划,在做相應環境優化
備注:
