IMPALA部署和架構(一)
IMPALA部署和架構(一)
一,概要
因公司業務需求,需要一個查詢引擎滿足快速查詢TB級別的數據,所以我們找到了presto和impala,presto在前面講過今天只說impala,impala是cloudera公司主導開發的新型查詢系統,impala沒有在使用緩慢的Hive+MapReduce批處理,而是通過使用商用並行的關系數據庫類似的分布式查詢引擎(由Query Planner,Query Coordinator和Query Exec Engine三部分組成),可以直接從HDFS 或者HBase中用SELECT,JOIN和統計函數查詢數據,從而大大降低了延遲。並且impala在CDH中輕松部署、配置和維護。而且最重要的是impala查詢速度快。這裏使用impala的版本是v2.7.0-cdh5.10.0,cdh版本是Cloudera Enterprise Data Hub Edition 5.10.0 (#85 built by jenkins on 20170120-1038 git: aa0b5cd5eceaefe2f971c13ab657020d96bb842a)。
二,安裝部署
我們是使用CDH安裝部署impala,在安裝前,有的讀者需要了解CDH的安裝。這是官網鏈接:https://www.cloudera.com/documentation/enterprise/5-10-x.html 。都是英文,如果你們想找個中文,這是CDH安裝文檔鏈接(可以直接部署):https://download.csdn.net/download/u012720237/10266663。安裝了CDH,在部署impala是很容易的。選擇集群中的添加服務--》選擇impala--》按照提示一步一步安裝。
三,impala核心組件介紹
Impala Daemon
impala的核心組件是各個節點上面的impalad這個守護進程(Impala Daemon),它負責讀寫數據文件,接收從impala-shell,hue,JDBC,ODBC等接口發送的查詢語句,並行化查詢語句和分發工作任務到impala集群的各個節點上,同時負責把本地計算好的查詢結果發送給協調器節點(coordinator node)。
你可以向運行在任意節點的impala deamon提交查詢,這個節點將會作為這個查詢的協調器(coordinator node),其他節點將會傳輸部分結果集給這個協調器節點。由這個協調器節點構建最終的結果集,所以一般而言在生產建議在不同的節點提交查詢。使得集群負載均衡。
impala deamon不間斷的和statestore進行通信交流,從而確認哪個節點是健康的能接受新的工作任務。它同時接收catalog daemon傳來的廣播消息來更新元數據信息,當集群中的任意節點create,alter,drop任意對象,或者執行insert,load data的時候出發廣播消息。
Impala Statestore
這個組件檢查集群中各個節點上impala daemon的健康狀態,同時不間斷地將結果反饋給impala daemon。這個服務的物理進程名稱是statestored,在整個集群中我們僅需要一個這樣的進程即可,這個進程可以增強集群的健壯性,他的啟停不會影響其他節點的運行的任務,只會影響其他節點是否回向這個可能離線節點發送請求。
Impala Catalog
impala catalog服務獎SQL語句做出的元數據變化通知給集群各個節點,catalog服務的物理進程名稱叫做catalogd,一個集群僅需要這個一個進程。由於他的請求會和statestore daemon交互,所以最好讓statestored 和catalogd放在同一個節點上。
四,Impala 查詢處理過程
impalad分為java前端和c++處理後端,接受客戶端鏈接的Impalad即作為這次查詢的Coordinator,Coordinator通過JNI調用Java前端對用戶的查詢SQL進行分析生成執行計劃樹,不同的操作對應不同的PlanNode,如:SelectNode,ScanNode,SortNode,AggregationNode,HashJoinNode等。
執行計劃樹的每個原子操作由一個PlanFragment表示,通常一條查詢語句由多個Plan Fragment組成, Plan Fragment 0表示執行樹的根,匯聚結果返回給用戶,執行樹的葉子結點一般是Scan操作,分布式並行執行。
五,Impala支持的文件格式
impala可以對Hadoop中大多數格式的文件進行查詢。它能通過create table和insert的方式將一部分格式的數據記載到table中。但值得註意的是,有些格式的數據是無法寫入的。對於無法寫入的數據格式,我們只能通過Hive建表,通過對Hive進行數據的寫入,然後使用impala對這些保存好的數據執行查詢操作。
Impala支持的編碼:
Snappy --推薦的編碼,因為他在壓縮率和解壓速度之間有很好的平衡性,Snappy壓縮速度很快,但是不如GZIP那樣能節約更多的存儲空間。impala不支持Snappy壓縮的text file。
GZIP --壓縮比很高能節約很多存儲空間,impala不支持GZIP壓縮的text file。
Deflate --impala不支持GZIP壓縮的text file.
BZIP2 --impala不支持BZIP2壓縮的text file.
LZO --只用於text file,Impala可以查詢LZO壓縮的text格式數據表,但是不支持insert數據,只能通過Hive來完成數據的insert。
六,Impala優缺點
優點:
1,支持SQL查詢,快速查詢大數據。
2,可以對已有數據進行查詢,減少數據的加載,轉換。
3,多種存儲格式可以選擇。
4,可以和hive配合使用。
缺點:
1,不支持用戶定義函數UDF。
2,不支持text域的全文搜索。
3,不支持Transforms。
4,不支持查詢期的容錯。
5,對內存要求高。
七,命令參數
選項 |
描述 |
---|---|
-B or --delimited |
導致使用分隔符分割的普通文本格式打印查詢結果。當為其他 Hadoop 組件生成數據時有用。對於避免整齊打印所有輸出的性能開銷有用,特別是使用查詢返回大量的結果集進行基準測試的時候。使 用 --output_delimiter 選項指定分隔符。使用 -B 選項常用於保存所有查詢結果到文件裏而不是打印到屏幕上。在 Impala 1.0.1 中添加 |
--print_header |
是否打印列名。整齊打印時是默認啟用。同時使用 -B 選項時,在首行打印列名 |
-o filename or --output_file filename |
保存所有查詢結果到指定的文件。通常用於保存在命令行使用 -q 選項執行單個查詢時的查詢結果。對交互式會話同樣生效;此時你只會看到獲取了多 少行數據,但看不到實際的數據集。當結合使用 -q 和 -o 選項時,會自動將錯誤信息輸出到 /dev/null(To suppress these incidental messages when combining the -q and -o options, redirect stderr to /dev/null)。在 Impala 1.0.1 中添加 |
--output_delimiter=character |
當使用 -B 選項以普通文件格式打印查詢結果時,用於指定字段之間的分隔符(Specifies the character to use as a delimiter between fields when query results are printed in plain format by the -B option)。默認是制表符 tab (‘\t‘)。假如輸出結果中包含了分隔符,該列會被引起且/或轉義( If an output value contains the delimiter character, that field is quoted and/or escaped)。在 Impala 1.0.1 中添加 |
-p or --show_profiles |
對 shell 中執行的每一個查詢,顯示其查詢執行計劃 (與 EXPLAIN 語句輸出相同) 和發生低級故障(low-level breakdown)的執行步驟的更詳細的信息 |
-h or --help |
顯示幫助信息 |
-i hostname or --impalad=hostname |
指定連接運行 impalad 守護進程的主機。默認端口是 21000。你可以連接到集群中運行 impalad 的任意主機。假如你連接到 impalad 實例通過 --fe_port 標誌使用了其他端口,則應當同時提供端口號,格式為 hostname:port |
-q query or --query=query |
從命令行中傳遞一個查詢或其他 shell 命令。執行完這一語句後 shell 會立即退出。限制為單條語句,可以是 SELECT, CREATE TABLE, SHOW TABLES, 或其他 impala-shell 認可的語句。因為無法傳遞 USE 語句再加上其他查詢,對於 default 數據庫之外的表,應在表名前加上數據庫標識符(或者使用 -f 選項傳遞一個包含 USE 語句和其他查詢的文件) |
-f query_file or --query_file=query_file |
傳遞一個文件中的 SQL 查詢。文件內容必須以分號分隔 |
-k or --kerberos |
當連接到 impalad 時使用 Kerberos 認證。如果要連接的 impalad 實例不支持 Kerberos,將顯示一個錯誤 |
-s kerberos_service_name or --kerberos_service_name=name |
Instructs impala-shell to authenticate to a particular impalad service principal. 如何沒有設置 kerberos_service_name ,默認使用 impala。如何啟用了本選項,而試圖建立不支持Kerberos 的連接時,返回一個錯誤(If this option is used in conjunction with a connection in which Kerberos is not supported, errors are returned) |
-V or --verbose |
啟用詳細輸出 |
--quiet |
關閉詳細輸出 |
-v or --version |
顯示版本信息 |
-c |
查詢執行失敗時繼續執行 |
-r or --refresh_after_connect |
建立連接後刷新 Impala 元數據,與建立連接後執行 REFRESH 語句效果相同 |
-d default_db or --database=default_db |
指定啟動後使用的數據庫,與建立連接後使用 USE 語句選擇數據庫作用相同,如果沒有指定,那麽使用 default 數據庫 |
-l | 啟用 LDAP 認證 |
-u | 當使用 -l 選項啟用 LDAP 認證時,提供用戶名(使用短用戶名,而不是完整的 LDAP 專有名稱(distinguished name)) ,shell 會提示輸入密碼 |
IMPALA部署和架構(一)