1. 程式人生 > >大資料技術的回顧與展望 ——寫在Hadoop十週年紀念

大資料技術的回顧與展望 ——寫在Hadoop十週年紀念

今天是Hadoop十歲生日。於2006年1月28日誕生的它改變了企業對資料的儲存、處理和分析的過程,加速了大資料的發展,形成了自己的極其火爆的技術生態圈,並受到非常廣泛的應用。InfoQ策劃了一系列文章,為大家梳理Hadoop這十年的變化,以及技術生態圈狀況,本文是第一篇。

1. 引子

什麼是大資料?麥肯錫公司的報告《大資料:創新、競爭和生產力的下一個前沿領域》中給出的大資料定義是:大資料指的是規模超過現有資料庫工具獲取、儲存、管理和分析能力的資料集,並同時強調並不是超過某個特定數量級的資料集才是大資料。

國際資料公司(IDC)用四個維度的特徵來定義大資料,即資料集的規模(Volume)、資料流動的速度(Velocity)、資料型別的多少(Variety)和資料價值的大小(Value)。

亞馬遜的大資料科學家John Rauser的定義比較直接:“超過單臺計算機處理能力的資料量則為大資料”。

最後我們來看看維基百科上的大資料定義:“Big data is the term for a collection of data sets so large and complex that it becomes difficult to process using on-hand database management tools or traditional data processing applications. ”翻譯成中文的意思是:大資料指的是資料規模龐大和複雜到難以通過現有的資料庫管理工具或者傳統的資料處理應用程式進行處理的資料集合。

上述大資料的概念中無一例外都突出了“大”字。從表面上看,資料規模的增長的確為處理資料帶來了很大的問題。具體來說,在同樣時間內獲取與以前相同價值的資料變得不可為了。換言之,本質問題是資料的價值密度變低了,資料交換速率變慢了,所以催生了很多新型資料處理技術和工具,如Google的GFS和MapReduce,Apache Hadoop生態系統,美國伯克利大學AMPLab的Spark等;出現了對時間敏感程度不同的計算模式,如批式計算模式、互動式計算模式、流計算模式、實時計算模式等。計算模式的差異只是決定獲取價值的技術不同,取決於上層業務需求的不同。實際上,所謂大資料問題的本質應是資料的資產化和服務化,而挖掘資料的內在價值是研究大資料的最終目標。

2. 大資料技術源起Google

Google在搜尋引擎上所獲得的巨大成功,很大程度上是由於採用了先進的大資料管理和處理技術,是針對搜尋引擎所面臨的日益膨脹的海量資料儲存問題以及在此之上的海量資料處理問題而設計的。

Google提出了一整套基於分散式並行叢集方式的基礎架構技術,利用軟體的能力來處理叢集中經常發生的節點失效問題。Google使用的大資料平臺主要包括五個相互獨立又緊密結合在一起的系統:分散式資源管理系統Borg,Google檔案系統(GFS),針對Google應用程式的特點提出的MapReduce 程式設計模式,分散式的鎖機制Chubby以及大規模分散式資料庫BigTable。

Borg是這五個系統中最為神祕的一個,直到2015年Google才在EuroSys 2015上發表了題為“Large-scale cluster management at Google with Borg”的論文。稱Google內部不僅像計算型的應用,比如MapReduce、Pregel等執行在Borg上,儲存類的應用,比如GFS,BigTable和Megastore等也執行在上面,真正做到了批處理作業和長週期服務的混合部署和資源動態排程。得益於此項技術,可以使平均資源利用率達到30%~75%以上,大大高於業界平均水平的6%~12%。

GFS是一個大型的分散式檔案系統,它為Google雲端計算提供海量儲存,並且與Chubby、MapReduce和BigTable等技術結合得十分緊密,處於系統的底層。它的設計受到Google特殊的應用負載和技術環境的影響。相對於傳統的分散式檔案系統,為了達到成本、可靠性和效能的最佳平衡,GFS從多個方面進行了簡化。

