大數據的演進過程

大數據的演進過程

大數據(Big Data)概念是1998年由SGI首席科學家John Masey在USENIX大會上提出的。他當時發表了一篇名為Big Data and the Next Wave of Infrastress的論文,使用了大數據來描述數據爆炸的現象。但大數據真正得到業界關注,則是其後多年的事情了。其中大數據最重要的發酵素則是2003-2006年Google發佈的GFS、MapReduce和BigTable三篇論文。

大數據是指海量數據或巨量數據,其規模巨大到無法通過目前主流的計算機系統在合理時間內獲取、存儲、管理、處理並提煉以幫助使用者決策。

大數據的演進過程

大數據處理流程

一般的大數據處理流程都有以下幾個過程:數據採集、數據存儲、數據處理、數據展現。如下圖所示。

大數據的演進過程

在大數據時代,由於數據種類多,數據大,從結構化的數據到非結構化的數據,數據採集的形式也變得更加複雜而多樣。

當存儲技術的發展變得步履蹣跚,趕不上數據發展的速度時,分佈式存儲成為了必然選擇,非結構型數據也對存儲格式提出了新的要求。層出不窮的數據源也使得數據量產生了井噴似的迅猛增長。此時分佈式存儲與NoSQL的誕生回應了這樣的需求,解決了大數據存儲的根本難題。

數據處理包括數據計算、分析,這部分是大數據技術的核心,本文剩餘部分將詳細介紹這部分。數據展示指的是通過提供報表等可視化界面反應目前平臺或業務運行的各項指標。

大數據的演進

提到大數據技術,最基礎和核心的仍是大數據的分析和計算。在2017年,大數據分析和計算技術仍舊在飛速的發展,無論老勢力Hadoop還是當紅小生Spark,亦或是人工智能,都在繼續自己的發展和迭代。

目前絕大部分傳統數據計算和數據分析服務均是基於批量數據處理模型:使用ETL系統或OLTP系統進行構造數據存儲,在線的數據服務通過構造SQL語言訪問上述數據存儲並取得分析結果。這套數據處理的方法伴隨著關係型數據庫在工業界的演進而被廣泛採用。但在大數據時代下,伴隨著越來越多的人類活動被信息化、進而數據化,越來越多的數據處理要求被實時化、流式化。Andrew NG揭示大數據未來發展的趨勢就是人工智能。下面將對批量計算、流式計算以及人工智能進行詳細介紹,其中人工智能部分將在下一期中介紹。

大數據的演進過程

批量計算

傳統的批量數據處理模型通常基於如下處理模型:

1. 使用ETL系統或者OLTP系統構造原始的數據存儲,以提供後續的數據服務進行數據分析和數據計算。如下圖所示,用戶裝載數據,系統根據自己的存儲和計算情況,對於裝載的數據進行索引構建等一些列查詢優化工作。因此,對於批量計算,數據一定需要加載到計算機系統,後續計算系統才在數據加載完成後方能進行計算。

2. 用戶或系統主動發起一個計算作用並向上述數據系統進行請求。此時計算系統開始調度(啟動)計算節點進行大量數據計算,該過程的計算量可能巨大,耗時長達數分鐘乃至數小時。同時,由於數據累計的不可及時性,上述計算過程的數據一定是歷史數據,無法保證數據的實時性。

3. 計算結果返回,計算作業完成後將數據以結果集形式返回用戶,或者可能由於計算結果數量巨大保存著數據計算系統中,用戶進行再次數據集成到其他系統。一旦數據結果巨大,整體的數據集成過程漫長,耗時可能長達數分鐘乃至數小時。

大數據的演進過程

典型代表:Hadoop

Hadoop是Apache的一個開源項目,是可以提供開源、可靠、可擴展的分佈式計算工具。它主要包括HDFS和MapReduce兩個組件,分別用於解決大數據的存儲和計算。

HDFS是獨立的分佈式文件系統,為MapReduce計算框架提供存儲服務,具有較高的容錯性和高可用性,基於塊存儲以流數據模式進行訪問,數據節點之間項目備份。默認存儲塊大小為64M,用戶也可以自定義大小。

HDFS是基於主從結構的分佈式文件系統,結構上包括NameNode目錄管理、DataNode的數據存儲和Client的訪問客戶端3部分。NameNode主要負責系統的命名空間、集群的配置管理以及存儲塊的複製;DataNode是分佈式文件系統存儲的基本單元;Client為分佈式文件系統的應用程序。體系結構如下圖所示。

大數據的演進過程

HDFS體系架構圖

如上圖所示,NameNode通過主從模式實現高可用性,但是在以前的版本,Standby只能是一個主機。為了實現更高的可靠性,在Hadoop3.0中可以配置超過一個的Standby的NameNode,從而保證更高的可靠型。對於數據存儲,HDFS採用的是多副本的方式來存儲數據,即Client將數據首先通過NameNode獲取數據將要存儲在哪些DataNode上,之後這些存儲到最新數據的DataNode將變更數據以同步或異步方式同步到其他DataNode上。但是這幾年數據規模的增加遠遠大於人的想象,而這些產生的數據,必然會存在冷熱數據的區分。無論冷熱,數據對於一個公司都是核心資產,誰都不想數據丟失。可是對於冷數據,如果採用多副本方式,會浪費大量的存儲空間。在Hadoop3.0之後,採用Erasure Coding可以大大的降低數據存儲空間的佔用。對於冷數據,可以採用EC來保存,這樣才能降低存儲數據的花銷,而需要時,還可以通過CPU計算來讀取這些數。

MapReduce是一種分佈式計算框架,適用於離線大數據計算。採用函數式編程模式,利用Map和Reduce函數來實現複雜的並行計算,主要功能是對一個任務進行分解,以及對結果進行綜合彙總。其中,Map的主要功能是把一個作業任務分解成多個子任務,然後發送到對應的節點服務器中,接著進行並行計算。Reduce的主要功能把並行計算得到的結果進行歸併後得到的結果返回到中央服務器。

具體來說,MapReduce是將那些沒有經過處理的海量數據進行數據分片,即分解成多個小數據集;每個Map並行地處理每一個數據集中的數據,然後將結果存儲為,並把key值相同的數據進行歸併發送到Reduce處理。原理如下圖所示。

大數據的演進過程

MapReduce架構

流計算

不同於批量計算模型,流式計算更加強調計算數據流和低時延,流式計算數據處理模型如下:

1. 使用實時集成工具,將數據實時變化傳輸到流式數據存儲(即消息隊列,如RabbitMQ);此時數據的傳輸編程實時化,將長時間累積大量的數據平攤到每個時間點不停地小批量實時傳輸,因此數據集成的時延得以保證。

2. 數據計算環節在流式和批量處理模型差距更大,由於數據集成從累計變成實時,不同於批量計算等待數據集成全部就緒後才啟動計算作業,流式計算作業是一種常駐計算服務,一旦啟動將一直處於等待事件觸發的狀態,一旦小批量數據進入流式數據存儲,流計算立刻計算並迅速得到結果。

3. 不同於批量計算結果數據需要等待數據計算結果完成後,批量將數據傳輸到在線系統;流式計算作業在每次小批量數據計算後可以立刻將數據寫入在線系統,無需等待整個數據的計算結果,可以立刻將數據結果投遞到在線系統,進一步做到實時計算結果的實時化展現。

大數據的演進過程

典型代表:Spark

Spark是一個快速且通用的集群計算平臺。它包含Spark Core、Spark SQL、Spark Streaming、MLlib以及Graphx組件。如下圖所示。Spark Core

Spark SQL是處理結構化數據的庫,它支持通過SQL查詢數據。Spark Streming是實時數據流處理組件。MLlib是一個包含通用機器學習的包。GraphX是處理圖的庫,並進行圖的並行計算一樣。

大數據的演進過程

Spark框架圖

Spark提出了彈性分佈式數據集的概念(Resilient Distributed Dataset),簡稱RDD,每個RDD都被分為多個分區,這些分區運行在集群的不同節點上。一般數據操作分為3個步驟:創建RDD、轉換已有的RDD以及調用RDD操作進行求值。

在Spark中,計算建模為有向無環圖(DAG),其中每個頂點表示彈性分佈式數據集(RDD),每個邊表示RDD的操作。RDD是劃分為各(內存中或者交換到磁盤上)分區的對象集合。在DAG上,從頂點A到頂點B的邊緣E意味著RDD B是RDD A上執行操作E的結果。有兩種操作:轉換和動作。轉換(例如;映射、過濾器、連接)對RDD執行操作併產生新的RDD。

大數據的演進過程

Spark基本原理

下面介紹下Spark與Hadoop的區別:

  1. 相較於Hadoop,Spark更快,平均處理速度是Hadoop的10倍到100倍。因為Spark的數據處理工作在內存中進行,只在一開始將數據讀入內存,以及將最終結果持久存儲時需要與存儲層交互。所有中間態的數據結果均存儲在內存中。雖然內存中處理方式可大幅改善性能,Spark在處理與磁盤有關的任務時速度也有很大提升,因為通過提前對整個任務集進行分析可以實現更完善的整體式優化。特別是在頻繁迭代的場景下,Hadoop需要對每個迭代之間的數據寫回磁盤,這樣就引入了大量的磁盤I/O,那麼整個系統性能就比較低下。

  2. Spark並沒有像Hadoop的HDFS的分佈式文件系統,但是具有更強的適應能力,即可以通過HDFS獲取數據,也可以通過Cassandra獲取數據。

  3. Hadoop在設計之初更強調批處理;而Spark支持流處理、機器學習,因此它能解決的問題更多。

  4. 針對方向不同。Hadoop本質是一個分佈式數據的基礎;Spark是一個數據處理工具。

總結

本文主要介紹了大數據的定義、特徵、大數據的一般流程,並且著重介紹了大數據技術演進過程中的前兩步(批量計算和流計算)。對於批量計算,介紹了Hadoop的HDFS和MapReduce的重要思想。同時,針對頻繁迭代計算場景下,由於Hadoop需要頻繁的進行I/O操作降低了系統性能。人們發明了Spark,它在一般情況下將數據存儲在內存中,此外,提出了RDD和DAG思想,有效的管理數據。下一期我們將詳細介紹大數據技術演進過程中的第3步:人工智能。


分享到:


相關文章: