大數據是什麼?

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

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

大數據的4V特徵,即Variety(多樣化)、Volume(大量化)、Velocity(快速化)、Value(價值密度低)。以下圖所示。其中,Variety表示來源多和格式多,數據能夠來源於搜索引擎、社交網絡、通話記錄、傳感器等等,這些數據要麼以結構化形式存儲,要麼以非結構化數據存儲;Volume表示數據量比較大,從TB級別,躍升到PB級別。尤爲是在移動互聯時代,視頻、語言等非結構化數據快速增加;Velocity表示數據存在時效性,須要快速處理,並獲得結果出來,這一點也是和傳統的數據挖掘技術有着本質的區別;Value表示大量不相關信息,不通過處理則價值較低,屬於價值密度低的數據。編程

image.png

大數據處理流程

通常的大數據處理流程都有如下幾個過程:數據採集、數據存儲、數據處理、數據展示。以下圖所示。
image.png服務器

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

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

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

大數據的演進

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

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

image.png

批量計算

傳統的批量數據處理模型一般基於以下處理模型:機器學習

1. 使用ETL系統或者OLTP系統構造原始的數據存儲,以提供後續的數據服務進行數據分析和數據計算。以下圖所示,用戶裝載數據,系統根據本身的存儲和計算狀況,對於裝載的數據進行索引構建等一些列查詢優化工做。所以,對於批量計算,數據必定須要加載到計算機系統,後續計算系統纔在數據加載完成後方能進行計算。異步

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

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

image.png

典型表明: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,value>,並把key值相同的數據進行歸併發送到Reduce處理。原理以下圖所示。

MapReduce架構

流計算

不一樣於批量計算模型,流式計算更增強調計算數據流和低時延,流式計算數據處理模型以下:

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

2. 數據計算環節在流式和批量處理模型差距更大,因爲數據集成從累計變成實時,不一樣於批量計算等待數據集成所有就緒後才啓動計算做業,流式計算做業是一種常駐計算服務,一旦啓動將一直處於等待事件觸發的狀態,一旦小批量數據進入流式數據存儲,流計算馬上計算並迅速獲得結果。

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

image.png

典型表明: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步:人工智能。


image

歡迎關注微信公衆號:木可大大,全部文章都將同步在公衆號上。

相關文章
相關標籤/搜索