Twitter程序員推動(dòng)Hadoop開發(fā)進(jìn)程
為了分析海量元數(shù)據(jù)和信息,除了部署Cascading架構(gòu)以簡(jiǎn)化MapReduce部署外,Twitter還選擇了Hadoop。
由于Twitter的數(shù)百萬(wàn)用戶能夠彼此間實(shí)時(shí)分享***新聞、想法、意見,Twitter成為了目前***的通信平臺(tái)。所有這些活動(dòng)都為Twitter帶來(lái)了海量的元數(shù)據(jù),而這些元數(shù)據(jù)對(duì)于Twitter來(lái)說(shuō)是一筆寶貴財(cái)富。為了分析這些包含了1.75億多條日常推文和廣告活動(dòng)的拍字節(jié)級(jí)數(shù)據(jù),Twitter的分析團(tuán)隊(duì)選擇了一個(gè)大型的Hadoop商店。這些分析工作的目標(biāo)是,提升企業(yè)為終端用戶和廣告商所提供服務(wù)的品質(zhì)。
開發(fā)人員利用Hadoop將MapReduce工作定義為允許一個(gè)詳細(xì)規(guī)定的任務(wù),尤其是分析任務(wù),能夠在跨服務(wù)器環(huán)境下對(duì)大量數(shù)據(jù)進(jìn)行分析。對(duì)于Twitter而言,他們所面臨的一個(gè)重大挑戰(zhàn)是,MapReduce編程需要一些除Java之外的特殊技能。開發(fā)人員要重新考慮他們的編碼方式,而這正是Hadoop的優(yōu)勢(shì)所在。此外,Twitter的團(tuán)隊(duì)需要能夠執(zhí)行更為復(fù)雜的計(jì)算、機(jī)器學(xué)習(xí)和線性代數(shù)。對(duì)于普通的開發(fā)者來(lái)說(shuō),不經(jīng)過(guò)必要的培訓(xùn)根本無(wú)法在MapReduce上進(jìn)行編程。
駕馭Hadoop
對(duì)于任何開發(fā)人員來(lái)說(shuō),他們都希望復(fù)雜的統(tǒng)計(jì)功能能夠變得更為易用,為此Twitter選擇了Current的Cascading架構(gòu),因?yàn)樵摷軜?gòu)專門考慮到了創(chuàng)建大數(shù)據(jù)應(yīng)用這一問(wèn)題。
Cascading提供了一個(gè)針對(duì)Hadoop的更高級(jí)的抽象層,允許開發(fā)人員用不同的語(yǔ)言迅捷地創(chuàng)建可在Ruby、Scala等JVM上運(yùn)行的復(fù)雜任務(wù)。這實(shí)際上打破了技術(shù)壁壘,因此讓Twitter的開發(fā)人員能夠更為廣泛地使用Hadoop。
目前,Cascading已經(jīng)能夠讓Twitter的開發(fā)人員用他們自己喜歡的編程語(yǔ)言創(chuàng)建復(fù)雜的數(shù)據(jù)處理工作流,并且能夠很方便地升級(jí)以處理數(shù)以拍計(jì)的數(shù)據(jù)。Twitter已經(jīng)與Concurrent簽署了一份捐贈(zèng)協(xié)議。這樣一來(lái),Twitter的開源貢獻(xiàn)內(nèi)容可以很方便地應(yīng)用在Cascading的項(xiàng)目中。
深度使用
目前Twitter的三個(gè)團(tuán)隊(duì)正在結(jié)合編程語(yǔ)言使用Cascading。具體的分工是,營(yíng)收?qǐng)F(tuán)隊(duì)使用的是Scala,發(fā)布者分析團(tuán)隊(duì)使用的是Clojure,分析團(tuán)隊(duì)使用的是Jython。營(yíng)收?qǐng)F(tuán)隊(duì)可以通過(guò)分析廣告內(nèi)容和Twitter話題等因素幫助廣告商決定哪些廣告收效***,以幫助增加客戶轉(zhuǎn)化率。他們編寫了針對(duì)Cascading的開源Scala應(yīng)用程序接口Scalding,因此開發(fā)人員能夠在Scala上編程并在Hadoop上運(yùn)行它們。
發(fā)布者分析團(tuán)隊(duì)可以幫助網(wǎng)站管理員搞清楚Twitter用戶是如何處理涉及品牌、網(wǎng)站和網(wǎng)絡(luò)公眾人物的信息。他們創(chuàng)建并公布了以Clojure為基礎(chǔ)的語(yǔ)言——Cascalog的源代碼。Cascalog能夠?qū)ascading作為任務(wù)執(zhí)行引擎。
分析團(tuán)隊(duì)的任務(wù)則是理解Twitter用戶的活動(dòng)。他們需要一種方法,以便更容易地對(duì)跟在其他用戶之后的用戶、或是跟在同類用戶之后的用戶進(jìn)行精密而復(fù)雜地分析。他們?yōu)榇藙?chuàng)建了PyCascading,以控制來(lái)自Python的所有數(shù)據(jù)處理工作流。
在這些案例中,Cascading能夠讓開發(fā)人員避開編寫、優(yōu)化和執(zhí)行MapReduce任務(wù)的煩擾。同時(shí),它們還允許每個(gè)團(tuán)隊(duì)高效而迅捷地傳輸他們所需的復(fù)雜信息與功能。這些結(jié)果能夠提供重要的洞察力,幫助Twitter持續(xù)提升自己的服務(wù)品質(zhì)。