【Impala篇】---Hue從初始到安裝應用

LHBlog發表於2018-01-30

一、前述

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 (查詢完成後執行) 查詢最近一次查詢的底層資訊


例項:

去格式化:

 
指定規則。

可以用於以後的結果的使用!!!!

 


備註:

1.在hive中建立表不會同步到impala
2.StateStore 健康檢查和Daemon 計算節點一般不會再一個節點上.
3.StateStore 健康檢查和後設資料同步catalog在一個節點上。
4.Hive中建立的表 impala中執行全量更新,其他條件下最好不用。

 

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輸出底層資訊計劃,在做相應環境優化

 備註:

中間表 可以解決insert語句造成的小表問題 。建立一個同樣的表結構的表,insert  select查出來相當於放入一個表裡面,即小檔案規模減小。
可以解決 格式不支援問題。利用中間錶轉一下,將結果放到中間表,寫入本來的表。

 

 

相關文章