MapReduce是處理海量資料的並行程式設計模式,用於大規模資料集的並行運算。MapReduce通過“Map(對映)”和“Reduce(化簡)”這樣兩個簡單的概念來參加運算。使用者只需要提供自己的Map 函式以及Reduce 函式就可以在叢集上進行大規模的分散式資料處理。這一程式設計環境能夠使程式設計人員編寫大規模的並行應用程式時不用考慮叢集的可靠性、可擴充套件性等問題。應用程式編寫人員只需要將精力放在應用程式本身,關於叢集的處理問題則交由平臺來完成。與傳統的分散式程式設計相比,MapReduce封裝了並行處理、容錯處理、本地化計算、負載均衡等細節,具有簡單而強大的介面。正是由於MapReduce具有函數語言程式設計語言和向量程式語言的共性,使得這種程式設計模式特別適合於非結構化和結構化的海量資料的搜尋、挖掘、分析等應用。

Chubby是提供粗粒度鎖服務的一個檔案系統,它基於鬆耦合分散式檔案系統,解決了分散式系統的一致性問題。這種鎖只是一個建議性的鎖而不是強制性的鎖。通過使用Chubby的鎖服務,使用者可以確保資料操作過程中的一致性。GFS使用Chubby來選取一個GFS主伺服器,BigTable使用Chubby指定一個主伺服器並發現、控制與其相關的子表伺服器。

大規模分散式資料庫BigTable是基於GFS和Chubby開發的分散式儲存系統。很多應用程式對於資料的組織是非常有規則的。一般來說,資料庫對於處理格式化的資料還是非常方便的。但是由於關係資料庫要求很強的一致性,很難將其擴充套件到很大的規模。為了處理Google內部大量的格式化以及半格式化資料,Google構建了弱一致性要求的大規模資料庫系統BigTable。BigTablede在很多方面和資料庫類似,但它並不是真正意義上的資料庫。Google包括Web索引、衛星影象資料等在內的很多海量結構化和半結構化資料都是儲存在BigTable中的。

3. Hadoop開啟了大資料時代的大門

Google的技術雖好但不開源。如果沒有Doug Cutting和他的Hadoop開源軟體,我們就看不到如今大資料技術和應用的飛速發展。Doug Cutting主導的Apache Nutch專案是Hadoop軟體的源頭,該專案始於2002年,是Apache Lucene 的子專案之一。當時的系統架構尚無法擴充套件到儲存並處理擁有數十億網頁的網路化資料。Google在2003年於SOSP上公開了描述其分散式檔案系統的論文“The Google File System”,為Nutch提供了及時的幫助。2004年,Nutch的分散式檔案系統(NDFS)開始開發。同年,Google在OSDI上發表了題為“MapReduce: Simplified Data Processing on Large Clusters”的論文,受到啟發的Doug Cutting等人開始實現MapReduce計算框架並與NDFS(Nutch Distributed File System)結合起來,共同支援Nutch的主要演算法。至2006年,它逐漸成為一套完整而獨立的軟體,已經到Yahoo!工作的Doug Cutting將這套大資料處理軟體命名為Hadoop。2008年初,Hadoop成為Apache的頂級專案,除Yahoo!之外在眾多網際網路企業中得到應用。

早期的Hadoop,包括Hadoop v1以及更早之前的版本,主要由兩個核心元件構成:HDFS和MapReduce,其中HDFS是Google GFS的開源版本,MapReduce計算框架實現了由Google工程師提出的MapReduce程式設計模型。還有一些圍繞在Hadoop周圍的開源專案,為完善大資料處理的全生命週期提供了必要的配套和補充。這些軟體常用的有ZooKeeper、Hive、Pig、HBase、Storm、Kafka、Flume、Sqoop、Oozie、Mahout等。2012年5月,Hadoop v2的alpha版本釋出,其中最重要的變化是在Hadoop核心元件中增加了YARN(Yet Another Resource Negotiator)。YARN的出現是為了把計算框架與資源管理徹底分離開,解決Hadoop v1由此帶來的擴充套件性差、單點故障和不能同時支援多種計算框架的問題。YARN對標的恰好就是Google的Borg系統。至此,Hadoop方才能夠與Google的大資料平臺比肩。

