大數據技術——從海量數據的存儲到海量數據的計算

目錄

海量數據的存儲

海量數據的計算

大數據處理的主要應用場景

前言:大數據技術誕生之初,就是爲了解決海量數據的存儲和計算問題。

大數據起源於Google。

Google是當時世界上(儘管目前也是)最大的搜索引擎公司,由於互聯網時代的到來,Google積累了海量的用戶,海量用戶意味着海量的數據,谷歌需要將這些數據保存下來,傳統的保存數據的方式已經滿足不了Google的需求了。

首先我們需要了解,海量數據的存儲面臨着三個困難:

①:數據能夠存儲的容量足夠大;

②:數據的讀寫速度要足夠的快;

③:數據要要有可靠性的保證,也即數據備份。

海量數據的存儲

首先看一個問題:

當一個倉庫無法裝載更多的貨物的時候,我們如何解決更多的貨物的存儲問題?

沒錯,我們可以擴建倉庫,如果我們想存儲更多的數據,我們可以不斷的升級計算機,通過升級內存,磁盤,CPU等將一臺計算機變得更強大,比如商業服務器不夠用,升級爲小型機,中型機,大型機,甚至超級計算機。以擴建“倉庫”的方式來升級存儲能力的方式也稱作是:“垂直伸縮”,拜摩爾定律所賜,計算機發展的早期,每過一年半,工程師們總能將計算機的性能提升一倍

倘若升級了計算機之後,依然無法存儲待存儲的數據,可以使用另外一種垂直伸縮的技術:獨立磁盤冗餘隊列,也即RAID技術,如果本科專業是計算機相關專業,應該都會在教材裏面看到該技術,RAID技術有很多種類型,比如RAID1,是在數據寫入磁盤的時候,將一份數據同時寫入到兩塊磁盤,任何一塊新的磁盤損壞,數據依然是安全的。剩餘的其他的RAIDx 讀者可以根據興趣自行了解。

一言以蔽之:RAIDx 技術能夠實現海量數據的存儲面臨的三個困難。

但是進入了互聯網時代,垂直伸縮的路子有些難走了,一方面是升級計算機帶來的成本問題,另一方面由於有些巨頭公司(例如Google,Alibaba)即便是世界上最牛X的超級計算機,也無法滿足其需求。

Google作爲這個世界技術最牛的公司解決這一問題,責無旁貸。工程師們想:如果擴建倉庫遇到了瓶頸,那麼就新建更多的倉庫,也即一臺計算機存儲不了如此龐大的數據,那麼就用N臺,就形成分佈式集羣,再將RAID運用到分佈式服務集羣上(其實就是HDFS的思想),如此就解決了海量數據的存儲問題。

這種通過不斷添加計算機來提高數據存儲能力的方式也稱作是“水平伸縮“,垂直伸縮總會遇到天花板,但是水平伸縮理論上卻沒有盡頭!

海量數據的計算

當一匹馬拉不動車的時候?也即:由數據存儲引發的數據計算的問題:

大數據的鼻祖Google,它存儲着幾乎全世界所有可訪問的網頁,數以萬億的規模,消耗的磁盤可達萬塊,爲了將這些文件存儲起來,Google開發了GFS(Google 文件系統)將數千臺服務器上萬塊磁盤統一管理起來,然後作爲一個文件系統,存儲所有這些網頁文件。

Google將這些網頁文件存儲起來之後,需要構建索引,然後對文件中的單詞進行詞頻統計,然後根據PageRank算法計算網頁的排名,也即Google需要對這數萬計磁盤上的文件進行計算處理,這並不是一般場景的計算問題。

我們先來看看一般的計算,也即傳統的軟件處理模型:

輸入 --> 計算 -->   輸出 模型,一個程序給它傳入一些數據,或者是程序從文件中讀取數據,然後對這些數據進行處理,最後得到輸出結果。一個程序能夠調度的網絡帶寬,常常以MB(通常百MB),內存容量以GB(通常幾十個GB)來計量,但是在互聯網大數據時代,例如一個稍微大一些的互聯網企業,需要計算處理的數據常常以PB計算,可以發現,傳統的計算處理模型並不能滿足大數據場景下的計算要求。也就是說,這麼大的數據量,計算機根本算不動!

一匹馬拉不動車的時候,我們想過更換更好的馬,商業級的服務器不夠用,就升級爲小型機,小型機不夠用,就升級中型機,實在不行就升級大型機,超級計算機。和前面的海量數據存儲遇到一樣的問題,光靠升級硬件,是不能夠滿足像Google這樣每天需要處理幾十億用戶請求的計算需求的。

那麼應該如何解決呢?

應該多添加幾匹馬。

前面我們提到海量的數據存儲於分佈式文件系統中,也即存儲在分佈式服務器集羣中,和海量數據的分佈式存儲的思路一致,海量數據的計算,使用數千臺甚至上萬臺計算機構建大數據處理集羣(MapReduce分佈式計算框架),利用更多的網絡帶寬,內存資源 ,CPU核心數去執行計算。

由於數據量巨大,而按照MapReduce編程框架編寫的MR程序較之於數據量卻非常的小,所以大數據場景下的計算原則是:移動計算大於移動數據。道理非常簡單,因爲移動程序更划算。

大數據處理的主要應用場景

大數據的主要應用場景是:數據分析,數據挖掘與機器學習。其中數據分析主要使用Hive,Spark-SQL等SQL處理引擎完成,而數據挖掘和機器學習則由專門的框架如TensorFlow等內置了主要的數據挖掘和機器學習的算法。

在以前,我們在進行數據分析時候,只能針對數據庫中的數據進行分析和統計,受到數據量和計算能力的限制也只能對重要的數據(例如財務相關的數據)進行統計,但是大數據技術出現之後,能夠存儲的數據更多,計算能力也有更大的提升,因此我們可以對記錄更多的數據,然後對其計算和分析。

正是因爲對海量數據的存儲和計算問題得以解決,才使得很多公司能夠更加詳解的採集用戶的行爲數據,形成了數據倉庫,因爲老闆知道,自己的服務器(數據倉庫)存的下,也能應付海量數據的計算,這一切都得益於大數據計算。

由於數據倉庫和分佈式計算框架的存在,使得數據挖掘也進入了大數據時代。以前,受到存儲能力和計算能力的限制,“數據挖掘機”,只能挖掘 ”小小的數據山“,而現在,可以使用更大的數據挖掘機(更好的計算能力),去挖掘更大的數據山(真正海量的數據),如此一來就能夠挖掘到更多的數據的價值。比如挖掘到兩個商品之間的關係,就可以進行關聯分析,最終讓用戶儘可能的看到想要購買的商品;還可以挖掘到人和人之間的關係,將各自購買過的商品出現在對方的推薦列表中;還能夠將每一個人身上不同的特性挖掘出來,形成用戶畫像,對同一類人推薦可能購買的商品。

我們知道機器學習實際就是使用數據訓練出來一個模型,然後將帶輸入值輸入到該模型中,然後得到該值的輸出值。

在沒有大數據的時候,我們受到數據採集,存儲,計算能力的限制,只能通過抽樣的方式獲取小部分數據,無法得到完整的,全局的,細節的規律,有了大數據技術之後,我們能夠把全部的歷史數據收集起來,統計其規律,進而預測正在發生的事情。這就是大數據時代的機器學習。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章