您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何分析Impala,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
Impala介紹
Impala 是分布式、大規(guī)模并行處理(MPP)的數(shù)據(jù)庫(kù)引擎,主要有CLI、Statestore、Catalog、Impala組件構(gòu)成如下圖。
Impala架構(gòu)圖.jpg
各組件功能介紹:
Impala:運(yùn)行在DataNode節(jié)點(diǎn)上,由Impalad進(jìn)程表示,它接收客戶端的查詢請(qǐng)求(接收查詢請(qǐng)求的Impalad為Coordinator,Coordinator解析SQL查詢語(yǔ)句,生成查詢計(jì)劃樹(shù),再通過(guò)調(diào)度器把執(zhí)行計(jì)劃分發(fā)給具有相應(yīng)數(shù)據(jù)的其它Impalad進(jìn)行執(zhí)行),讀寫(xiě)數(shù)據(jù),并行執(zhí)行查詢,并把結(jié)果通過(guò)網(wǎng)絡(luò)流式的傳送回給Coordinator,由Coordinator返回給客戶端。同時(shí)Impalad也與State Store保持連接,用于確定哪個(gè)Impalad是健康和可以接受新的工作,并從catalogd服務(wù)接收廣播消息
Statestore:跟蹤集群中impalaed健康狀態(tài)及位置。impalaed啟動(dòng)時(shí)進(jìn)行訂閱注冊(cè)并保持心跳連接。并且每個(gè)impalaed都緩存一份state store信息。所以即便是state store掛掉,impala還是能夠提供服務(wù),只是無(wú)法更新每個(gè)impalaed的狀態(tài)。
Catalog:用于同步impala語(yǔ)句產(chǎn)生的metadata的變化到集群里所有結(jié)點(diǎn)。解決1.2版本之前的問(wèn)題:1)在使用CREATE DATABASE, DROP DATABASE, CREATE TABLE, ALTER TABLE, or DROP TABLE語(yǔ)句后,在其它結(jié)點(diǎn)執(zhí)行查詢前需要先執(zhí)行INVALIDATE METADATA來(lái)更新結(jié)構(gòu)對(duì)象;
2)在一個(gè)節(jié)點(diǎn)上執(zhí)行INSERT 語(yǔ)句后要在其它節(jié)點(diǎn)執(zhí)行REFRESH,以便識(shí)別出新增的數(shù)據(jù)。 但是當(dāng)通過(guò)hive操作后,在impala節(jié)點(diǎn)執(zhí)行查詢時(shí)仍然需要執(zhí)行 REFRESH 或INVALIDATE METADATA。
CLI:提供給用戶查詢的命令行工具,shell(Impala使用python實(shí)現(xiàn))、JDBC、ODBC接口
[編輯] 2、Impala適用場(chǎng)景
1)Impala 非常適合在大的數(shù)據(jù)集上,為交互式探索分析執(zhí)行 SQL。
2)業(yè)務(wù)邏輯相對(duì)簡(jiǎn)單,類(lèi)似于關(guān)系型數(shù)據(jù)庫(kù)。
3)即席查詢(Ad-hoc)是 Impala 的主要應(yīng)用場(chǎng)景,比hive更高效。
4)查詢結(jié)果集不大,必須小于內(nèi)存,否則不會(huì)執(zhí)行成功。
[編輯] 3、Impala與Hive關(guān)系
Impala與Hive都是構(gòu)建在Hadoop之上的數(shù)據(jù)查詢工具各有不同的側(cè)重適應(yīng)面,但從客戶端使用來(lái)看Impala與Hive有很多的共同之處,如數(shù)據(jù)表元數(shù)據(jù)、ODBC/JDBC驅(qū)動(dòng)、SQL語(yǔ)法、靈活的文件格式、存儲(chǔ)資源池等。Impala與Hive在Hadoop中的關(guān)系如下圖所示。
Hive適合于長(zhǎng)時(shí)間的批處理查詢分析,而Impala適合于實(shí)時(shí)交互式SQL查詢,Impala給數(shù)據(jù)分析人員提供了快速實(shí)驗(yàn)、驗(yàn)證想法的大數(shù)據(jù)分析工具??梢韵仁褂胔ive進(jìn)行數(shù)據(jù)轉(zhuǎn)換處理,之后使用Impala在Hive處理后的結(jié)果數(shù)據(jù)集上進(jìn)行快速的數(shù)據(jù)分析。
多數(shù)HiveQL 語(yǔ)句都可以直接在Impala下運(yùn)行,不支持HiveQL中可用的SQL特性如下:
Impala只支持簡(jiǎn)單數(shù)據(jù)類(lèi)型不支持maps, arrays, structs。
可擴(kuò)展機(jī)制(Extensibility mechanisms)例如 TRANSFORM, 自定義文件格式, 或自定義 SerDes; zImpala 1.2
Impala 在 string 和 numeric 或 Boolean 之間不進(jìn)行隱式轉(zhuǎn)換,Impala 在 numeric 或 string 到 timestamp 之間不進(jìn)行隱式轉(zhuǎn)換
XML和JSON函數(shù)
HiveQL 中的某些聚合函數(shù): variance, var_pop, var_samp, stddev_pop, stddev_samp, covar_pop, covar_samp, corr, percentile, percentile_approx, histogram_numeric,collect_set; Impala 支持這些聚合函數(shù): MAX(), MIN(), SUM(), AVG(), COUNT()
等等
Impala&hive.jpg
[編輯] 4、Impala 為什么會(huì)比MapReduce更高效
Impala 與 Hive 和 Pig 不同,因?yàn)樗褂米约旱氖刈o(hù)進(jìn)程,跨集群分布式進(jìn)行查詢。因?yàn)?Impala 不依賴于 MapReduce,它避免了 MapReduce 作業(yè)的啟動(dòng)開(kāi)銷(xiāo),讓 Impala 能實(shí)時(shí)返回結(jié)果。
Impala 不會(huì)把中間結(jié)果存放到硬盤(pán)上,最大限度的使用內(nèi)存及時(shí)通過(guò)網(wǎng)絡(luò)以strem的方式傳遞。
Impala 避免了 MapReduce 啟動(dòng)時(shí)間的耗費(fèi)。對(duì)于交互式查詢,MapReduce 啟動(dòng)時(shí)間變得非常醒目。Impala 以服務(wù)方式運(yùn)行,實(shí)際上沒(méi)有啟動(dòng)時(shí)間
Impala 可以更自然的分散查詢計(jì)劃,而不是不得不納入 map 和 reduce 作業(yè)管道中。這使得 Impala 可以并行處理查詢的多個(gè)步驟,并避免不必要的負(fù)載如排序和混洗(This enables Impala to parallelize multiple stages of a query and avoid overheads such as sort and shuffle when unnecessary)
Impala 生成運(yùn)行時(shí)代碼。Impala 使用 LLVM 為要執(zhí)行的查詢生成匯編碼(assembly code)。個(gè)別查詢不需要為運(yùn)行在可以支持各種查詢的系統(tǒng)而支付代價(jià)(Individual queries do not have to pay the overhead of running on a system that needs to be able to execute arbitrary queries)
Impala 盡可能采用最新的硬件指令。Impala 使用最新的 SSE (SSE4.2) 指令集,某些情況下可以提供巨大的加速效果
Impala 采用更好的 I/O 調(diào)度。Impala 了解塊在硬盤(pán)上的位置,并可以調(diào)度塊處理的順序,以便保證所有硬盤(pán)都繁忙,Impala支持直接數(shù)據(jù)塊讀取和本地代碼計(jì)算checksum。
Impala 專為性能設(shè)計(jì)。Impala 采取以性能為導(dǎo)向的設(shè)計(jì)原則,為此花費(fèi)了大量的時(shí)間,例如緊密內(nèi)部循環(huán)、內(nèi)聯(lián)函數(shù)調(diào)用、最小分支、更好的緩存使用、以及最小內(nèi)存使用等(A lot of time has been spent in designing Impala with sound performance-oriented fundamentals, such as tight inner loops, inlined function calls, minimal branching, better use of cache, and minimal memory usage)
通過(guò)選擇合適的數(shù)據(jù)存儲(chǔ)格式可以得到最好的性能(Impala支持多種存儲(chǔ)格式)
[編輯] 5、內(nèi)存依賴
盡管 Impala 不是內(nèi)存數(shù)據(jù)庫(kù),當(dāng)處理大的表和大的結(jié)果集時(shí), impalad 守護(hù)進(jìn)程會(huì)分配大量的物理內(nèi)存,假如在某一節(jié)點(diǎn)上處理中間結(jié)果集所需的內(nèi)存超出了這一節(jié)點(diǎn)上 Impala 可用的內(nèi)存,查詢會(huì)被取消。
Impala 操作所需的內(nèi)存依賴于幾個(gè)因素:
表的文件格式。相同的數(shù)據(jù),采用不同的文件格式,數(shù)據(jù)文件個(gè)數(shù)也不同。為了分析數(shù)據(jù),根據(jù)每個(gè)文件所采用的壓縮和編碼格式的不同,可能需要不同數(shù)據(jù)量的臨時(shí)內(nèi)存來(lái)進(jìn)行解壓
是否為 SELECT 或 INSERT 操作。例如,查詢 Parquet 表時(shí)需要相對(duì)較少的內(nèi)存,因?yàn)?Impala 以 8MB /塊來(lái)進(jìn)行讀取和解壓縮數(shù)據(jù)。而向 Parquet 表插入數(shù)據(jù)則是內(nèi)存密集型操作,因?yàn)槊恳粋€(gè)數(shù)據(jù)文件(最大大小為 1GB)的數(shù)據(jù)被放在內(nèi)存中,直到編碼、壓縮并寫(xiě)入硬盤(pán)
表是否為分區(qū)表,并且針對(duì)分區(qū)表的查詢是否可以從分區(qū)修剪(partition pruning)中受益
Impala 要求所有包含的 ORDER BY 子句的查詢同時(shí)包含 LIMIT 子句,協(xié)調(diào)節(jié)點(diǎn)需要足夠的內(nèi)存進(jìn)行排序,實(shí)際需要內(nèi)存為L(zhǎng)IMIT數(shù)量 *集群節(jié)點(diǎn)數(shù)所站的空間。
結(jié)果集的大小。當(dāng)中間結(jié)果集在節(jié)點(diǎn)之間傳輸時(shí),傳輸數(shù)據(jù)的數(shù)量依賴于查詢返回列的數(shù)量。select 查詢時(shí)避免用*,只查詢所需要的字段。
使用內(nèi)存的大小并不是跟輸入數(shù)據(jù)集的大小直接相關(guān)。對(duì)于聚合來(lái)說(shuō),使用的內(nèi)存跟分組后的行數(shù)有關(guān)。對(duì)于表連接來(lái)說(shuō),使用的內(nèi)存與除了最大的表之外其他所有表的大小相關(guān),并且 Impala 可以采用在每個(gè)節(jié)點(diǎn)之間拆分大的連接表而不是把整個(gè)表都傳輸?shù)矫總€(gè)節(jié)點(diǎn)的連接策略
使用內(nèi)存的大小并不是跟輸入數(shù)據(jù)集的大小直接相關(guān)。對(duì)于聚合來(lái)說(shuō),使用的內(nèi)存跟分組后的行數(shù)有關(guān)。對(duì)于連接來(lái)說(shuō),使用的內(nèi)存與除了最大的表之外其他所有表的大小相關(guān),并且 Impala 可以采用在每個(gè)節(jié)點(diǎn)之間拆分大的連接表而不是把整個(gè)表都傳輸?shù)矫總€(gè)節(jié)點(diǎn)的連接策略
在唯一或高基數(shù)(high-cardinality)列上的 GROUP BY 操作。Impala 為 GROUP BY 查詢中每一個(gè)不同的值分配一些處理結(jié)構(gòu)(handler structures)。成千上萬(wàn)不同的 GROUP BY 值可能超出內(nèi)存限制
查詢涉及到非常寬、包含上千個(gè)列的表,特別是包含許多 STRING 列的表。因?yàn)?Impala 允許 STRING 值最大不超過(guò) 32 KB,這些查詢的中間結(jié)果集可能需要大量的內(nèi)存分配
Impala 使用 tcmalloc 分配內(nèi)存,一款專為高并發(fā)優(yōu)化的內(nèi)存分頻器。一當(dāng) Impala 分配了內(nèi)存,它保留這些內(nèi)存用于將來(lái)的查詢。因此,空閑時(shí)顯示 Impala 有很高的內(nèi)存使用是很正常的。假如 Impala 檢測(cè)到它將超過(guò)內(nèi)存限制(通過(guò) -mem_limit 啟動(dòng)選項(xiàng)或 MEM_LIMIT 查詢選項(xiàng)定義),它將釋放當(dāng)前查詢不需要的所有內(nèi)存。
關(guān)于如何分析Impala就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。