鄭昀 創(chuàng)建于2014/10/30 最后更新于2014/10/31
一)選型:Shib+Presto
應(yīng)用場(chǎng)景:即席查詢(xún)(Ad-hoc Query)
1.1.即席查詢(xún)的目標(biāo)
使用者是產(chǎn)品/運(yùn)營(yíng)/銷(xiāo)售運(yùn)營(yíng)的數(shù)據(jù)分析師;
要求數(shù)據(jù)分析師掌握查詢(xún)SQL查詢(xún)腳本編寫(xiě)技巧,掌握不同業(yè)務(wù)的數(shù)據(jù)存儲(chǔ)在不同的數(shù)據(jù)集市里;
不管他們的計(jì)算任務(wù)是提交給 數(shù)據(jù)庫(kù) 還是 Hadoop,計(jì)算時(shí)間都可能會(huì)很長(zhǎng),不可能在線(xiàn)等待;
所以,
使用者提交了一個(gè)計(jì)算任務(wù)(PIG/SQL/Hive SQL),控制臺(tái)告知任務(wù)已排隊(duì),給出大致的計(jì)算時(shí)間等友情提示, 這些作業(yè)的權(quán)重較低,
使用者和管理員可以查看排隊(duì)中的計(jì)算任務(wù),包括已執(zhí)行任務(wù)的執(zhí)行時(shí)間、運(yùn)行時(shí)長(zhǎng)和運(yùn)行結(jié)果;
當(dāng)計(jì)算任務(wù)有結(jié)果后,控制臺(tái)界面有通知提示,或者發(fā)郵件提示,使用者可以在線(xiàn)查看和下載數(shù)據(jù)。
1.2.即席查詢(xún)的當(dāng)下技術(shù)選型
圖形交互界面:Shib;
數(shù)據(jù)查詢(xún)引擎:Facebook Presto。
1.3.為什么要更換數(shù)據(jù)查詢(xún)引擎?
基于 MapReduce 的 Hadoop 適合數(shù)據(jù)批處理,但不適合即席查詢(xún)場(chǎng)景?;?InnoDB/MyISAM 存儲(chǔ)引擎的 MySQL 自然也不適合。當(dāng)然我們也觀(guān)察過(guò) InfiniDB/InfoBright 這種列式存儲(chǔ)數(shù)據(jù)庫(kù)引擎(仍基于MySQL),它們更適合基本不再變更的歷史 歸檔數(shù)據(jù),所以不太適合電商應(yīng)用場(chǎng)景。
我們的鷹眼(Tracing)項(xiàng)目就曾折翼在即時(shí)查詢(xún)上,后端的 HBase 扛不住在大數(shù)據(jù)量下的實(shí)時(shí)插入和查詢(xún)。
『Hive 更適合于長(zhǎng)時(shí)間的批處理查詢(xún)分析,Impala、Shark、Stinger和Presto 適用于實(shí)時(shí)交互式SQL查詢(xún),它們給數(shù)據(jù)分析師提供了快速實(shí)驗(yàn)、驗(yàn)證想法的大數(shù)據(jù)分析工具。所以可以先使用 Hive 進(jìn)行數(shù)據(jù)轉(zhuǎn)換處理,之后使用這四個(gè)系統(tǒng)中的一個(gè)在 Hive 處理后的結(jié)果數(shù)據(jù)集上進(jìn)行快速的數(shù)據(jù)分析。
Impala、Shark、Stinger和Presto四個(gè)系統(tǒng)都是類(lèi)SQL實(shí)時(shí)大數(shù)據(jù)查詢(xún)分析引擎,但是它們的技術(shù)側(cè)重點(diǎn)完全不同。而且它們也不是為了替換Hive而生,Hive 在做數(shù)據(jù)倉(cāng)庫(kù)時(shí)是非常有價(jià)值的。這四個(gè)系統(tǒng)與Hive都是構(gòu)建在Hadoop之上的數(shù)據(jù)查詢(xún)工具,各有不同的側(cè)重適應(yīng) 面,但從客戶(hù)端使用來(lái)看它們與Hive有很多的共同之處,如數(shù)據(jù)表元數(shù)據(jù)、Thrift接口、ODBC/JDBC驅(qū)動(dòng)、SQL語(yǔ)法、靈活的文件格式、存儲(chǔ) 資源池等?!弧堕_(kāi)源大數(shù)據(jù)查詢(xún)分析引擎現(xiàn)狀,2014》
最終我們選擇了 Presto。
FaceBook于2013年11月份開(kāi)源了Presto,一個(gè)分布式SQL查詢(xún)引擎,它被設(shè)計(jì)為用來(lái)專(zhuān)門(mén)進(jìn)行高速、實(shí)時(shí)的數(shù)據(jù)分析。它支持標(biāo)準(zhǔn)的ANSI SQL,包括復(fù)雜查詢(xún)、聚合(aggregation)、連接(join)和窗口函數(shù)(window functions)。Presto設(shè)計(jì)了一個(gè)簡(jiǎn)單的數(shù)據(jù)存儲(chǔ)的抽象層,來(lái)滿(mǎn)足在不同數(shù)據(jù)存儲(chǔ)系統(tǒng)(包括HBase、HDFS、Scribe等)之上都可以使用SQL進(jìn)行查詢(xún)。
Presto 簡(jiǎn)化的架構(gòu)如下圖1所示,客戶(hù)端將 SQL 查詢(xún)發(fā)送到 Presto 的協(xié)調(diào)器。協(xié)調(diào)器會(huì)進(jìn)行語(yǔ)法檢查、分析和規(guī)劃查詢(xún)計(jì)劃。調(diào)度器將執(zhí)行的管道組合在一起,將任務(wù)分配給那些離數(shù)據(jù)最近的節(jié)點(diǎn),然后監(jiān)控執(zhí)行過(guò)程??蛻?hù)端從輸 出段中將數(shù)據(jù)取出,這些數(shù)據(jù)是從更底層的處理段中依次取出的。
Presto 的運(yùn)行模型與 Hive 有著本質(zhì)的區(qū)別。Hive 將查詢(xún)翻譯成多階段的 Map-Reduce 任務(wù),一個(gè)接著一個(gè)地運(yùn)行。 每一個(gè)任務(wù)從磁盤(pán)上讀取輸入數(shù)據(jù)并且將中間結(jié)果輸出到磁盤(pán)上。然 而 Presto 引擎沒(méi)有使用 Map-Reduce。它使用了一個(gè)定制的查詢(xún)執(zhí)行引擎和響應(yīng)操作符來(lái)支持SQL的語(yǔ)法。除了改進(jìn)的調(diào)度算法之外,所有的數(shù)據(jù)處理都是在內(nèi)存中進(jìn)行的。不 同的處理端通過(guò)網(wǎng)絡(luò)組成處理的流水線(xiàn)。這樣會(huì)避免不必要的磁盤(pán)讀寫(xiě)和額外的延遲。這種流水線(xiàn)式的執(zhí)行模型會(huì)在同一時(shí)間運(yùn)行多個(gè)數(shù)據(jù)處理段,一旦數(shù)據(jù)可用的 時(shí)候就會(huì)將數(shù)據(jù)從一個(gè)處理段傳入到下一個(gè)處理段。
這樣的方式會(huì)大大的減少各種查詢(xún)的端到端響應(yīng)時(shí)間。
同時(shí),Presto 設(shè)計(jì)了一個(gè)簡(jiǎn)單的數(shù)據(jù)存儲(chǔ)抽象層,來(lái)滿(mǎn)足在不同數(shù)據(jù)存儲(chǔ)系統(tǒng)之上都可以使用 SQL 進(jìn)行查詢(xún)。存儲(chǔ)連接器目前支持除 Hive/HDFS 外,還支持 HBase、Scribe 和定制開(kāi)發(fā)的系統(tǒng)。
圖1. Presto架構(gòu)
1.4.在HUE和Shib之間選擇了后者
HUE 大家可能都聽(tīng)說(shuō)過(guò)。Shib 相對(duì)陌生一些,它是這么介紹自己的:WebUI for query engines: Hive and Presto。
潘高鋒介紹了二者的優(yōu)缺點(diǎn)。
HUE
開(kāi)發(fā)語(yǔ)言:Python
優(yōu) 點(diǎn):Hue 是一個(gè)能夠與 Apache Hadoop 交互的 Web 應(yīng)用程序。一個(gè)開(kāi)源的 Apache Hadoop UI。我們已經(jīng)在生產(chǎn)環(huán)境使用Hue了,而且Hue在管理Hbase/Pig/Hive方面有很大的優(yōu)勢(shì),它還附帶了一個(gè)Oozie的應(yīng)用程序,用于創(chuàng)建 和監(jiān)控工作流程 。
缺點(diǎn):Hue 是一個(gè)比較重的工具,改動(dòng)起來(lái)涉及的東西會(huì)比較多,而且以后每次升級(jí)都可能會(huì)導(dǎo)致我們改動(dòng)的功能要再修改 。
Shib
開(kāi)發(fā)語(yǔ)言:Nodejs
優(yōu)點(diǎn):Shib 通過(guò)簡(jiǎn)單的配置就可以直接操作 hive 和 presto。代碼量比較小,修改起來(lái)工作量少很多 。
缺點(diǎn):對(duì) Nodejs 不熟悉,有學(xué)習(xí)成本 。
最后我們選定了代碼量和開(kāi)發(fā)量相對(duì)較少的 Shib 。
1.5.即席查詢(xún)的界面展示
登錄 shib 后,選擇數(shù)據(jù)倉(cāng)庫(kù) presto-wowo_dw。編寫(xiě) sql 的時(shí)候,可以把表結(jié)構(gòu)的提示框移到一邊,邊寫(xiě)邊參照,如下圖所示。
圖2 邊查詢(xún)邊看數(shù)據(jù)結(jié)構(gòu)
由于所有的查詢(xún)都是異步的,所以可以在“我的查詢(xún)”列表中看到自己的查詢(xún)語(yǔ)句的執(zhí)行狀態(tài)和執(zhí)行結(jié)果,這樣不用自己在一直在查詢(xún)界面等待了,如下圖所示。
圖3 我的查詢(xún)
還可以把自己常用的查詢(xún)語(yǔ)句保存到“書(shū)簽”里,這是一個(gè)很實(shí)用的功能。
接下來(lái)就可以開(kāi)發(fā)SQL查詢(xún)結(jié)果站內(nèi)通知機(jī)制以及更復(fù)雜的用戶(hù)訪(fǎng)問(wèn)權(quán)限控制機(jī)制了。
二)選型:HUE+Oozie
應(yīng)用場(chǎng)景:Hadoop集群計(jì)算任務(wù)調(diào)度和管理平臺(tái)。
2.1.數(shù)據(jù)平臺(tái)跑數(shù)據(jù)所面對(duì)的困難
電商數(shù)據(jù)平臺(tái)的報(bào)表維度有很多種,有總體簡(jiǎn)報(bào)角度、運(yùn)營(yíng)角度、媒體投放角度等,也可以有商品、商戶(hù)、用戶(hù)、競(jìng)品等維度,還有日?qǐng)?bào)、周報(bào)和月報(bào)之分。所以對(duì) 應(yīng)了很多個(gè)計(jì)算任務(wù)。每一個(gè)計(jì)算任務(wù)可以視為一個(gè)工作流,畢竟計(jì)算過(guò)程是很復(fù)雜的、一環(huán)套一環(huán)。那么 HUE+Oozie 就是可視化管理和調(diào)度這些工作流的。
沒(méi)有 Oozie 之前是什么樣?
一,計(jì)算腳本被配置為定時(shí)任務(wù),跑飛了只能從海量日志中大海撈針,不知道斷在哪兒,只能手動(dòng)清數(shù)據(jù)從頭再跑。任務(wù)計(jì)算時(shí)間特別長(zhǎng),不知道當(dāng)前跑到哪一步了,還需要多久能跑完。
二,難以精確控制任務(wù)A跑完了才能跑任務(wù)B,只能在不同定時(shí)任務(wù)之間留足夠長(zhǎng)的時(shí)間間隔,缺乏彈性。
2.2.Oozie是什么
Oozie是一種 Java Web 應(yīng)用程序,它運(yùn)行在 Tomcat 中,并使用數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)以下內(nèi)容:工作流定義、當(dāng)前運(yùn)行的工作流實(shí)例(包括實(shí)例的狀態(tài)和變量)。
我們最欣賞它的三點(diǎn):
- Oozie允許失敗的工作流從任意點(diǎn)重新運(yùn)行,這對(duì)于處理工作流中由于前一個(gè)耗時(shí)活動(dòng)而出現(xiàn)瞬態(tài)錯(cuò)誤的情況非常有用。
- 工作流執(zhí)行過(guò)程可視化。
- 工作流的每一步的日志、錯(cuò)誤信息都可以點(diǎn)擊查看,并實(shí)時(shí)滾動(dòng),便于排查問(wèn)題。
2.3.還是看截圖吧
先選擇HUE導(dǎo)航欄上的“Oozie Editor/Dashboard”,看到默認(rèn)面板:
圖5 oozie默認(rèn)面板
點(diǎn)擊某個(gè)工作流,進(jìn)入詳情頁(yè):
圖6 工作流詳情頁(yè)
一個(gè)工作流的定義如下圖7所示,XML格式的 hPDL。hPDL是一種很簡(jiǎn)潔的語(yǔ)言,只會(huì)使用少數(shù)流程控制和動(dòng)作節(jié)點(diǎn)??刂乒?jié)點(diǎn)會(huì)定義執(zhí)行的流程,并包含工作流的起點(diǎn)和終點(diǎn)(start、end和 fail節(jié)點(diǎn))以及控制工作流執(zhí)行路徑的機(jī)制(decision、fork和join節(jié)點(diǎn))。
圖7 工作流定義
現(xiàn)在,數(shù)據(jù)平臺(tái)的各種計(jì)算任務(wù)都遷移到 Oozie 中,按照 hPDL 語(yǔ)言格式一一重新定義。
三)總結(jié)一下數(shù)據(jù)中心的各種技術(shù)選型
羅列如下,不再解釋?zhuān)?/div>
Apache Hadoop/Hive/HBase
Apache Pig
Flume/Kafka/Storm/Sqoop/awk
Facebook Presto
MySQL
HUE/Shib
Oozie
-over-
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。