淺析大數(shù)據(jù)即席查詢工具 Presto
本文轉(zhuǎn)載自微信公眾號(hào)「匠心獨(dú)運(yùn)維妙維效」,作者侯強(qiáng)。轉(zhuǎn)載本文請(qǐng)聯(lián)系匠心獨(dú)運(yùn)維妙維效公眾號(hào)。
數(shù)據(jù)業(yè)務(wù)現(xiàn)狀
隨著業(yè)務(wù)數(shù)據(jù)量越來越大、數(shù)據(jù)任務(wù)越來越多以及數(shù)據(jù)計(jì)算類型越來越豐富,G行的原有以Hadoop、MPP為核心的數(shù)據(jù)平臺(tái)現(xiàn)有組件表現(xiàn)出了一定的局限性。例如:大數(shù)據(jù)平臺(tái)和數(shù)據(jù)倉庫上任務(wù)總量已經(jīng)達(dá)到了3萬以上,而且還在急劇增長。由于數(shù)據(jù)存放在了不同數(shù)據(jù)源中,對(duì)于需要對(duì)多種數(shù)據(jù)源的查詢?nèi)蝿?wù),首先要進(jìn)行數(shù)據(jù)遷移操作,匯總到MPP或Hadoop后進(jìn)行查詢操作,這一過程耗時(shí)費(fèi)力,已經(jīng)很難滿足用戶快捷數(shù)據(jù)查詢的需求。
而數(shù)據(jù)平臺(tái)建設(shè)的一個(gè)重要目標(biāo)就是滿足用戶方便快捷的使用數(shù)據(jù),用戶不需要關(guān)心數(shù)據(jù)的存放方式,能夠使用標(biāo)準(zhǔn)的數(shù)據(jù)調(diào)用接口,隨時(shí)使用自己關(guān)心的數(shù)據(jù)。為滿足對(duì)上述的多數(shù)據(jù)源無差別的查詢,使用遠(yuǎn)端數(shù)據(jù)完成交互式查詢,G行選擇的方式是Presto。
Presto提供豐富的Connector,通過Connector機(jī)制可以將所連接的數(shù)據(jù)SQL化。Presto的Connector可以連接傳統(tǒng)的RDBMS數(shù)據(jù)庫,也可以連接HBase、Hive等大數(shù)據(jù)的開源軟件,還可以使用FileConnector連接本地文件。有了Connector,可以直接在Presto的客戶端發(fā)起查詢請(qǐng)求,通過Presto解析查詢語句對(duì)不同的數(shù)據(jù)源發(fā)起數(shù)據(jù)查詢。通過Connector的方式,避免了數(shù)據(jù)搬移,節(jié)省了大量的數(shù)據(jù)存儲(chǔ)空間,也避免了時(shí)間消耗。這個(gè)場景非常適合數(shù)據(jù)科學(xué)家對(duì)多種數(shù)據(jù)分析的需求。
Presto架構(gòu)特點(diǎn)
執(zhí)行效率方面,Presto是一個(gè)開源的基于內(nèi)存的分布式SQL查詢的執(zhí)行引擎,可以支持TB到PB級(jí)數(shù)據(jù)量的秒級(jí)到分鐘級(jí)的快速響應(yīng)。在查詢效率方面,比MapReduce的查詢引擎有很大的提升。
Presto查詢引擎是一個(gè)Master-Slave的架構(gòu),由一個(gè)Coordinator節(jié)點(diǎn),多個(gè)Worker節(jié)點(diǎn)組成。Coordinator負(fù)責(zé)解析SQL語句,生成執(zhí)行計(jì)劃,Coordinator將一個(gè)完整的Query,拆分成了多個(gè)Stage,每個(gè)Stage拆分出多個(gè)可以并行的Task,分發(fā)執(zhí)行任務(wù)給Worker節(jié)點(diǎn)執(zhí)行。
Worker節(jié)點(diǎn)負(fù)責(zé)實(shí)際執(zhí)行查詢Task。通過配置外部數(shù)據(jù)源的Connector,部分Task負(fù)責(zé)到外部存儲(chǔ)系統(tǒng)拉取數(shù)據(jù),這部分Task會(huì)先執(zhí)行,之后再執(zhí)行那些負(fù)責(zé)計(jì)算的Task。Worker節(jié)點(diǎn)的數(shù)量影響到Presto執(zhí)行效率,可以通過增加worker節(jié)點(diǎn)的數(shù)量,提升數(shù)據(jù)查詢的的效率。而Coordinator在Presto只有一個(gè),需要使用高可用的部署方法,進(jìn)行災(zāi)備保護(hù)。
Presto是一個(gè)原生的計(jì)算和存儲(chǔ)分離的分布式的SQL框架。Presto負(fù)責(zé)SQL的解析和執(zhí)行,數(shù)據(jù)本身都由外部數(shù)據(jù)源進(jìn)行存儲(chǔ)和維護(hù)。這種存儲(chǔ)和計(jì)算分離的架構(gòu),在進(jìn)行資源擴(kuò)容時(shí)可以分別對(duì)存儲(chǔ)資源和計(jì)算資源進(jìn)行單獨(dú)擴(kuò)容,非常符合當(dāng)今云計(jì)算的架構(gòu)和發(fā)展方向。在設(shè)備選型時(shí),可以針對(duì)IO密集型和CPU密集型采購不同的設(shè)備來滿足需求。
Presto提供了豐富的Connector,可以連接多種流行的數(shù)據(jù)源,比如MySql、Hive、Elasticsearch等。同時(shí)Presto還提供了API接口,開發(fā)人員可以根據(jù)自己的實(shí)際情況開發(fā)自己的應(yīng)用接口。例如openlookeng,這個(gè)軟件提供了高斯數(shù)據(jù)庫的訪問接口,可以完成Hive和高斯數(shù)據(jù)庫之間的跨數(shù)據(jù)源的聯(lián)合查詢。
Presto存在的問題
Presto是一個(gè)完全基于內(nèi)存的SQL計(jì)算框架,在運(yùn)行過程中采用高并發(fā)的查詢方式。當(dāng)處理數(shù)據(jù)過于龐大、SQL需要的內(nèi)存超出了物理服務(wù)器承受能力時(shí),會(huì)出現(xiàn)內(nèi)存溢出。如果需要穩(wěn)定運(yùn)行長時(shí)間的任務(wù),可以使用Hive的SQL引擎。此外,由于Presto在設(shè)計(jì)初始,就是為了OLAP業(yè)務(wù)而進(jìn)行開發(fā),Presto雖然支持delete和insert,但內(nèi)部結(jié)構(gòu)不適合頻繁的數(shù)據(jù)修改操作。
Presto未來發(fā)展
許多企業(yè)在大數(shù)據(jù)建設(shè)道路上都產(chǎn)生了相類似的多數(shù)據(jù)源匯總查詢的問題,數(shù)據(jù)分布在多種數(shù)據(jù)產(chǎn)品中,各種數(shù)據(jù)產(chǎn)品之間沒有直接交互的方法,需要通過數(shù)據(jù)遷移完成數(shù)據(jù)分析工作。而Presto的出現(xiàn),解決了多數(shù)企業(yè)面臨的問題。G行的即席查詢系統(tǒng)正是以Presto技術(shù)為核心構(gòu)建的。隨著Presto應(yīng)用范圍的擴(kuò)大,穩(wěn)定性將隨之不斷的改善,相信會(huì)給各個(gè)企業(yè)在數(shù)據(jù)業(yè)務(wù)方面帶來更多的便利性。