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


一、前述

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查出來相當於放入一個表里面,即小文件規模減小。
可以解決 格式不支持問題。利用中間表轉一下,將結果放到中間表,寫入本來的表。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM