目前,大數據領域每一年都會涌現出大量新的技術,成爲大數據獲取、存儲、處理分析或可視化的有效手段。大數據技術可以將大規模數據中隱藏的信息和知識挖掘出來,爲人類社會經濟活動提供依據,提升各個領域的運行效率,甚至整個社會經濟的集約化程度。算法
圖1展現了一個典型的大數據技術棧。底層是基礎設施,涵蓋計算資源、內存與存儲和網絡互聯,具體表現爲計算節點、集羣、機櫃和數據中心。在此之上是數據存儲和管理,包括文件系統、數據庫和相似YARN的資源管理系統。而後是計算處理層,如hadoop、MapReduce和Spark,以及在此之上的各類不一樣計算範式,如批處理、流處理和圖計算等,包括衍生出編程模型的計算模型,如BSP、GAS 等。數據分析和可視化基於計算處理層。分析包括簡單的查詢分析、流分析以及更復雜的分析(如機器學習、圖計算等)。查詢分析多基於表結構和關係函數,流分析基於數據、事件流以及簡單的統計分析,而複雜分析則基於更復雜的數據結構與方法,如圖、矩陣、迭代計算和線性代數。通常意義的可視化是對分析結果的展現。可是經過交互式可視化,還能夠探索性地提問,使分析得到新的線索,造成迭代的分析和可視化。基於大規模數據的實時交互可視化分析以及在這個過程當中引入自動化的因素是目前研究的熱點。數據庫
有2個領域垂直打通了上述的各層,須要總體、協同地看待。一是編程和管理工具,方向是機器經過學習實現自動最優化、儘可能無需編程、無需複雜的配置。另外一個領域是數據安全,也是貫穿整個技術棧。除了這兩個領域垂直打通各層,還有一些技術方向是跨了多層的,例如「內存計算」事實上覆蓋了整個技術棧。編程
大數據的基本處理流程與傳統數據處理流程並沒有太大差別,主要區別在於:因爲大數據要處理大量、非結構化的數據,因此在各處理環節中均可以採用並行處理。目前,Hadoop、MapReduce和Spark等分佈式處理方式已經成爲大數據處理各環節的通用處理方法。安全
Hadoop是一個可以讓用戶輕鬆架構和使用的分佈式計算平臺。用戶能夠輕鬆地在Hadoop上開發和運行處理海量數據的應用程序。Hadoop 是一個數據管理系統,做爲數據分析的核心,聚集告終構化和非結構化的數據,這些數據分佈在傳統的企業數據棧的每一層。Hadoop也是一個大規模並行處理框架,擁有超級計算能力,定位於推進企業級應用的執行。Hadoop又是一個開源社區,主要爲解決大數據的問題提供工具和軟件。雖然Hadoop提供了不少功能,但仍然應該把它歸類爲多個組件組成的Hadoop生態圈,這些組件包括數據存儲、數據集成、數據處理和其餘進行數據分析的專門工具。圖2 展現了Hadoop 的生態系統,主要由HDFS、MapReduce、Hbase、Zookeeper、Oozie、Pig、Hive等核心組件構成,另外還包括Sqoop、Flume等框架,用來與其餘企業融合。同時,Hadoop 生態系統也在不斷增加,新增Mahout、Ambari、Whirr、BigTop 等內容,以提供更新功能。服務器
低成本、高可靠、高擴展、高有效、高容錯等特性讓Hadoop成爲最流行的大數據分析系統,然而其賴以生存的HDFS 和MapReduce 組件卻讓其一度陷入困境——批處理的工做方式讓其只適用於離線數據處理,在要求實時性的場景下毫無用武之地。所以,各類基於Hadoop的工具應運而生。爲了減小管理成本,提高資源的利用率,有當下衆多的資源統一管理調度系統,例如Twitter 的Apache Mesos、Apache 的YARN、Google 的Borg、騰訊搜搜的Torca、Facebook Corona(開源)等。Apache Mesos是Apache孵化器中的一個開源項目,使用ZooKeeper實現容錯複製,使用Linux Containers 來隔離任務,支持多種資源計劃分配(內存和CPU)。提供高效、跨分佈式應用程序和框架的資源隔離和共享,支持Hadoop、MPI、Hypertable、Spark 等。YARN 又被稱爲MapReduce 2.0,借鑑Mesos,YARN 提出了資源隔離解決方案Container,提供Java 虛擬機內存的隔離。對比MapReduce 1.0,開發人員使用ResourceManager、ApplicationMaster與NodeManager代替了原框架中核心的JobTracker 和TaskTracker。在YARN平臺上能夠運行多個計算框架,如MR、Tez、Storm、Spark等。網絡
基於業務對實時的需求,有支持在線處理的Storm、Cloudar Impala、支持迭代計算的Spark 及流處理框架S4。Storm是一個分佈式的、容錯的實時計算系統,由BackType開發,後被Twitter捕獲。Storm屬於流處理平臺,多用於實時計算並更新數據庫。Storm也可被用於「連續計算」(Continuous Computation),對數據流作連續查詢,在計算時就將結果以流的形式輸出給用戶。它還可被用於「分佈式RPC」,以並行的方式運行昂貴的運算。Cloudera Impala是由Cloudera開發,一個開源的Massively Parallel Processing(MPP)查詢引擎。與Hive 相同的元數據、SQL語法、ODBC 驅動程序和用戶接口(HueBeeswax),能夠直接在HDFS 或HBase 上提供快速、交互式SQL 查詢。Impala是在Dremel的啓發下開發的,再也不使用緩慢的Hive+MapReduce 批處理,而是經過與商用並行關係數據庫中相似的分佈式查詢引擎(由Query Planner、Query Coordinator 和Query Exec Engine這3部分組成),能夠直接從HDFS 或者HBase 中用SELECT、JOIN 和統計函數查詢數據,從而大大下降了延遲。數據結構
Hadoop社區正努力擴展示有的計算模式框架和平臺,以便解決現有版本在計算性能、計算模式、系統構架和處理能力上的諸多不足,這正是Hadoop2.0 版本「 YARN」的努力目標。各類計算模式還能夠與內存計算模式混合,實現高實時性的大數據查詢和計算分析。混合計算模式之集大成者當屬UC Berkeley AMP Lab 開發的Spark生態系統,如圖3所示。Spark 是開源的類Hadoop MapReduce的通用的數據分析集羣計算框架,用於構建大規模、低延時的數據分析應用,創建於HDFS之上。Spark提供強大的內存計算引擎,幾乎涵蓋了全部典型的大數據計算模式,包括迭代計算、批處理計算、內存計算、流式計算(Spark Streaming)、數據查詢分析計算(Shark)以及圖計算(GraphX)。Spark 使用Scala 做爲應用框架,採用基於內存的分佈式數據集,優化了迭代式的工做負載以及交互式查詢。與Hadoop 不一樣的是,Spark 和Scala 緊密集成,Scala 像管理本地collective 對象那樣管理分佈式數據集。Spark支持分佈式數據集上的迭代式任務,實際上能夠在Hadoop文件系統上與Hadoop一塊兒運行(經過YARN、Mesos等實現)。另外,基於性能、兼容性、數據類型的研究,還有Shark、Phoenix、Apache Accumulo、Apache Drill、Apache Giraph、Apache Hama、Apache Tez、Apache Ambari 等其餘開源解決方案。預計將來至關長一段時間內,主流的Hadoop平臺改進後將與各類新的計算模式和系統共存,並相互融合,造成新一代的大數據處理系統和平臺。架構
圖3Spark生態系統框架
在大數據的生命週期中,數據採集處於第一個環節。根據MapReduce產生數據的應用系統分類,大數據的採集主要有4種來源:管理信息系統、Web信息系統、物理信息系統、科學實驗系統。對於不一樣的數據集,可能存在不一樣的結構和模式,如文件、XML 樹、關係表等,表現爲數據的異構性。對多個異構的數據集,須要作進一步集成處理或整合處理,未來自不一樣數據集的數據收集、整理、清洗、轉換後,生成到一個新的數據集,爲後續查詢和分析處理提供統一的數據視圖。針對管理信息系統中異構數據庫集成技術、Web 信息系統中的實體識別技術和DeepWeb集成技術、傳感器網絡數據融合技術已經有不少研究工做,取得了較大的進展,已經推出了多種數據清洗和質量控制工具,例如,美國SAS公司的Data Flux、美國IBM 公司的Data Stage、美國Informatica 公司的Informatica Power Center。機器學習
傳統的數據存儲和管理以結構化數據爲主,所以關係數據庫系統(RDBMS)能夠一統天下知足各種應用需求。大數據每每是半結構化和非結構化數據爲主,結構化數據爲輔,並且各類大數據應用一般是對不一樣類型的數據內容檢索、交叉比對、深度挖掘與綜合分析。面對這類應用需求,傳統數據庫不管在技術上仍是功能上都難覺得繼。所以,近幾年出現了oldSQL、NoSQL 與NewSQL 並存的局面。整體上,按數據類型的不一樣,大數據的存儲和管理採用不一樣的技術路線,大體能夠分爲3類。第1類主要面對的是大規模的結構化數據。針對這類大數據,一般採用新型數據庫集羣。它們經過列存儲或行列混合存儲以及粗粒度索引等技術,結合MPP(Massive Parallel Processing)架構高效的分佈式計算模式,實現對PB 量級數據的存儲和管理。這類集羣具備高性能和高擴展性特色,在企業分析類應用領域已得到普遍應用;第2類主要面對的是半結構化和非結構化數據。應對這類應用場景,基於Hadoop開源體系的系統平臺更爲擅長。它們經過對Hadoop生態體系的技術擴展和封裝,實現對半結構化和非結構化數據的存儲和管理;第3類面對的是結構化和非結構化混合的大數據,所以採用MPP 並行數據庫集羣與Hadoop 集羣的混合來實現對百PB 量級、EB量級數據的存儲和管理。一方面,用MPP 來管理計算高質量的結構化數據,提供強大的SQL和OLTP型服務;另外一方面,用Hadoop實現對半結構化和非結構化數據的處理,以支持諸如內容檢索、深度挖掘與綜合分析等新型應用。這類混合模式將是大數據存儲和管理將來發展的趨勢。
計算模式的出現有力推進了大數據技術和應用的發展,使其成爲目前大數據處理最爲成功、最廣爲接受使用的主流大數據計算模式。然而,現實世界中的大數據處理問題複雜多樣,難以有一種單一的計算模式能涵蓋全部不一樣的大數據計算需求。研究和實際應用中發現,因爲MapReduce主要適合於進行大數據線下批處理,在面向低延遲和具備複雜數據關係和複雜計算的大數據問題時有很大的不適應性。所以,近幾年來學術界和業界在不斷研究並推出多種不一樣的大數據計算模式。
所謂大數據計算模式,即根據大數據的不一樣數據特徵和計算特徵,從多樣性的大數據計算問題和需求中提煉並創建的各類高層抽象(abstraction)或模型(model)。例如,MapReduce 是一個並行計算抽象,加州大學伯克利分校著名的Spark系統中的「分佈內存抽象RDD」,CMU 著名的圖計算系統GraphLab 中的「圖並行抽象」(Graph Parallel Abstraction)等。傳統的並行計算方法,主要從體系結構和編程語言的層面定義了一些較爲底層的並行計算抽象和模型,但因爲大數據處理問題具備不少高層的數據特徵和計算特徵,所以大數據處理須要更多地結合這些高層特徵考慮更爲高層的計算模式。
根據大數據處理多樣性的需求和以上不一樣的特徵維度,目前出現了多種典型和重要的大數據計算模式。與這些計算模式相適應,出現了不少對應的大數據計算系統和工具。因爲單純描述計算模式比較抽象和空洞,所以在描述不一樣計算模式時,將同時給出相應的典型計算系統和工具,如表1所示,這將有助於對計算模式的理解以及對技術發展示狀的把握,並進一步有利於在實際大數據處理應用中對合適的計算技術和系統工具的選擇使用。
表1典型大數據計算模式
在大數據時代,人們迫切但願在由普通機器組成的大規模集羣上實現高性能的以機器學習算法爲核心的數據分析,爲實際業務提供服務和指導,進而實現數據的最終變現。與傳統的在線聯機分析處理OLAP不一樣,對大數據的深度分析主要基於大規模的機器學習技術,通常而言,機器學習模型的訓練過程能夠歸結爲最優化定義於大規模訓練數據上的目標函數而且經過一個循環迭代的算法實現,如圖4所示。於是與傳統的OLAP相比較,基於機器學習的大數據分析具備本身獨特的特色。
(1)迭代性:因爲用於優化問題一般沒有閉式解,於是對模型參數肯定並不是一次可以完成,須要循環迭代屢次逐步逼近最優值點。
(2)容錯性:機器學習的算法設計和模型評價容忍非最優值點的存在,同時屢次迭代的特性也容許在循環的過程當中產生一些錯誤,模型的最終收斂不受影響。
(3)參數收斂的非均勻性:模型中一些參數通過少數幾輪迭代後便再也不改變,而有些參數則須要很長時間才能達到收斂。
這些特色決定了理想的大數據分析系統的設計和其餘計算系統的設計有很大不一樣,直接應用傳統的分佈式計算系統應用於大數據分析,很大比例的資源都浪費在通訊、等待、協調等非有效的計算上。
傳統的分佈式計算框架MPI(message passing interface,信息傳遞接口)雖然編程接口靈活功能強大,但因爲編程接口複雜且對容錯性支持不高,沒法支撐在大規模數據上的複雜操做,研究人員轉而開發了一系列接口簡單容錯性強的分佈式計算框架服務於大數據分析算法,以MapReduce、Spark和參數服務器ParameterServer等爲表明。
分佈式計算框架MapReduce將對數據的處理歸結爲Map和Reduce兩大類操做,從而簡化了編程接口而且提升了系統的容錯性。可是MapReduce受制於過於簡化的數據操做抽象,並且不支持循環迭代,於是對複雜的機器學習算法支持較差,基於MapReduce的分佈式機器學習庫Mahout須要將迭代運算分解爲多個連續的Map 和Reduce 操做,經過讀寫HDFS文件方式將上一輪次循環的運算結果傳入下一輪完成數據交換。在此過程當中,大量的訓練時間被用於磁盤的讀寫操做,訓練效率很是低效。爲了解決MapReduce上述問題,Spark 基於RDD 定義了包括Map 和Reduce在內的更加豐富的數據操做接口。不一樣於MapReduce 的是Job 中間輸出和結果能夠保存在內存中,從而再也不須要讀寫HDFS,這些特性使得Spark能更好地適用於數據挖掘與機器學習等須要迭代的大數據分析算法。基於Spark實現的機器學習算法庫MLLIB已經顯示出了其相對於Mahout 的優點,在實際應用系統中獲得了普遍的使用。
近年來,隨着待分析數據規模的迅速擴張,分析模型參數也快速增加,對已有的大數據分析模式提出了挑戰。例如在大規模話題模型LDA 中,人們指望訓練獲得百萬個以上的話題,於是在訓練過程當中可能須要對上百億甚至千億的模型參數進行更新,其規模遠遠超出了單個節點的處理能力。爲了解決上述問題,研究人員提出了參數服務器(Parameter Server)的概念,如圖5所示。在參數服務器系統中,大規模的模型參數被集中存儲在一個分佈式的服務器集羣中,大規模的訓練數據則分佈在不一樣的工做節點(worker)上,這樣每一個工做節點只須要保存它計算時所依賴的少部分參數便可,從而有效解決了超大規模大數據分析模型的訓練問題。目前參數服務器的實現主要有卡內基梅隆大學的Petuum、PSLit等。
在大數據分析的應用過程當中,可視化經過交互式視覺表現的方式來幫助人們探索和理解複雜的數據。可視化與可視分析可以迅速和有效地簡化與提煉數據流,幫助用戶交互篩選大量的數據,有助於使用者更快更好地從複雜數據中獲得新的發現,成爲用戶瞭解複雜數據、開展深刻分析不可或缺的手段。大規模數據的可視化主要是基於並行算法設計的技術,合理利用有限的計算資源,高效地處理和分析特定數據集的特性。一般狀況下,大規模數據可視化的技術會結合多分辨率表示等方法,以得到足夠的互動性能。在科學大規模數據的並行可視化工做中,主要涉及數據流線化、任務並行化、管道並行化和數據並行化4 種基本技術。微軟公司在其雲計算平臺Azure 上開發了大規模機器學習可視化平臺(Azure Machine Learning),將大數據分析任務形式爲有向無環圖並以數據流圖的方式向用戶展現,取得了比較好的效果。在國內,阿里巴巴旗下的大數據分析平臺御膳房也採用了相似的方式,爲業務人員提供的互動式大數據分析平臺。
最後有關發數據的一些相關資料,想要系統學習大數據,從事大數據相關:大數據開發工程師、數據分析工程師、數據挖掘工程師、倉庫採集開發工程師、ETL工程師的能夠加V:miaoji997獲取相關資料。