impala學(xué)習(xí)筆記_第1頁
impala學(xué)習(xí)筆記_第2頁
impala學(xué)習(xí)筆記_第3頁
impala學(xué)習(xí)筆記_第4頁
impala學(xué)習(xí)筆記_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、1 概述1. Impala是參照谷歌新三篇論文Dremel的開源實(shí)現(xiàn),和Shark、Drill功能相似。Impala是Cloudera公司主導(dǎo)開發(fā)并開源?;贖ive并使用內(nèi)存進(jìn)行計(jì)算,兼顧數(shù)據(jù)倉庫,具有實(shí)時(shí)、批處理、多并發(fā)等優(yōu)點(diǎn)。是使用CDH的首選PB級(jí)大數(shù)據(jù)實(shí)時(shí)查詢分析引擎。2. Impala是基于Hive的大數(shù)據(jù)實(shí)時(shí)分析查詢引擎,直接使用Hive的元數(shù)據(jù)庫Metadata,意味著impala元數(shù)據(jù)都存儲(chǔ)在Hive的metastore中。并且impala兼容Hive的sql解析,實(shí)現(xiàn)了Hive的SQL語義的子集,功能還在不斷的完善中。1.1 特點(diǎn)1. 基于內(nèi)存進(jìn)行計(jì)算,能夠?qū)B級(jí)數(shù)據(jù)進(jìn)行

2、交互式實(shí)時(shí)查詢、分析2. 摒棄了MR計(jì)算改用C+編寫,有針對(duì)性的硬件優(yōu)化,例如使用SSE指令3. 兼容HiveSQL,無縫遷移4. 通過使用LLVM來統(tǒng)一編譯運(yùn)行時(shí)代碼,避免了為支持通用編譯而帶來的不必要開銷。5. 支持sql92標(biāo)準(zhǔn),并具有自己的解析器和優(yōu)化器。6. 具有數(shù)據(jù)倉庫的特性,對(duì)hive原有數(shù)據(jù)做數(shù)據(jù)分析。7. 使用了支持Data locality的I/O調(diào)度機(jī)制。8. 支持列式存儲(chǔ)。9. 支持jdbc/odbc遠(yuǎn)程訪問。1.2 缺點(diǎn)1. 基于內(nèi)存進(jìn)行計(jì)算,對(duì)內(nèi)存依賴性較大2. 改用C+編寫,意味著對(duì)C+普通用戶不可見。3. 基于Hive,與Hive共存亡4. 實(shí)踐中impala的

3、分區(qū)數(shù)超過一萬,性能嚴(yán)重下降,容易出現(xiàn)問題。5. 穩(wěn)定性不如Hive。2 配置共分為三種角色:Impala Catalog Server、Impala Daemon、Impala StateStore:注:Impala沒有主節(jié)點(diǎn), Impala Catalog Server和Impala StateStore具有主節(jié)點(diǎn)的功能,可當(dāng)作主節(jié)點(diǎn),Impala Daemon可理解為從節(jié)點(diǎn)Ø 配置impala的內(nèi)存,impala需要內(nèi)存的是Impala Daemon,Impala提供查詢實(shí)例的是 Impala Daemon,Impala的總內(nèi)存就是Impala Daemon的內(nèi)存總和,如果要在

4、某臺(tái)機(jī)器做匯總操作,該臺(tái)機(jī)器內(nèi)存需要大一些Ø Impala的客戶端可以連Impala Daemon的任意一臺(tái)機(jī)器,但做匯總操作可以連內(nèi)存大的Impala Daemon的機(jī)器Ø 如果每臺(tái)機(jī)器的內(nèi)存大小相差不大時(shí),可以輪詢Impala Daemon的機(jī)器,或隨機(jī)進(jìn)行切換(獲取機(jī)器的資源,如果某臺(tái)機(jī)器的資源多,就使用這臺(tái)機(jī)器發(fā)請(qǐng)求),可解決線程的問題和返回?cái)?shù)據(jù)內(nèi)存的問題,也可解決高并發(fā)問題。配置State Store的工作線程數(shù),一般會(huì)給的高一些,給高后會(huì)快一些3 Impala三大核心主件1. Statestore daemon:服務(wù)名StateStore 1) 負(fù)責(zé)收集分布在集

5、群中各個(gè)impalad進(jìn)程的資源信息,各節(jié)點(diǎn)健康狀況、同步節(jié)點(diǎn)信息。檢查Daemon是否活著2) 負(fù)責(zé)query的調(diào)度.3) 對(duì)于一個(gè)正常運(yùn)轉(zhuǎn)的集群,并不是一個(gè)關(guān)鍵進(jìn)程.2. Catalog daemon:服務(wù)名Catalog:1) 把impala表的metadata(也是hive的源數(shù)據(jù)表)分發(fā)到各個(gè)impalad中2) 接收來自statestore的所有請(qǐng)求3. Impala daemon:服務(wù)名impalad:1) 接收client、hue、jdbc或者odbc請(qǐng)求、query 執(zhí)行并返回給中心協(xié)調(diào)節(jié)點(diǎn)2) 子節(jié)點(diǎn)上的守護(hù)進(jìn)程,負(fù)責(zé)向statestore保持通信,匯報(bào)工作注:插入數(shù)據(jù)在D

6、aemon上操作,操作后匯報(bào)給StateStore說明節(jié)點(diǎn)的數(shù)據(jù)變了,StateStore發(fā)請(qǐng)求給Catalog,Catalog去同步源數(shù)據(jù)表,StateStore進(jìn)程和Catalog進(jìn)程經(jīng)常放到一臺(tái)機(jī)器上。建議不要在StateStore進(jìn)程和Catalog進(jìn)程的機(jī)器上安裝Daemon。4 Impala架構(gòu)1 client發(fā)出請(qǐng)求到impalad上(impalad可以是隨機(jī)的),impalad可以相互通信2 catalog與hive的Metastore進(jìn)行通信,隨時(shí)拿源數(shù)據(jù),拿到的源數(shù)據(jù)再分發(fā)到各個(gè)impalad上3 impalad搭建在datanode上,因?yàn)閿?shù)據(jù)就在這上面,可直接進(jìn)行操作,

7、實(shí)現(xiàn)數(shù)據(jù)操作本地化4 impalad包括三個(gè)主鍵:Query Planner:執(zhí)行計(jì)劃的生成,把sql解析成執(zhí)行計(jì)劃Query Coordinator:中心協(xié)調(diào)節(jié)點(diǎn),根據(jù)執(zhí)行計(jì)劃,將執(zhí)行的任務(wù)分發(fā)到每一臺(tái)機(jī)器,Query Executor:具體來執(zhí)行任務(wù)5 impalad執(zhí)行完后,返回給client5 impala shell 外部命令5.1 impala-shell -h 萬能幫助5.2 impala-shell -r刷新整個(gè)元數(shù)據(jù) *說明:不光刷新表結(jié)構(gòu),表內(nèi)的數(shù)據(jù)也會(huì)刷新出來(包括增刪改的數(shù)據(jù)),不建議使用這個(gè)命令定時(shí)刷新,如果表較多時(shí),這個(gè)刷新需要很長時(shí)間,不得以的時(shí)候可以做整體刷新1

8、) 在hive中創(chuàng)建表test2) 在impala中查看表,看不到hive內(nèi)創(chuàng)建的表3) 刷新impala源數(shù)據(jù)4) 查看impala內(nèi)的表5) 刪除impala內(nèi)的test表6) 查看hive內(nèi)的表,發(fā)現(xiàn)hive內(nèi)的表也被刪除了5.3 impala-shell -B去格式化說明:查詢大數(shù)據(jù)量時(shí)可以提高性能子命令:impala-shell -B -print_header 去格式化時(shí)顯示列名impala-shell -B -output_delimiter 指定分隔符1) 查看impala內(nèi)的表,發(fā)現(xiàn)表外面有框,這就是被格式化的2) 去格式化3) 去格式化時(shí)顯示列名在hive內(nèi)查詢數(shù)據(jù)在imp

9、ala內(nèi)查詢5.4 impala-shell -v查看版本查看impala shell的版本注:如果在impala升級(jí)時(shí),發(fā)現(xiàn)impala和impala shell的版本不一致時(shí)說明升級(jí)有問題。5.5 impala-shell -f 執(zhí)行查詢文件 *子命令: -query_file 指定查詢文件1. 執(zhí)行查詢文件$ vi testselect * from test limit 5;$ impala-shell -f test2. 使用子命令查詢文件3. 使用子命令查詢結(jié)果去格式化注:測試些處用impala-shell -B -print_header -f test.sss命令是否能執(zhí)行成功

10、5.6 impala-shell -i連接到對(duì)應(yīng)的impalad說明:如果在某臺(tái)服務(wù)器上未安裝impalad服務(wù),可以連接其他服務(wù)器的impalad服務(wù)子命令:-impalad 指定impalad去執(zhí)行任務(wù)-fe_port 指定備用端口5.7 impala-shell -o保存執(zhí)行結(jié)果到文件 *子命令:-output_file 指定輸出文件名 1. 保存執(zhí)行結(jié)果到文件注:測試些處用impala-shell o result.txt -f test.sss命令是否能執(zhí)行成功2. 查詢結(jié)果去格式化,執(zhí)行test.sss文件,結(jié)果保存在result.ex內(nèi)注:測試些處用impala-shell -B

11、 -print_header o result.txt -f test.sss命令是否能執(zhí)行成功3. 查詢結(jié)果去格式化,不顯示列名,執(zhí)行test.sss文件,結(jié)果保存在result.ex內(nèi)5.8 impala-shell -u 指定某一用戶運(yùn)行impala-shell子命令:-user 指定用戶執(zhí)行shell命令-ssl 通過ssl驗(yàn)證方式方式執(zhí)行-ca_cert 指定第三方用戶證書-config_file 臨時(shí)指定配置文件注:上面未配置kerberos,因此沒有用戶權(quán)限控制5.9 impala-shell -p 顯示執(zhí)行計(jì)劃子命令:-quiet 不顯示多余信息以上先顯示執(zhí)行結(jié)果,再顯示執(zhí)行計(jì)

12、劃如果執(zhí)行計(jì)劃顯示的結(jié)果較多,可以寫到文件中5.10 impala-shell -d指定進(jìn)入某一個(gè)數(shù)據(jù)庫子命令:-database 指定數(shù)據(jù)庫名稱5.11 其他命令Ø q 不進(jìn)入impala-shell執(zhí)行查詢Ø -k 使用kerberos安全加密方式運(yùn)行impala-shellØ -c 忽略錯(cuò)誤語句繼續(xù)執(zhí)行Ø -l 使用LDAP協(xié)議進(jìn)行訪問6 Impala shell 內(nèi)部命令6.1 help幫助選項(xiàng)6.2 version 查看impala版本6.3 connect連接到某個(gè)impalad實(shí)例connect <hostname>在沒在安裝i

13、mpalad的服務(wù)器上執(zhí)行:6.4 refresh刷新某個(gè)表元數(shù)據(jù) *refresh <tablename> /增量刷新1. 在impala內(nèi)新建表,插入數(shù)據(jù)2. 在hive內(nèi)可查看到在imaplaq內(nèi)新建的表,插入數(shù)據(jù)3. 在imapla中查詢,發(fā)現(xiàn)hive內(nèi)新增的記錄查詢不到4. 在imapla中刷新該表6.5 invalidate metadata 全量刷新,性能消耗較大 *1. 外部命令impala-shell -r就是調(diào)用內(nèi)部命令invalidate metadata2. 在hive內(nèi)創(chuàng)建表3. 此時(shí)在impala內(nèi)查不到該表4. 在impala內(nèi)全量刷新5. 此時(shí)在sh

14、ow tables;可以查看在hive內(nèi)創(chuàng)建的表6.6 explain顯示一個(gè)查詢的執(zhí)行計(jì)劃及各步驟信息 *explain <sql> /該sql語句不會(huì)真正執(zhí)行,會(huì)打出一個(gè)簡單的執(zhí)行計(jì)劃,1. 使用執(zhí)行計(jì)劃files 表示讀取幾個(gè)文件, size 表示讀取多大的文件2. 設(shè)置執(zhí)行計(jì)劃的級(jí)別,set explain_level,共四個(gè)級(jí)別,分別是0、1、2、31) 設(shè)置3級(jí),最高級(jí)別2) 設(shè)置0級(jí),最低級(jí)別6.7 shell <shell> 不退出impala-shell執(zhí)行操作系統(tǒng)命令shell <shell>6.8 profile顯示查詢底層信息(底層執(zhí)

15、行計(jì)劃,用于性能優(yōu)化) * profile /在查詢完成之后執(zhí)行外部命令impala-shell -p就是調(diào)用內(nèi)部命令profile可以查看那臺(tái)機(jī)器使用的內(nèi)存7 Impala的管理 Ø Impala StateStore Web UI (hadoop01):StateStore的web界面Ø StateStore:用于統(tǒng)計(jì)集群的健康信息、同步節(jié)點(diǎn)信息Catalog:用于和集群的原數(shù)據(jù)信息進(jìn)行同步顯示有那些數(shù)據(jù)庫,那些表8 Impala存儲(chǔ)Hive能支持的數(shù)據(jù)類型,impala都能支持Parquet:impala支持特別的格式,Parquet格式是列工存儲(chǔ)推薦用sn

