本篇內(nèi)容主要講解“Impala的特點(diǎn)有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Impala的特點(diǎn)有哪些”吧!
創(chuàng)新互聯(lián)長(zhǎng)期為1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為灌南企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì),灌南網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
Impala 是參照google 的新三篇論文Dremel(大批量數(shù)據(jù)查詢工具)的開源實(shí)現(xiàn),功能類似shark(依賴于hive)和Drill(apache),impala 是clouder 公司主導(dǎo)開發(fā)并開源,基于hive 并使用內(nèi)存進(jìn)行計(jì)算,兼顧數(shù)據(jù)倉庫,具有實(shí)時(shí),批處理,多并發(fā)等優(yōu)點(diǎn)。是使用cdh 的首選PB 級(jí)大數(shù)據(jù)實(shí)時(shí)查詢分析引擎。(Impala 依賴cdh 是完全沒有問題的,官網(wǎng)說可以單獨(dú)運(yùn)行,但是他單獨(dú)運(yùn)行會(huì)出現(xiàn)好多的問題)
Impala與Shark、sparkSQL、Drill等的簡(jiǎn)單比較
Impala起步較早,目前能夠商用的為數(shù)不多的大數(shù)據(jù)查詢引擎之一;
CDH5不支持sparkSQL;
Drill起步晚,尚不成熟;
shark功能和架構(gòu)上同Impala相似,該項(xiàng)目已經(jīng)停止開發(fā)。
Impala特點(diǎn)
基于內(nèi)存進(jìn)行計(jì)算,能夠?qū)B級(jí)數(shù)據(jù)進(jìn)行交互式實(shí)時(shí)查詢/分析;
無需轉(zhuǎn)換為MR,直接讀取HDFS數(shù)據(jù)
C++編寫,LLVM統(tǒng)一編譯運(yùn)行
兼容HiveSQL
具有數(shù)據(jù)倉庫的特性,可對(duì)hive數(shù)據(jù)直接做數(shù)據(jù)分析
支持Data Local
支持列式存儲(chǔ)
支持JDBC/ODBC遠(yuǎn)程訪問
支持sql92標(biāo)準(zhǔn),并具有自己的解析器和優(yōu)化器
Impala核心組件
對(duì)于impala 來講,是沒有主節(jié)點(diǎn)的,而要理解主節(jié)點(diǎn),impala statestore 和catalog server兩個(gè)角色,就具備集群調(diào)節(jié)的功能,根據(jù)以上的特點(diǎn),對(duì)impala 進(jìn)行配置優(yōu)化配置impala 內(nèi)存,每一個(gè)deamon 都需要配置內(nèi)存,因?yàn)檎嬲霾樵児ぷ鞯木褪莇eamon 所在的節(jié)點(diǎn),所以impala 的總內(nèi)存,就是所有deamon 節(jié)點(diǎn)的內(nèi)存之和;如果要在哪臺(tái)機(jī)器上面匯總,就需要在那一臺(tái)機(jī)器上的內(nèi)存調(diào)大一些;我們了解到的,真正提供查詢的是deamon,那么我們連接哪一臺(tái)呢?Impala,你可以連接其中deamon 任何一個(gè)都行,可以根據(jù)自己的需求來,(1)當(dāng)你查詢的量相對(duì)大的時(shí)候,你就連接內(nèi)存大的機(jī)器,(2)當(dāng)每臺(tái)機(jī)器都適合查詢的情況下也可以隨機(jī)找一臺(tái)機(jī)器,自己寫一個(gè)輪詢或者權(quán)重算法;解決高并發(fā)問題
Statestore Daemon
負(fù)責(zé)收集分布在集群中各個(gè)impalad 進(jìn)程的資源信息,各節(jié)點(diǎn)健康狀況、同步節(jié)點(diǎn)信息.
負(fù)責(zé)query 的調(diào)度.(并非絕對(duì),倘若他存在,那就幫忙,若不存在,那就不用他)
對(duì)于一個(gè)正常運(yùn)轉(zhuǎn)的集群,并不是一個(gè)關(guān)鍵進(jìn)程.
Catalog Daemon(1.2 版本之后才加入)
把impala表的metadata分發(fā)到各個(gè)impalad 中,說他是基于hive 的,所以就需要metadata數(shù)據(jù)分到impalad 中,以前沒有此進(jìn)程,就是手動(dòng)來進(jìn)行同步的。雖然之后加入了,但是也沒有那么智能,并不是保證所有的數(shù)據(jù)都能同步,比如你插入一些數(shù)據(jù),他可以把數(shù)據(jù)發(fā)到其他節(jié)點(diǎn),但是比如創(chuàng)建表ddl 語句,建議去手動(dòng)做一下。接收來自statestore 的所有請(qǐng)求,當(dāng)impala deamon節(jié)點(diǎn)插入或者查詢數(shù)據(jù)時(shí)候(數(shù)據(jù)改變的時(shí)候),他把自己的操作結(jié)果匯報(bào)給state deamon,然后state store 請(qǐng)求catelog deamon,告知重新更新元數(shù)據(jù)信息給impalad 中,所以catalog deamon 與statedeamon 放到一臺(tái)機(jī)器上,而且不建議在此機(jī)器上再去安裝impala deamon 進(jìn)程,避免造成提供查詢?cè)斐杉汗芾沓鰡栴}
Impala Daemon(主要來提供查詢)
主要接收查詢請(qǐng)求,接收client、hue、jdbc 或者odbc 請(qǐng)求、query 執(zhí)行并返回給中心協(xié)調(diào)節(jié)點(diǎn)(對(duì)應(yīng)的服務(wù)實(shí)例是impalad)子節(jié)點(diǎn)上的守護(hù)進(jìn)程,負(fù)責(zé)向statestore 保持通信,匯報(bào)工作
Client(shell,jdbc,odbc)發(fā)送請(qǐng)求到impalad 進(jìn)程上,發(fā)送節(jié)點(diǎn)可以是隨機(jī)的,impalad 之間,也有相互通信
Statestore 和catelog 劃到同一節(jié)點(diǎn),目的就是這兩個(gè)進(jìn)程在協(xié)調(diào)工作時(shí)候,避免因網(wǎng)絡(luò)問題造成失敗
Hive metastore 是比較重要的,此時(shí)statestore 和catelog 通信,將數(shù)據(jù)同步到其他節(jié)點(diǎn)
Impalad 最好與hdfsDataNode 在同一節(jié)點(diǎn),這樣能更快速的查詢計(jì)算,然后返回結(jié)果即可(理想狀態(tài)的就是數(shù)據(jù)本地化)
Query planner(查詢解析器)
ii. Query coordinator(中心協(xié)調(diào)節(jié)點(diǎn))
Query executor(查詢執(zhí)行器)
將我們的字符串sql 語句解釋成為執(zhí)行計(jì)劃,
由這個(gè)組件來指定來查詢的主節(jié)點(diǎn)(頭),指定好之后通知其他節(jié)點(diǎn)我的主節(jié)點(diǎn)作用,待你們查詢完成之后的結(jié)果,返回給頭節(jié)點(diǎn)
而做查詢工作的是就是executor
Impalad 里面包含三個(gè)組件
impala 外部shell
-h(--help)幫助-------查看所有命令的幫助文檔
-r(--refresh_after_connect)刷新所有元數(shù)據(jù)(當(dāng)hive 創(chuàng)建數(shù)據(jù)的時(shí)候,你需要刷新到,才能看到hive 元數(shù)據(jù)的改變)整體刷新*---全量刷新,萬不得已才能用;不建議定時(shí)去刷新hive 源數(shù)據(jù),數(shù)據(jù)量太大時(shí)候,一個(gè)刷新,很有可能會(huì)掛掉;創(chuàng)建hive 表,然后刷新。
-B(--delimited)去格式化輸出* 大量數(shù)據(jù)加入格式化,性能受到影響
--output_delimiter=character 指定分隔符與其他命令整合
--print_header 打印列名(去格式化,但是顯示列名字)
-v 查看對(duì)應(yīng)版本(會(huì)有坑)
Impala 的查詢會(huì)以最新版本為準(zhǔn),如果版本不一致,會(huì)造成查詢結(jié)果失敗
mpala-shell 與impala 的版本查看,必須版本一致
-f 執(zhí)行查詢文件*
select name,count(name) as name_count from person group by name--創(chuàng)建包含該sql的文件
--query_file 指定查詢文件(建議sql 語句寫到一行,因?yàn)閟hell 會(huì)讀取文件一行一行的命令)
Impala-shell --query_file=xxx
-i 連接到對(duì)應(yīng)的impalad
--impalad 指定impalad 去執(zhí)行任務(wù)
--fe_port 指定備用端口(通常不用去指定)
-o 保存執(zhí)行結(jié)果到文件***
--output_file 指定輸出文件名
組合應(yīng)用:
impala-shell -B --Print_header -f test.sss -o result.txt Impala-shell -B -f test.xxx -o result.txt
非重要的shell
Impala-shell --user root
Impala-shell -d database(database 指定數(shù)據(jù)庫名稱)
--quiet 不顯示多余信息
impala-shell -q "select * from impala.rstest limit 5">
--user 指定用戶執(zhí)行shell 命令
--ssl 通過ssl 驗(yàn)證方式方式執(zhí)行
--ca_cert 指定第三方用戶證書
--config_file 臨時(shí)指定配置文件
-u 執(zhí)行某一用戶運(yùn)行impala-shell
-p 顯示執(zhí)行計(jì)劃
-q 不進(jìn)入impala-shell 執(zhí)行查詢
-c 忽略錯(cuò)誤語句繼續(xù)執(zhí)行
-d 指定進(jìn)入某一個(gè)數(shù)據(jù)庫
mpala-shell 命令用法:
Impala-shell(內(nèi)部shell)
幫助選項(xiàng)
help
連接到某個(gè)impalad 實(shí)例
connect
刷新某個(gè)表元數(shù)據(jù)
*refresh
刷新元數(shù)據(jù)庫
*invalidate metadata //全量刷新,性能消耗較大
顯示一個(gè)查詢的執(zhí)行計(jì)劃及各步驟信息
*explain
不退出impala-shell 執(zhí)行操作系統(tǒng)命令
shell
shell ls
顯示查詢底層信息(底層執(zhí)行計(jì)劃,用于性能優(yōu)化)
*profile //在查詢完成之后執(zhí)行
執(zhí)行計(jì)劃存儲(chǔ)下來分析
impala-shell -q "select name from person" -p >> impalalog.123
查看StateStore(監(jiān)控管理)
– http://cdh2:25020/
查看Catalog(監(jiān)控管理)
– http://cdh3:25010/
Impala 存儲(chǔ)與分區(qū)
需要注意的是impala 除了全部支持hive 的文件類型,自己還支持parquet 這樣的文件類型,當(dāng)然了,這個(gè)類型并不是impala 自己獨(dú)有的,比如spark sql,shark sql 都支持這樣的類型;Rcfile 本身快一些,但是不如text 才做起來更方便
壓縮方式
添加分區(qū)方式
--1、partitioned by 創(chuàng)建表時(shí),添加該字段指定分區(qū)列表 --2、使用alter table 進(jìn)行分區(qū)的添加和刪除操作 ? create table t_person(id int, name string, age int) partitioned by (type string); ? alter table t_person add partition (type='man'); ? alter table t_person drop partition (type='man'); ? alter table t_person drop partition (sex='man',type='boss');
分區(qū)內(nèi)添加數(shù)據(jù)
insert into t_person partition (type='boss') values (1,'zhangsan',18),(2,'lisi',23) insert into t_person partition (type='coder') values (3,'wangwu',22),(4,'zhaoliu’,28),(5,'tianqi',24)
查詢指定分區(qū)數(shù)據(jù)
select id,name from t_person where type='coder'
impala-SQL、JDBC、性能優(yōu)化
加載數(shù)據(jù):
insert 語句:插入數(shù)據(jù)時(shí)每條數(shù)據(jù)產(chǎn)生一個(gè)數(shù)據(jù)文件,不建議用此方式加載批量數(shù)據(jù)
load data 方式:在進(jìn)行批量插入時(shí)使用這種方式比較合適
來自中間表:此種方式使用于從一個(gè)小文件較多的大表中讀取文件并寫入新的表生產(chǎn)少量的數(shù)據(jù)文件。也可以通過此種方式進(jìn)行格式轉(zhuǎn)換。
空值處理:
impala 將“\n”表示為NULL,在結(jié)合sqoop 使用是注意做相應(yīng)的空字段過濾,也可以使用以下方式進(jìn)行處理:
alter table name set tblproperties (“serialization.null.format”=“null”)
配置:
– impala.driver=org.apache.hive.jdbc.HiveDriver – impala.url=jdbc:hive2://node2:21050/;auth=noSasl – impala.username= – impala.password=
盡量使用PreparedStatement執(zhí)行SQL語句:
性能上PreparedStatement要好于Statement
Statement存在查詢不出數(shù)據(jù)的情況
執(zhí)行計(jì)劃
– 查詢sql執(zhí)行之前,先對(duì)該sql做一個(gè)分析,列出需要完成這一項(xiàng)查詢的
詳細(xì)方案(命令:explain sql、profile)
總結(jié):
1、SQL優(yōu)化,使用之前調(diào)用執(zhí)行計(jì)劃
2、選擇合適的文件格式進(jìn)行存儲(chǔ)
3、避免產(chǎn)生很多小文件(如果有其他程序產(chǎn)生的小文件,可以使用中間
表)
4、使用合適的分區(qū)技術(shù),根據(jù)分區(qū)粒度測(cè)算
5、使用compute stats進(jìn)行表信息搜集
6、網(wǎng)絡(luò)io的優(yōu)化:
a.避免把整個(gè)數(shù)據(jù)發(fā)送到客戶端
b.盡可能的做條件過濾
c.使用limit字句
d.輸出文件時(shí),避免使用美化輸出
7、使用profile輸出底層信息計(jì)劃,在做相應(yīng)環(huán)境優(yōu)化
Impala SQL VS HiveQL
支持?jǐn)?shù)據(jù)類型
INT
TINYINT
SMALLINT
BIGINT
BOOLEAN
CHAR
VARCHAR
STRING
FLOAT
DOUBLE
REAL
DECIMAL
TIMESTAMP
CDH5.5版本以后才支持一下類型
ARRAY
MAP
STRUCT
Complex
此外,Impala不支持HiveQL以下特性:
covar_pop, covar_samp, corr, percentile,percentile_approx, histogram_numeric, collect_set
Impala僅支持:AVG,COUNT,MAX,MIN,SUM
– 多Distinct查詢
– HDF、UDAF
– 可擴(kuò)展機(jī)制,例如:TRANSFORM、自定義文件格式、自定義SerDes
– XML、JSON函數(shù)
– 某些聚合函數(shù):
Impala SQL(和Hive類似)
視圖
不能向impala的視圖進(jìn)行插入操作
insert 表可以來自視圖
– 創(chuàng)建視圖:create view v1 as select count(id) as total from tab_3 ;
– 查詢視圖:select * from v1;
– 查看視圖定義:describe formatted v1
到此,相信大家對(duì)“Impala的特點(diǎn)有哪些”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!