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 default; drop 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的視圖進行插入操作 2)insert 表可以來自視圖 數據文件處理 加載數據: 1、insert語句:插入數據時每條數據產生一個數據文件,不建議用此方式加載批量數據 2、load 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輸出底層信息計划,在做相應環境優化