一個好的、有生命力的開源生態系統要有一個核心,這個核心要是差異化和非平凡的,還要有廣泛的應用和活躍的社群。Hadoop恰好具備這三個特徵,以Hadoop為核心的大資料開源生態系統逐漸形成,Hadoop也成為自Linux以來最成功的開源軟體,沒有之一。受人民大學資訊學院院長杜小勇老師的委託,我在CNCC 2015上組織了一個名為“大資料開源生態系統”的論壇。論壇邀請了來自網際網路企業、硬體廠商、系統整合商以及學術界的同行分享在大資料開源方面的工作和體會。在最後的Panel環節,討論了為什麼要做開源和怎麼做開源這兩個問題。回答是比較分散的,有開源是唯一選擇的,有拉通產業鏈的,有認為開源是新業態新商業模式的,有認為開源促進技術進步的。總之,在產業鏈不同的環節上的機構做開源的動機和目標自然是不同的,但只有這樣,產業鏈中不同角色都能夠在生態系統中找到自己的位置,這樣的生態系統才是健壯的有生命力的,不是嗎?

4. Hadoop的發展歷史和應用之路

大資料領域第一個吃螃蟹的是網際網路行業。這是因為大資料概念和技術都來源於網際網路企業的老大哥Google的原因。以Hadoop投入實際應用來看:

從2006年到2008年是Hadoop的誕生階段。只有國外少數幾個網際網路巨頭在嘗試,國內網際網路行業在學習這項新技術。2006年,Yahoo!構建100節點規模的Hadoop機群用於Webmap業務。2007年,Yahoo!構建1000節點規模的Hadoop機群。2008年,Yahoo!的Hadoop機群擴充套件到2000節點規模,Facebook貢獻Hive專案到開源社群。

從2008年到2010年是Hadoop的少年階段。在網際網路行業已經開始投入實際應用,應用集中在網頁儲存檢索,日誌處理和使用者行為分析等方面。2009年,Yahoo!使用4000節點的機群執行Hadoop,支援廣告系統和Web搜尋的研究;Facebook使用600節點的機群執行 Hadoop,儲存內部日誌資料,支援其上的資料分析和機器學習;百度用Hadoop處理每週200TB的資料,進行搜尋日誌分析和網頁資料探勘工作。2010年,Facebook的Hadoop機群擴充套件到1000節點;百度用Hadoop每天可處理1PB的資料;中國行動通訊研究院基於Hadoop開發了“大雲”(BigCloud)系統,不但用於相關資料分析,還對外提供服務;淘寶的Hadoop系統達到千臺規模,用於儲存並處理電子商務的交易相關資料。

從2010年到2015年是Hadoop的青年階段。在網際網路行業無不將Hadoop作為大資料計算的標準配置,且應用形式趨於多樣化;企業計算領域開始實踐基於Hadoop的大資料應用;在追求大資料處理能力的同時,也開始思考系統適配性和效率問題。網際網路行業出現了大量資料分析類應用,比如支付寶的交易資料離線分析系統等;用Hadoop與生態系統中的其他軟體一起構成更為複雜的應用系統,比如騰訊的廣點通精準廣告投放系統,電信運營商的基於使用者畫像的精準營銷系統等。除網際網路行業外,出現了網路通訊大資料、金融大資料、交通旅遊大資料、工業製造大資料、醫療健康大資料、社會治理大資料、教育大資料等,大資料理念和技術已經融入各行各業。Hadoop源於網際網路行業,在應用於企業計算時,需要進行適配,原因在於網際網路應用和企業計算應用在需求、服務、研發和運維體系方面有本質的不同。網際網路應用業務邏輯簡單、服務於海量使用者、非固定使用人群、系統的使用者體驗至上、持續交付、能夠快速響應的專業運維;而企業計算應用業務邏輯複雜、有限數量使用者、固定使用人群、系統更強調穩定可靠、版本交付、層級式的技術支援。一時間市面上出現了很多面向企業使用者的Hadoop發行版,以易部署、好配置,以及使用和管理方便為切入點,吸引著企業使用者的眼球。

