1. 引子
什么是大數據?麥肯錫公司的報告《大數據:創新、競爭和生產力的下一個前沿領域》中給出的大數據定義是:大數據指的是規模超過現有數據庫工具獲取、存儲、管理和分析能力的數據集,并同時強調并不是超過某個特定數量級的數據集才是大數據。
國際數據公司(IDC)用四個維度的特征來定義大數據,即數據集的規模(Volume)、數據流動的速度(Velocity)、數據類型的多少(Variety)和數據價值的大?。╒alue)。
亞馬遜的大數據科學家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源于互聯網行業,在應用于企業計算時,需要進行適配,原因在于互聯網應用和企業計算應用在需求、服務、研發和運維體系方面有本質的不同?;ヂ摼W應用業務邏輯簡單、服務于海量用戶、非固定使用人群、系統的用戶體驗至上、持續交付、能夠快速響應的專業運維;而企業計算應用業務邏輯復雜、有限數量用戶、固定使用人群、系統更強調穩定可靠、版本交付、層級式的技術支持。一時間市面上出現了很多面向企業用戶的Hadoop發行版,以易部署、好配置,以及使用和管理方便為切入點,吸引著企業用戶的眼球。
5.大數據技術的發展趨勢
系統架構的專業化。從當今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級的數據,在不考慮時間維度的前提下,價值密度低的數據可以處理了。在解決了傳統關系型數據庫技術無法處理如此量級的數據之后,業界正在向系統能效要價值。能效問題一方面體現在系統性能上?;ヂ摼W服務強調用戶體驗,原本做不到實時的應用在向實時化靠攏,比如前端系統及業務日志從產生到收集入庫的延遲從1到2天時間進化到10秒以內。傳統企業無法忍受關系數據庫動輒幾十分鐘的查詢分析性能,紛紛求助于性價比更好的技術和產品。這些需求使大數據交互式查詢分析、流式計算、內存計算成為業界研發和應用的新方向。能效問題的另一方面體現在系統功耗和成本上。中科院計算所陳云霽研究員領導研究的專用神經網絡處理器技術,可大幅加速機器學習負載,與通用芯片和GPU相比,計算速度提高幾十倍,功耗只有十分之一,整體能效提高450倍。百度云存儲萬臺定制ARM服務器可節電約25%,存儲密度提升70%,每瓦特計算能力提升34倍(用GPU取代CPU計算),每GB存儲成本降低50%。
個性化服務的需求愈發強烈。個性化對應于互聯網服務的長尾部分,這部分需求在傳統的系統設計中因為復雜性原因是被舍棄的,但正是這部分體現出個性化服務的需求。個性化服務,即系統能夠提供滿足不同個體需求的差異化服務,比如個性化推薦,廣告精準投放等。就拿個性化推薦技術來說,目前已經開始從簡單的商品推薦走向復雜的內容推薦。根據用戶的特性與偏好,推薦內容的特征,以及當時的上下文數據(客戶端設備類型、用戶所處時空數據等),向特定用戶提供個性化的內容推薦服務,內容包括商品(包括電商和零售)、廣告、新聞和資訊等。在移動設備和移動互聯網飛速發展的時代,個性化推薦將成為用戶獲取信息最直接的渠道之一。
價值挖掘的理論和技術亟待發展。對數據進行淺層分析的理論和技術,主要體現在分布式系統和關系型數據庫理論的結合與再創新,目前已經有較大幅度進展。但是,從數據中抽取隱含的信息或者知識,也就是價值挖掘,這方面的理論和技術還比較缺乏。一是缺乏成熟的數據挖掘建模方法和工具,經驗對于挖掘出有價值信息的影響甚大,原始數據與隱含信息之間存在技術缺失,所以“啤酒+尿布”的案例并不是天天都能產生的。二是機器學習和深度學習技術面臨應用問題。與大數據相結合,已經在諸如語音識別、圖像識別、廣告推薦和風險控制等場景中得以初步應用,但這方面的技術和軟件工具成熟度不高,還有很大提升空間。此外,機器學習和深度學習的應用場景還不夠廣泛,這既是機遇也是挑戰。
6. 結語
Hadoop開源軟件自2006年起至今已經走過十個年頭,這對于任何軟件來說生命周期不可謂不長。但是,Hadoop也在經歷來自其他開源黑馬的沖擊。Spark在早期發展階段通過全面兼容Hadoop而借力于后者成熟的生態系統。時至今日,Spark正在挑戰Hadoop的權威,因為Spark已經將發展目標定位在取代Hadoop。Hadoop老矣,尚能飯否? Hadoop的近100位Committer在積極的為Hadoop謀劃未來,讓我們拭目以待吧!我們已經步入數據化全覆蓋的時代,社會生活、各行各業都在因數據而發生巨變。近年來,大數據已成為國家層面的基礎性戰略資源,正日益對全球生產、流通、分配、消費活動以及經濟運行機制、社會生活方式和國家治理能力產生重要影響。推動大數據發展已成為國際社會的行動共識。