Hive查詢流程分析
在達(dá)川等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站建設(shè)、成都做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作按需制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),全網(wǎng)營銷推廣,成都外貿(mào)網(wǎng)站制作,達(dá)川網(wǎng)站建設(shè)費(fèi)用合理。各個(gè)組件的作用
UI(user interface)(用戶接口):提交數(shù)據(jù)操作的窗口
Driver(引擎):負(fù)責(zé)接收數(shù)據(jù)操作,實(shí)現(xiàn)了會話句柄,并提供基于JDBC / ODBC的execute和fetch API
Metastore(元數(shù)據(jù)):Hive元數(shù)據(jù),存儲所有表信息以及相關(guān)的HDFS文件存儲目錄,一般采用MySQL或者derby存儲
Compiler(編譯器):解析查詢的SQL,生成階段性的執(zhí)行計(jì)劃(包含MapReduce、元數(shù)據(jù)操作)
Execution Engine(執(zhí)行引擎):執(zhí)行compiler生成的執(zhí)行計(jì)劃。該執(zhí)行計(jì)劃是一個(gè)階段的DAG
查詢流程
Step 1:UI調(diào)用的Driver的execute接口
Step 2:Driver為查詢創(chuàng)建會話句柄,并將查詢發(fā)送給compiler以生成執(zhí)行計(jì)劃,
Step 3,4:compiler從metastore獲取相關(guān)的元數(shù)據(jù)
Step 5:檢查元數(shù)據(jù),基于查詢謂詞調(diào)整分區(qū),解析SQL,生成執(zhí)行計(jì)劃
Step 6,6.1,6.2,6.3:由compiler生成的執(zhí)行計(jì)劃是階段的DAG,每個(gè)階段都會涉及到Map/Reduce job,元數(shù)據(jù)的操作或者HDFS文件的操作。
在Map/Reduce階段,執(zhí)行計(jì)劃包含Map操作樹(操作樹在Mappers上執(zhí)行)和reduce操作樹(Reduce 操作樹在 Reducers上執(zhí)行),
Execution Engine 將各個(gè)階段提交個(gè)適當(dāng)?shù)慕M件執(zhí)行。
Step 7, 8 and 9:在每個(gè)任務(wù)(mapper / reducer)中,表或者中間輸出相關(guān)的反序列化器從HDFS讀取行,并通過相關(guān)的操作樹進(jìn)行傳遞。
一旦這些輸出產(chǎn)生,將通過序列化器生成零時(shí)的的HDFS文件(這個(gè)只發(fā)生在只有Map沒有reduce的情況),生成的HDFS零時(shí)文件用于執(zhí)行計(jì)劃后續(xù)的Map/Reduce階段。
對于DML操作,臨時(shí)文件最終移動到表的位置。該方案確保不出現(xiàn)臟數(shù)據(jù)讀取(文件重命名是HDFS中的原子操作),
對于查詢,臨時(shí)文件的內(nèi)容由Execution Engine直接從HDFS讀取,作為從Driver Fetch API的一部分
Presto查詢流程分析
在Map/Reduce階段 執(zhí)?計(jì)劃包含Map操作樹 操作樹在Mappers上執(zhí)? 和reduce
各個(gè)組件的作用
Client(客戶端):提交數(shù)據(jù)操作的窗口
Discovery Server(服務(wù)發(fā)現(xiàn)者):存儲可用的Server列表
Coordinator(協(xié)調(diào)者): 接收數(shù)據(jù)操作,解析SQL語句,生成查詢計(jì)劃,分發(fā)任務(wù)至Worker機(jī)
Connector Plugin(連接插件):連接Storagr,提供元數(shù)據(jù),支持Hive、Kafka、MySQL、MonogoDB、Redis、JMX等數(shù)據(jù)源,可自定義
Worker(執(zhí)行者):執(zhí)行查詢計(jì)劃
查詢流程
1、Client使用HTTP協(xié)議發(fā)送一個(gè)query請求
2、通過Discovery Server發(fā)現(xiàn)可用的Server
3、Coordinator構(gòu)建查詢計(jì)劃(通過Anltr3解析為AST(抽象語法樹),然后通過Connector獲取原始數(shù)據(jù)的Metadata信息,生成分發(fā)計(jì)劃和執(zhí)行計(jì)劃)
4、Coordinator向workers發(fā)送任務(wù)
5、Worker通過Connector插件讀取數(shù)據(jù)
6、Worker在內(nèi)存里執(zhí)行任務(wù)(Worker是純內(nèi)存型計(jì)算引擎)
7、Worker將數(shù)據(jù)返回給Coordinator,匯總之后再響應(yīng)客戶端
Presto與Hive對比
區(qū)別:
MapReduce每個(gè)操作都需要寫磁盤,每個(gè)stage需要等待前一個(gè)stage全部完成才開始執(zhí)行, ?
而Presto將SQL轉(zhuǎn)換為stage,每個(gè)stage又由多個(gè)tasks執(zhí)行,每個(gè)tasks又將分為多個(gè)split。 ?
所有的task是并行的方式執(zhí)行,stage之間數(shù)據(jù)是以pipeline形式流式的執(zhí)行, ?
數(shù)據(jù)之間的傳輸也是通過網(wǎng)絡(luò)以Memory-to-Memory的形式進(jìn)行,沒有磁盤io操作。 ?
這也是Presto性能比Hive快5-10倍的決定性原因
Presto缺點(diǎn)
1、沒有容錯(cuò)能力,當(dāng)一個(gè)query分發(fā)到多個(gè)Worker去執(zhí)行時(shí),當(dāng)有一個(gè)Worker因?yàn)楦鞣N原因查詢失敗,Master感知到之后,整個(gè)query也會失敗
2、內(nèi)存限制,由于Presto是純內(nèi)存計(jì)算,所以當(dāng)內(nèi)存不夠時(shí),Presto并不會將結(jié)果dump到磁盤上,所以查詢也就失敗了(據(jù)說最新版本的Presto已經(jīng)支持寫盤操作)
3、并行查詢,因?yàn)樗械膖ask都是并行執(zhí)行,如果其中一臺Worker因?yàn)楦鞣N原因查詢很慢,那么整個(gè)query就會變得很慢
4、并發(fā)限制,因?yàn)槿珒?nèi)存操作+內(nèi)存限制,能同時(shí)處理的數(shù)據(jù)量有限,因而導(dǎo)致并發(fā)能力不足
Mob項(xiàng)目的應(yīng)用
http://gitlab.code.mob.com/mobdata-plat/dbcloud-api
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。