Presto數(shù)據(jù)查詢引擎入門分享(PPT+Q&A)

PPT的內(nèi)容是去年在部門內(nèi)部做的關(guān)于Presto入門分享,主要涉及的內(nèi)容如下圖所示:


PPT目錄

由于簡(jiǎn)書不支持嵌入iframe,所以具體的內(nèi)容放在騰訊文檔上面了:

Presto數(shù)據(jù)查詢引擎入門分享

Presto中有很多的基本概念畅买,只有理解好這些基本概念,我們才能更好的理解Presto,下面是我梳理的各種概念的腦圖:

Presto中的概念詳解.png

接下來(lái)的部分是關(guān)于當(dāng)時(shí)分享后的一些Q&A:

1.Presto的task是如何在Worker節(jié)點(diǎn)間分配的姜挺,按什么策略進(jìn)行分配的?

Presto中task可以分為兩種彼硫,一種是leaf stages的task炊豪,另一種是intermediate stages的task。

(1)leaf stages的task一般都是表掃描拧篮,讀取數(shù)據(jù)词渤,過(guò)濾、解壓串绩、解碼等操作缺虐,這些操作可以進(jìn)行高度的并行化。所以在這一階段源數(shù)據(jù)會(huì)被劃分成盡可能多的splits礁凡,因此每一個(gè)Worker上都可能會(huì)啟動(dòng)一個(gè)task來(lái)處理分配到此Worker上的splits(而每個(gè)split的大小高氮,Worker上可被處理的split個(gè)數(shù)都是由相應(yīng)的參數(shù)來(lái)控制的)。

(2)對(duì)于intermediate stages的中的每一個(gè)stage的task數(shù)把篓,又是基于多種配置來(lái)確定的纫溃,如connector的配置,執(zhí)行計(jì)劃的屬性韧掩,中間數(shù)據(jù)的位置以及集群部署配置等信息來(lái)確定的紊浩。

(3)集群常用的配置信息如下所示:

  • 內(nèi)存管理相關(guān)的參數(shù):
    user memory一般是輸入文件以及執(zhí)行程序時(shí)所使用的內(nèi)存, system memory一般是伴隨著程序執(zhí)行而使用到的內(nèi)存,如shuffle buffers等疗锐。
參數(shù) 示意
query.max-memory-per-node 每個(gè)Worker上一個(gè)query可用的最大user memory坊谁,默認(rèn)JVM max memory * 0.1
query.max-total-memory-per-node 每個(gè)Worker上一個(gè)query可用的最大user memory+system memory,默認(rèn)JVM max memory * 0.3
query.max-memory 整個(gè)集群中一個(gè)query可用的最大user memory滑臊,默認(rèn)20GB
query.max-total-memory 整個(gè)集群中一個(gè)query可用的最大user memory+system memory口芍,默認(rèn)query.max-memory * 2
  • 節(jié)點(diǎn)管理相關(guān)的參數(shù):
參數(shù) 示意
node-scheduler.max-splits-per-node 每個(gè)Worker可被執(zhí)行的最大splits數(shù),默認(rèn)100
node-scheduler.max-pending-splits-per-task 每個(gè)Worker上雇卷,每個(gè)query的stage的task的等待隊(duì)列中可容納的最大splits數(shù)鬓椭,默認(rèn)10
  • hive-connector相關(guān)參數(shù):
參數(shù) 示意
hive.max-split-size hive-split的最大size颠猴,默認(rèn)64M

總的來(lái)說(shuō),一個(gè)stage可以被劃分成多個(gè)task小染,每一個(gè)task只會(huì)運(yùn)行在一個(gè)Worker上(比如我們線上Presto集群有20個(gè)節(jié)點(diǎn)翘瓮,那么一個(gè)query當(dāng)中的一個(gè)stage最多可以有20個(gè)task在并行執(zhí)行)。而每個(gè)stage具體分配多少個(gè)task是和相應(yīng)的配置信息息息相關(guān)的裤翩。

2.Presto處理壓縮文件時(shí)內(nèi)存如何分配资盅,如何處理壓縮文件,內(nèi)存大小如何做預(yù)估踊赠?

Presto是通過(guò)插件的方式來(lái)支持不同類型的文件格式呵扛,如ORC、Parquet以及RCFile等筐带。對(duì)于不同格式的文件會(huì)有對(duì)應(yīng)reader今穿,比如對(duì)于Parquet文件就對(duì)應(yīng)著ParquetReader,ParquetReader主要的作用是通過(guò)hive-connector獲得源數(shù)據(jù)的信息(包括目標(biāo)文件在hdfs的block列表烫堤,以及地址等信息)荣赶,并將數(shù)據(jù)轉(zhuǎn)換成Presto中對(duì)應(yīng)的數(shù)據(jù)對(duì)象(如split凤价,page鸽斟,block等)。接著會(huì)根據(jù)列不同的數(shù)據(jù)類型(int利诺、boolean富蓄、timestamp等)來(lái)讀取相應(yīng)column下的數(shù)據(jù)。在讀取數(shù)據(jù)的時(shí)候慢逾,如果數(shù)據(jù)是壓縮數(shù)據(jù)立倍,首先會(huì)對(duì)數(shù)據(jù)進(jìn)行解壓后再做處理。讀取壓縮數(shù)據(jù)并解壓的代碼如下所示:

PageReader

對(duì)于parquet文件侣滩,其PageHeader類中有記錄當(dāng)前page的壓縮和未壓縮文件大小口注,所以在解壓的時(shí)候,程序知道需要向MemoryPool申請(qǐng)多少內(nèi)存君珠。
PageHeader

Presto的內(nèi)存管理涉及的內(nèi)容比較多寝志,我這里就簡(jiǎn)單做一下介紹,Presto在啟動(dòng)的時(shí)候會(huì)新建一個(gè)MemoryPool策添,所有的任務(wù)都是通過(guò)該MemoryPool去申請(qǐng)內(nèi)存材部,而Presto在執(zhí)行任務(wù)的每一個(gè)階段都會(huì)有相應(yīng)的MemoryContext記錄該階段所使用的的內(nèi)存詳情。而Presto可以通過(guò)各種參數(shù)(如上面提到過(guò)的幾個(gè)內(nèi)存管理相關(guān)的參數(shù))來(lái)限制一個(gè)query在集群中可用的最大內(nèi)存以及一個(gè)query在每一個(gè)Worker上可用的內(nèi)存唯竹,只要當(dāng)前MemoryPool還有可用的內(nèi)存并且申請(qǐng)的內(nèi)存在參數(shù)限制的范圍內(nèi)乐导,相應(yīng)的query就能夠獲得執(zhí)行內(nèi)存。如果query未申請(qǐng)到相應(yīng)的內(nèi)存會(huì)有相應(yīng)的query kill策略進(jìn)行處理浸颓。

3.task掛了物臂,是不是所有的stage都要重新執(zhí)行旺拉,以及Presto是如何做容錯(cuò)的?

目前棵磷,Presto可以通過(guò)低級(jí)別的重試從臨時(shí)的錯(cuò)誤中恢復(fù)(比如账阻,出現(xiàn)請(qǐng)求錯(cuò)誤時(shí),會(huì)發(fā)送多次請(qǐng)求來(lái)獲得結(jié)果)泽本。至于整個(gè)任務(wù)的失敗淘太,需要依靠client端的重新發(fā)起查詢請(qǐng)求。目前规丽,在facebook的生產(chǎn)環(huán)境中是通過(guò)額外的機(jī)制保證某種特定場(chǎng)景下的高可用(如standby coordinators蒲牧、run multiple active cluster以及通過(guò)監(jiān)控系統(tǒng)來(lái)確定失敗的節(jié)點(diǎn)并將節(jié)點(diǎn)移出集群再重新加入集群等)。Presto后續(xù)會(huì)添加對(duì)于長(zhǎng)時(shí)間查詢?nèi)蝿?wù)的容錯(cuò)支持赌莺,如添加checkpointing以及執(zhí)行計(jì)劃子樹的重試(不過(guò)冰抢,就目前更新的版本來(lái)看還未添加該特性)。