16、appy壓縮9 Impala分區(qū)Ø 添加分區(qū)方式: 1、partitioned by:創(chuàng)建表時(shí),添加該字段指定分區(qū)列表 2、使用alter table 進(jìn)行分區(qū)的添加和刪除操作 create table tab_p0(id int, name string, age int ) partitioned by (year int);Ø 向分區(qū)內(nèi)插入數(shù)據(jù):insert into tab_p0 partition (year=2014) values (1,zhangsan,18),(2,lisi,23)insert into tab_p0 partition (year=201

17、5) values (3,wangwu,22),(4,zhaoliu,28),(5,tianqi,24)注:只有Parquet、Text可以使用impala加載數(shù)據(jù),其他格式需要在hive中加載數(shù)據(jù)Ø 查詢指定分區(qū)數(shù)據(jù):select name from tab_p0 where year = 2015;10 Impala sql內(nèi)部表刪除后會(huì)把數(shù)據(jù)都刪了,外部表刪除后不會(huì)刪除數(shù)據(jù)1. 創(chuàng)建表(內(nèi)部表)Ø Impala創(chuàng)建的內(nèi)部表源數(shù)據(jù)也會(huì)寫到hive內(nèi),hdfs目錄為/user/hive/warehouseØ 如何區(qū)分hive和impala創(chuàng)建的表,前面用戶是im

18、pala就是impala創(chuàng)建的表,其他用戶創(chuàng)建的是hive的表Ø 默認(rèn)方式創(chuàng)建表: create table tab_1( id int, value string )Ø 指定存儲(chǔ)方式: 1) create table tab_2( id int, value string )row format delimited fields terminated by 0 (impala1.3.1版本以上支持0 ) stored as textfile;2) create table parquet_table_name(x INT, y STRING) STORED AS PARQ

19、UET;Ø 其他方式創(chuàng)建內(nèi)部表 使用現(xiàn)有表結(jié)構(gòu): create table tab_3 like tab_1; 指定文本表字段分隔符: alter table tab_3 set serdeproperties (serialization.format=,field.delim=,);Ø 插入數(shù)據(jù) 直接插入值方式: insert into tab_2 values (1,hex(hello world); 從其他表插入數(shù)據(jù): insert (overwrite) into tab_3 select * form tab_2 ; 批量導(dǎo)入文件方式方式: load data

20、local inpath /xxx/xxx into table tab_1;2. 創(chuàng)建表(外部表)Ø 默認(rèn)方式創(chuàng)建表: create external table tab_p1( id int, value string ) location /user/xxx.txtØ 指定存儲(chǔ)方式: create external table tab_p2 like parquet_tab /user/xxx/xxx/1.dat partition (year int , month tinyint, day tinyint) location /user/xxx/xxx store

21、d as parquet;3. 視圖Ø 創(chuàng)建視圖: create view v1 as select count(id) as total from tab_3 ;Ø 查詢視圖: select * from v1;Ø 查看視圖定義: describe formatted v1Ø 注意: 1)不能向impala的視圖進(jìn)行插入操作 2)insert 表可以來自視圖(從視圖查詢出數(shù)據(jù)insert到一張表里)11 數(shù)據(jù)文件處理Ø 加載數(shù)據(jù): 1、insert語句:插入數(shù)據(jù)時(shí)每條數(shù)據(jù)產(chǎn)生一個(gè)數(shù)據(jù)文件,不建議用此方式加載批量數(shù)據(jù) 2、load data方式

22、:再進(jìn)行批量插入時(shí)使用這種方式比較合適(在hive中l(wèi)oad data完,在impala中進(jìn)行插入)(parquet在hive中不能創(chuàng)建,在impala中創(chuàng)建parquet格式的表,在hive的一個(gè)表插入數(shù)據(jù),在impala中刷新出來就有兩張表了,一張是impala創(chuàng)建的parguet表,一張是從hive中刷新出來的業(yè)務(wù)數(shù)據(jù),從有數(shù)據(jù)的hive表查詢出來插入到impala的parguet表) 3、來自中間表:此種方式使用于從一個(gè)小文件較多的大表中讀取文件并寫入新的表生產(chǎn)少量的數(shù)據(jù)文件。也可以通過此種方式進(jìn)行格式轉(zhuǎn)換。Ø 空值處理:impala將“n”表示為NULL,在結(jié)合sqoop使

23、用是注意做相應(yīng)的空字段過濾,也可以使用以下方式進(jìn)行處理: alter table name set tblproperties (“serialization.null.format”=“null”)12 impala與hbase整合Impala可以通過Hive外部表方式和HBase進(jìn)行整合,步驟如下:Ø 步驟1:創(chuàng)建hbase 表,向表中添加數(shù)據(jù)create 'test_info', 'info'put 'test_info','1','info:name','zhangsanput '

24、test_info','2','info:name','lisi'Ø 步驟2:創(chuàng)建hive表CREATE EXTERNAL TABLE test_info(key string,name string )STORED by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'WITH SERDEPROPERTIES ("hbase.columns.mapping"=":key,info:name") TBLPROPERTIES

25、("" = "test_info");Ø 步驟3:刷新Impala表invalidate metadata(注:hbase里在增加數(shù)據(jù),impala不能刷新,直接就能查出來)13 impala與jdbc整合package cn.crxy.impala;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;/* * Created by xd on 2015/8/19. */public cla

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論