5. Hadoop in China-國內最早的Hadoop交流平臺

2008年11月23日第一次Hadoop技術沙龍合影

技術推廣是需要平臺的,而好的交流平臺對新技術的落地起到極其重要的作用。2008年,我所在的研究小組想在分散式資料儲存方面做一些研究工作,前期調研階段接觸到Hadoop,其新穎的設計思想得到大家的一致認同,但總是有很多問題和很多想法沒有同道中人一起探討,Hadoop in China大會正是在這樣的形勢下自然形成的,其前身是Hadoop技術沙龍。第一次舉辦沙龍是在2008年11月23日,目的是為了讓更多的Hadoop技術愛好者能夠互相認識,並能夠在一起交流學術和技術心得。會議邀請了Yahoo!、Facebook、百度等網際網路企業的資深技術人員到場講解了Hadoop技術的原理、應用和很多內部技術細節,與會者均認為受益頗豐。現已廣泛使用的RCFile技術研究的最初想法就是在這次沙龍上與原Facebook工程師邵錚的交流和探討中確定的。我們又於2009年5月和2009年11月分別舉辦了第二次技術沙龍和第一屆Hadoop in China大會,後者約有300人到會交流討論Hadoop技術。參會人數在2011年更是突破千人。經過努力,Hadoop in China大會逐漸成為集技術研討、交流和成果展示為一身的綜合性技術交流平臺,為Hadoop技術在國內落地和推廣起到非常重要的作用。

Hadoop in China 2011會場

2012年,中國計算機學會(CCF)於10月正式成立了大資料專家委員會,意在探討大資料的核心科學與技術問題,推動大資料學科方向的建設與發展,同時構建面向大資料產學研用的學術交流、技術合作與資料共享平臺。2013年,大會正式更名為“中國大資料技術大會(Big Data Technology Conference,BDTC)”。至此,Hadoop in China從60人規模的小型沙龍發展到國內大資料領域一年一度最重要的技術會議之一。大會曾邀請到包括Hadoop創始人Doug Cutting,Spark創始人Ion Stoica在內的眾多國際著名專家到會做特邀報告。

6. 大資料技術的發展趨勢

系統架構的專業化。從當今IT技術的發展角度看,提出系統結構上的解決方案是“應用驅動的大資料架構與技術”。也就是說根據具體型別應用的需求,在系統架構和關鍵技術上進行創新。為了降低成本並獲得更好的能效,大資料應用系統越來越趨向扁平化、專用化的系統架構和資料處理技術,逐漸擺脫了傳統的通用技術體系。比如並行資料庫更鮮明的分化為面向事務處理的OLTP類資料庫和麵向分析的OLAP類資料庫等。傳統的應用伺服器、資料庫伺服器和儲存伺服器這樣的典型三層架構受到極大的衝擊。應用開發人員更深入的理解計算機系統結構,“程式” = “演算法” + “資料結構”將逐漸演變成“程式” = “演算法” + “資料結構” + “系統結構”。

大資料生態系統範圍擴大。克隆了Google的GFS和MapReduce的Apache Hadoop自2008年以來逐漸為網際網路企業接納,併成為大資料處理領域的事實標準。但2013年出現的Spark作為一匹黑馬可以說終結了這一神話,大資料技術不再一家獨大。由於應用不同導致Hadoop一套軟體系統不可能滿足所有需求,在全面相容Hadoop的基礎上,Spark通過更多的利用記憶體處理大幅提高系統性能。此外,Scribe、Flume、Kafka、Storm、Drill、Impala、TEZ/Stinger、Presto、Spark/Spark SQL等的出現並不是取代Hadoop,而是擴大了大資料技術生態環境,促使生態環境向良性和完整發展。今後在非易失儲存層次、網路通訊層次、易失儲存層次和計算框架層次還會出現更多、更好和更專用化的軟體系統。

