impala


impala

1.impala是什么:

impala是基於hive的大數據實時分析查詢引擎,直接使用Hive的元數據庫Metadata,意味着impala元數據都存儲在Hive的metastore中。

2.impala與hive的關系:

 

Impala與Hive都是構建在Hadoop之上的數據查詢工具各有不同的側重適應面
1.hive適合長時間的批處理查詢分析
2.impala適合實時交互式查詢
# 在hive上進行數據轉換處理,之后使用impala在hive處理后的結果集上進行快速的數據分析

 

3.impala簡介

1.Cloudera公司推出,提供對HDFS、Hbase數據的高性能、低延遲的交互式SQL查詢功能。
2.基於Hive使用內存計算,兼顧數據倉庫、具有實時、批處理、多並發等優點
3.是CDH平台首選的PB級大數據實時查詢分析引擎

 

4.impala優劣

優點:

1.基於內存計算,能夠對PB集數據進行交互式查詢分析
2.無需轉換為MR,直接讀取HDFS文件
3.兼容數據倉庫特性,可對hive數據直接做數據分析
4.兼容hivesql
5.支持列存儲

缺點:

1.內存依賴大
2.依賴hive
3.分區較多時,性能瓶頸
4.穩定性不如hive

 

5.impala組件

Statestore Daemon
實例*1 - statestored
負責收集分布在集群中各個impalad進程的資源信息、各節點健康狀況,同步節點信息.
負責query的調度

Catalog Daemon
實例*1 - catalogd
分發表的元數據信息到各個impalad中
接收來自statestore的所有請求

Impala Daemon
實例*N – impalad
接收client、hue、jdbc或者odbc請求、Query執行並返回給中心協調節點
子節點上的守護進程,負責向statestore保持通信,匯報工作

 

6.impala shell

外部shell

impala-shell 
-h       幫助
-v       版本
-V       詳細輸出
-queit   關閉詳細輸出
-p       顯示執行計划
-i hostname  連接主機  (數據量較大時,可連接內存(128G)較大的主機執行)
-r        刷新所有元數據
-q query  從命令行執行,不進入impala-shell 
-d default_db 指定數據庫
-B            去格式化輸出
  --output_delimiter=character 指定分隔符
  --print_header 打印列名
-f query_file  執行文件,逗號分隔
-o filename    輸出到指定文件
-c             查詢執行失敗時繼續執行

 

內部shell

help
connect <hostname:port>
refresh <tablename> 增量刷新元數據庫
invalidate metadata 全量刷新元數據庫
explain <sql> 顯示查詢執行計划、步驟信息
set explain_level 設置顯示級別(0,1,2,3)
shell <shell> 不退出impala-shell執行Linux命令
profile (查詢完成后執行) 查詢最近一次查詢的底層信息

 

7.impala 分區&存儲

parquet            create table ,insert ,load data ,query
text               load data
avro               僅僅支持查詢,在hive中通過load data加載數據
rcfile             僅僅支持查詢,在hive中通過load data加載數據
sequencefile       僅僅支持查詢,在hive中通過load data加載數據
添加分區方式
1、partitioned by 創建表時,添加該字段指定分區列表
createt table test (id int,name string)  partitioned by (pt_d string);


2、使用alter table 進行分區的添加和刪除操作
alter table test add partition (pt_d='20190424');
alter table test drop partition (pt_d='20190424');
alter table test drop partition (pt_d='20190424',pt_h='01');

分區內添加數據
insert into test partition (pt_d='20190424') values (1,'zhangsan'),(2,'lisi')

查詢指定分區數據
select id,name from test where pt_d='20190424';

 

8.impala sql

支持數據類型:
INT
TINYINT
SMALLINT
BIGINT
BOOLEAN
CHAR
VARCHAR
STRING
FLOAT
DOUBLE
REAL
DECIMAL
TIMESTAMP
cdh5.5版本后支持:
支持數據類型:
ARRAY
MAP
STRUCT
Complex

 

此外,Impala不支持HiveQL以下特性:

1.可擴展機制,例如:TRANSFORM、自定義文件格式、自定義SerDes
2.XML、JSON函數
3.某些聚合函數:
covar_pop, covar_samp, corr, percentile, percentile_approx, histogram_numeric, collect_set
   Impala僅支持:AVG,COUNT,MAX,MIN,SUM
4.多Distinct查詢
5.UDF、UDAF
6.以下語句:
ANALYZE TABLE (Impala:COMPUTE STATS)、DESCRIBE COLUMN、DESCRIBE DATABASE、EXPORT TABLE、IMPORT TABLE、SHOW TABLE EXTENDED、SHOW INDEXES、SHOW COLUMNS、
創建數據庫
create database db1;
use db1;

刪除數據庫
use defaultdrop database db1;


創建表(內部表)
默認方式創建表:
create table t_person1(
    id int,
    name string
)

指定存儲方式:
create table t_person2(
    id int,
    name string
)
row format delimited 
fields terminated by '\0'  (impala1.3.1版本以上支持'\0' )
stored as textfile;

其他方式創建內部表
使用現有表結構:
create table tab_3 like tab_1;
指定文本表字段分隔符:
alter table tab_3 set serdeproperties ('serialization.format'=',','field.delim'=',');


插入數據
直接插入值方式:
insert into t_person values (1,hex(‘hello world’));

從其他表插入數據:
insert (overwrite) into tab_3 select * from tab_2 ;       
批量導入文件方式方式:
load data local inpath ‘/xxx/xxx’ into table tab_1;

創建表(外部表)
默認方式創建表:
create external table tab_p1(
id int,
name string
)
location '/user/xxx.txt'

指定存儲方式:
create external table tab_p2 like parquet_tab
'/user/xxx/xxx/1.dat'
partition (year int , month tinyint, day tinyint)
location '/user/xxx/xxx'
stored as parquet;

視圖
創建視圖:
create view v1 as select count(id) as total from tab_3 ;

查詢視圖:
select * from v1;

查看視圖定義:
describe formatted v1

注意:
1)不能向impala的視圖進行插入操作
2insert 表可以來自視圖

數據文件處理
加載數據:
1、insert語句:插入數據時每條數據產生一個數據文件,不建議用此方式加載批量數據
2load data方式:在進行批量插入時使用這種方式比較合適
3、來自中間表:此種方式使用於從一個小文件較多的大表中讀取文件並寫入新的表生產少量的數據文件。也可以通過此種方式進行格式轉換。

空值處理:
impala將“\n”表示為NULL,在結合sqoop使用是注意做相應的空字段過濾,
也可以使用以下方式進行處理:
alter table name set tblproperties ("serialization.null.format"="null")

 

9.impala性能優化

1、SQL優化,使用之前調用執行計划
2、選擇合適的文件格式進行存儲
3、避免產生很多小文件(如果有其他程序產生的小文件,可以使用中間表)
4、使用合適的分區技術,根據分區粒度測算
5、使用compute stats進行表信息搜集
6、網絡io的優化:
    a.避免把整個數據發送到客戶端
    b.盡可能的做條件過濾
    c.使用limit字句
    d.輸出文件時,避免使用美化輸出
7、使用profile輸出底層信息計划,在做相應環境優化

 


免責聲明!

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



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