4.sql的執(zhí)行計(jì)劃以及結(jié)果等是否緩存艘狭?相同的表不同where條件是否有做緩存挎扰?

該部分未找到可以參考的資料,但是從如下三方面來(lái)看巢音,數(shù)據(jù)應(yīng)該是未做緩存的:
(1)從源碼來(lái)看在Coordinator中不管是生成語(yǔ)法樹遵倦、邏輯執(zhí)行計(jì)劃以及物理執(zhí)行計(jì)劃時(shí),都未看到有做緩存處理官撼;
(2)而在Worker上梧躺,每一個(gè)task都有與之對(duì)應(yīng)的taskid,stage間的不同的task 在進(jìn)行shuffle的時(shí)候都是通過(guò)唯一的taskid來(lái)進(jìn)行數(shù)據(jù)傳輸?shù)陌列澹看稳蝿?wù)請(qǐng)求的taskid各不相同掠哥。并且shuffle請(qǐng)求的client端在接收到了shuffle的server端發(fā)送的結(jié)果數(shù)據(jù)后,會(huì)向server端發(fā)送token確認(rèn)信息秃诵,server端確認(rèn)client端接收到數(shù)據(jù)之后會(huì)刪除結(jié)果數(shù)據(jù)续搀,因此Worker端也未緩存查詢的結(jié)果以及中間結(jié)果數(shù)據(jù)。
(3)在Presto集群比較空閑的情況下菠净,一條sql在Presto中執(zhí)行多次禁舷,查詢時(shí)間以及資源利用情況基本差不多,未見明顯差異嗤练。

參考資料:

[1] Presto: SQL on Everything https://prestosql.io/Presto_SQL_on_Everything.pdf
[2] Presto配置信息 https://prestodb.io/docs/current/admin/properties.html
[3] Presto 0.214版源碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末榛了,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子煞抬,更是在濱河造成了極大的恐慌霜大,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件革答,死亡現(xiàn)場(chǎng)離奇詭異战坤,居然都是意外死亡曙强,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門途茫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)碟嘴,“玉大人,你說(shuō)我怎么就攤上這事囊卜∧壬龋” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵栅组,是天一觀的道長(zhǎng)雀瓢。 經(jīng)常有香客問(wèn)我,道長(zhǎng)玉掸,這世上最難降的妖魔是什么刃麸? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮司浪,結(jié)果婚禮上泊业,老公的妹妹穿的比我還像新娘。我一直安慰自己啊易,他們只是感情好吁伺,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著认罩,像睡著了一般箱蝠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上垦垂,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音牙瓢,去河邊找鬼劫拗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛矾克,可吹牛的內(nèi)容都是我干的页慷。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼胁附,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼酒繁!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起控妻,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤州袒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后弓候,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體郎哭,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡他匪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了夸研。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片邦蜜。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖亥至,靈堂內(nèi)的尸體忽然破棺而出悼沈,到底是詐尸還是另有隱情,我是刑警寧澤姐扮,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布井辆,位于F島的核電站,受9級(jí)特大地震影響溶握,放射性物質(zhì)發(fā)生泄漏杯缺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一睡榆、第九天 我趴在偏房一處隱蔽的房頂上張望萍肆。 院中可真熱鬧,春花似錦胀屿、人聲如沸塘揣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)亲铡。三九已至,卻和暖如春葡兑,著一層夾襖步出監(jiān)牢的瞬間奖蔓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工讹堤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吆鹤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓洲守,卻偏偏與公主長(zhǎng)得像疑务,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子梗醇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容