1. 程式人生 > >資料密集、計算密集、IO密集,hadoop如何應對?

資料密集、計算密集、IO密集,hadoop如何應對?

I/O bound 指的是系統的CPU效能相對硬碟/記憶體的效能要好很多,此時,系統運作,大部分的狀況是 CPU 在等 I/O (硬碟/記憶體) 的讀/寫,此時 CPU Loading 不高。

計算密集型 (CPU-bound) 也有人認為是Compute-Intensive
CPU bound 指的是系統的 硬碟/記憶體 效能 相對 CPU 的效能 要好很多,此時,系統運作,大部分的狀況是 CPU Loading 100%,CPU 要讀/寫 I/O (硬碟/記憶體),I/O在很短的時間就可以完成,而 CPU 還有許多運算要處理,CPU Loading 很高。

在多重程式系統中,大部份時間用來做計算、邏輯判斷等CPU動作的程式稱之CPU bound。例如一個計算圓周率至小數點一千位以下的程式,在執行的過程當中

絕大部份時間用在三角函式和開根號的計算,便是屬於CPU bound的程式。

CPU bound的程式一般而言CPU佔用率相當高。這可能是因為任務本身不太需要訪問I/O裝置,也可能是因為程式是多執行緒實現因此遮蔽掉了等待I/O的時間。
而I/O bound的程式一般在達到效能極限時,CPU佔用率仍然較低。這可能是因為任務本身需要大量I/O操作,而pipeline做得不是很好,沒有充分利用處理器能力。

在計算密集中,當時關注超級計算、高效能運算、網格計算等主要以計算速度為追求指標。

資料密集(Data-Intensive)

   在2011年,"大資料"的概念已經賺足了人氣,調研機構IDC數字宇宙在2011年6月的報告顯示,全球資料量在2011年已達到1.8ZB,在過去5年裡增加了5倍,而到2015年將達到近8ZB.進入2012年,大資料絲毫不會放慢增長的步伐,全球製造業、政府、零售商、金融等眾多機構已經陷入"資料爆炸"的困境。隨著資料量的急劇增長,以及對資料線上處理能力的要求不斷提高,海量資料的處理問題越來越受到關注。在金融、電信等領域,都需要通過對大量的使用者資料進行分析,才能做出相應的決策。對網際網路資料進行

儲存和處理的海量資料處理系統也開始向資料密集型計算系統發展。

   資料密集型應用與計算密集型應用是存在區別的,傳統的計算密集型應用往往通過平行計算方式在緊耦合的超級計算機上執行少量計算作業,即一個計算作業同時佔用大量計算機節點;而資料密集型應用的特點主要是:

1.         大量獨立的資料分析處理作業可以分佈在鬆耦合的計算機集群系統的不同節點上執行;

2.         高度密集的海量資料I/O吞吐需求;

3.         大部分資料密集型應用都有個資料流驅動的流程。

資料密集型計算指能推動前沿技術發展的對海量和高速變化的資料的獲取、管理、分析和理解。這包含了三層含義:

●    它所處理的物件是資料,是圍繞著資料而展開的計算。它需要處理的資料量非常巨大,且快速變化,它們往往是分佈的、異構的。因此,傳統的資料庫管理系統不能滿足其需要。

●    "計算"包括了從資料獲取到管理再到分析、理解的整個過程。因此它既不同於資料檢索和資料庫查詢,也不同於傳統的科學計算和高效能運算。它是高效能運算與資料分析和挖掘的結合。

●    它的目的是推動技術前沿發展,要想推動的工作是那些依賴傳統的單一資料來源、準靜態資料庫所無法實現的應用。

資料型密集計算的典型應用可概括為以下三類:

1)Web應用:無論是傳統的搜尋引擎還是新興的Web 2.0應用,它們都是以海量資料為基礎,以資料處理為核心的網際網路服務系統。為支援這些應用,系統需要儲存、索引、備份海量異構的Web頁面、使用者訪問日誌以及使用者資訊(Profile),並且還要保證對這些資料快速準確的訪問 。顯然,這需要資料密集型計算系統的支援,因而WEB應用成為資料密集型計算髮源地。

2)軟體即服務(Software as a Service, SaaS)應用:SaaS通過提供公開的軟體服務介面,使得使用者能夠在公共的平臺上得到定製的軟體功能,從而為使用者節省了軟硬體平臺的購買和維護費用,也為應用和服務整合提供了可能。由於使用者的各類應用所涉及的資料具有海量、異構、動態等特性,有效地管理和整合這些資料,並在保證資料安全和隱私的前提下提供資料融合和互操作功能需要資料密集型計算系統的支援。

3)大型企業的商務智慧應用:大型企業往往在地理上是跨區域分佈的,網際網路提供了統一管理和全域性決策的平臺。實現企業商務智慧需要整合生產、銷售、供應、服務、人事、財務等一系列子系統。資料是整合的物件之一,更是實現商務智慧的基礎。由於這些系統中的資料包括產品設計、生產過程以及計劃、客戶、訂單、售前後服務等資料,除型別多樣,數量巨大外,結構也是複雜、異構的。資料密集型計算系統是實現跨區域企業商務智慧的支撐技術。

針對以上三種不同的型別應用,hadoop中如何應對呢?

比如一個問題:

Map Reduce應用中有一類特殊的應用叫做計算密集型應用(Compute-Intensive application)。這類應用的特點在於Mapper.map()函式執行的時間要遠遠長於資料訪問的時間,且至少要差一個數量級。從技術角度來說,雖然這類應用仍然可以使用“標準”輸入格式的實現,但是它會帶來資料存放結點過少而叢集內剩餘結點沒能充分利用的問題。

圖1:資料區域性性情況下的結點使用圖

圖1中顯示了針對計算密集型應用,使用“標準”資料區域性性導致的結點使用率上的巨大差異——有些結點(紅色標註)被過度使用,而其他結點(黃色和淺綠色標註)則使用不足。由此可見,在針對計算密集型應用時,需要重新思考對“區域性性”概念的認識。在這種情況下,“區域性性”意味著所有可用結點之間map任務的均勻分佈——即最大化地使用叢集機器的計算能力。

為此可以研究關於如何為不同的結點分配計算任務,這需要自行設計InputFormat

(未完待續)

參考文獻:

1、Hadoop+究 http://wenku.baidu.com/view/27736403de80d4d8d15a4f20.html

2、揭祕InputFormat:掌控Map Reduce任務執行的利器,http://www.infoq.com/cn/articles/HadoopInputFormat-map-reduce

3、大資料時代來臨 巨頭破解密集計算困局,http://server.chinaitlab.com/news/880201.html

4、資料密集型應用服務介紹、http://www.csdb.cn/prohtml/0.appservice.overview/pages/2006.html

5、http://www.cnblogs.com/balaamwe/archive/2012/07/27/2611622.html