系統整體效能更為使用者重視。在全球網際網路企業的努力下,Hadoop已經可以處理百PB級的資料,在不考慮時間維度的前提下,價值密度低的資料可以處理了。在解決了傳統關係型資料庫技術無法處理如此量級的資料之後,業界正在向系統能效要價值。能效問題一方面體現在系統性能上。網際網路服務強呼叫戶體驗,原本做不到實時的應用在向實時化靠攏,比如前端系統及業務日誌從產生到收集入庫的延遲從1到2天時間進化到10秒以內。傳統企業無法忍受關係資料庫動輒幾十分鐘的查詢分析效能,紛紛求助於價效比更好的技術和產品。這些需求使大資料互動式查詢分析、流式計算、記憶體計算成為業界研發和應用的新方向。能效問題的另一方面體現在系統功耗和成本上。中科院計算所陳雲霽研究員領導研究的專用神經網路處理器技術,可大幅加速機器學習負載,與通用晶片和GPU相比,計算速度提高几十倍,功耗只有十分之一,整體能效提高450倍。百度雲端儲存萬臺定製ARM伺服器可節電約25%,儲存密度提升70%,每瓦特計算能力提升34倍(用GPU取代CPU計算),每GB儲存成本降低50%。

個性化服務的需求愈發強烈。個性化對應於網際網路服務的長尾部分,這部分需求在傳統的系統設計中因為複雜性原因是被捨棄的,但正是這部分體現出個性化服務的需求。個性化服務,即系統能夠提供滿足不同個體需求的差異化服務,比如個性化推薦,廣告精準投放等。就拿個性化推薦技術來說,目前已經開始從簡單的商品推薦走向複雜的內容推薦。根據使用者的特性與偏好,推薦內容的特徵,以及當時的上下文資料(客戶端裝置型別、使用者所處時空資料等),向特定使用者提供個性化的內容推薦服務,內容包括商品(包括電商和零售)、廣告、新聞和資訊等。在移動裝置和移動網際網路飛速發展的時代,個性化推薦將成為使用者獲取資訊最直接的渠道之一。

價值挖掘的理論和技術亟待發展。對資料進行淺層分析的理論和技術,主要體現在分散式系統和關係型資料庫理論的結合與再創新,目前已經有較大幅度進展。但是,從資料中抽取隱含的資訊或者知識,也就是價值挖掘,這方面的理論和技術還比較缺乏。一是缺乏成熟的資料探勘建模方法和工具,經驗對於挖掘出有價值資訊的影響甚大,原始資料與隱含資訊之間存在技術缺失,所以“啤酒+尿布”的案例並不是天天都能產生的。二是機器學習和深度學習技術面臨應用問題。與大資料相結合,已經在諸如語音識別、影象識別、廣告推薦和風險控制等場景中得以初步應用,但這方面的技術和軟體工具成熟度不高,還有很大提升空間。此外,機器學習和深度學習的應用場景還不夠廣泛,這既是機遇也是挑戰。

7. 結語

Hadoop開源軟體自2006年起至今已經走過十個年頭,這對於任何軟體來說生命週期不可謂不長。但是,Hadoop也在經歷來自其他開源黑馬的衝擊。Spark在早期發展階段通過全面相容Hadoop而借力於後者成熟的生態系統。時至今日,Spark正在挑戰Hadoop的權威,因為Spark已經將發展目標定位在取代Hadoop。Hadoop老矣,尚能飯否? Hadoop的近100位Committer在積極的為Hadoop謀劃未來,讓我們拭目以待吧!我們已經步入資料化全覆蓋的時代,社會生活、各行各業都在因資料而發生鉅變。近年來,大資料已成為國家層面的基礎性戰略資源,正日益對全球生產、流通、分配、消費活動以及經濟執行機制、社會生活方式和國家治理能力產生重要影響。推動大資料發展已成為國際社會的行動共識。國務院於2015年8月釋出了《促進大資料發展行動綱要》。綱要明確提出將全面推進我國大資料發展和應用,加快建設資料強國。在這樣的背景下,希望本文有助於讀者理解大資料概念及其技術發展歷史,並促進大資料技術的推廣和應用。