1. 程式人生 > >IMPALA部署和架構(一)

IMPALA部署和架構(一)

單個 速查 cdh5 幫助 refresh 錯誤信息 load 基準 構建

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部署和架構(一)