天天看點

《深入了解Hadoop(原書第2版)》——1.3大資料的程式設計模型

本節書摘來自華章計算機《深入了解hadoop(原書第2版)》一書中的第1章,第1.3節,作者 [美]薩米爾·瓦德卡(sameer wadkar),馬杜·西德林埃(madhu siddalingaiah),傑森·文納(jason venner),譯 于博,馮傲風,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

大資料的程式設計模型主要有以下幾種類型:

大規模并行處理(massively parallel processing,mpp)資料庫系統:emc公司的greenplum系統和ibm公司的netezza系統就是這樣的系統。

記憶體資料庫系統:oracle公司的exalytics和sap公司的hana正是此類系統。

mapreduce系統:這樣的系統包括所有大資料系統中最廣泛使用的hadoop。

整體同步并行(bulk synchronous parallel,bsp)系統:apache hama和apache giraph就是這樣的系統。

大規模并行處理(mpp)資料庫系統的核心思想是把資料按照某一列或者某一組列的值,按照某種形式進行劃分,以分别處理。舉個例子,上文例子中計算2000年的各州總銷售額,并按州排序,我們可以按照各個州來劃分資料,這樣使用固定的計算節點來處理固定州的相應資料。這樣的資料分割方法使得各個計算節點都可以計算出對應州的2000年總銷售額。

這樣的系統有個明顯的缺陷。你需要在算法設計的時候就決定資料如何劃分。而劃分的準則通常由底層的用例來決定。如此一來,這就不适合臨時的資料查詢需求。某些資料的查詢,由于資料在各個計算節點的劃分合理,進而執行速度很快。而有些資料查詢,由于資料在各個計算節點的劃分不合理(與資料的通路方式不一緻)導緻其執行速度異常緩慢,為了得到計算結果,系統需要通過網絡來進行大量的資料交換。

為了解決這個缺陷,大規模并行處理資料庫系統經常采用的辦法是把資料存儲多份,并按照不同的準則來進行劃分。根據不同的查詢需求,選擇不同的資料集。

下面列出了mpp 程式設計模型的幾個要點,這些要點符合前文中給出的最初的大資料系統定義(想一下按州排序統計計算銷售總額的例子):

資料按州劃分,配置設定到不同的計算節點。

各個計算節點都擁有程式所需的執行庫,并對配置設定到該節點的資料進行資料處理。

每個計算節點讀取本地資料。一個例外是你未考慮資料的分布情況就進行了資料查詢,這時,計算任務會通過網絡從其他節點來擷取資料。

每個任務都是順序讀取資料。所需要的所有資料都存放在磁盤上的相鄰位置,并且被一次性地讀取,并在記憶體中應用過濾條件(year=2000)。

從系統運作的角度來看,記憶體資料庫系統類似于mpp系統。它們的不同之處在于,記憶體資料庫系統的每個計算節點擁有巨大容量的記憶體,并且大部分資料會被預先加載到記憶體中。sap 公司的hana系統就是按照這個原則來運作的。另外一些系統,比如oracle公司的exalytics系統,利用特殊的硬體,一個應用程式就可以管理執行多個主機。就本質來說,記憶體資料庫系統就像是帶有sql接口的記憶體mpp資料庫系統。

記憶體資料庫系統的商業版本中有個重要的缺點是,其中内置了大量的硬體和軟體。誠然,這些系統擁有專用裝置和特定硬體,但這通常費用高昂。如果因為這些記憶體資料庫系統準備的商用硬體來擴容記憶體資料庫系統叢集是非常友善的。舉個例子,假設一個商用伺服器有25gb ram。我們要搭建1tb容量的記憶體資料庫就需要40台以上的主機(考慮到還有其他業務需要使用這個伺服器)。1tb也未必夠用,但是我們的叢集節點數已經達到了40個。

下面列出了記憶體資料庫系統程式設計模型的幾個要點特征,這些特征同樣符合前文中給出的最初的大資料系統定義:

如前面的例子中所述,資料按州劃分。各個節點把資料加載到記憶體中。

每個計算節點讀取本地資料。一個例外是你未考慮資料的配置設定情況就進行資料查詢請求,這時,計算任務會從其他節點來擷取所需資料。

由于資料是被緩存到記憶體的,是以除了最初的資料加載入記憶體的過程外,這裡不适用順序讀取資料的特性。

mapreduce程式設計範型是本書所要講述内容的核心基礎重點。截至目前,mapreduce架構已被廣泛的用于大資料的處理過程(four methods)。hadoop系統對mapreduce架構的實作具有如下幾個重要特征:

使用商用級别的硬體。需要注意的是這個商用硬體的要求不是指筆記本或者桌上型電腦。盡管計算叢集是商用級别,但是我們可以使用常用的硬體裝置來搭建。

無需事先定義資料劃分準則來把資料配置設定到各個計算節點。

使用者僅需要定義兩個獨立的處理過程:map和reduce。

本書會重點深入地講解mapreduce架構。總體上說,mapreduce架構需要使用者定義一個map處理和reduce處理。當hadoop系統實作mapreduce時,資料常常按照64~128mb資料塊大小進行分發,每個資料塊會被複制兩次(hadoop系統資料備份預設參數為3)。在計算每個州的2000年的總銷售額,并按照州排序的例子中,所有的銷售資料都會分割為大量的資料塊(大小64~128mb),加載到hadoop分布式檔案系統(hadoop distributed file system,hdfs)。mapreduce程式啟動的時候,hadoop系統會把程式運作依賴庫(包括使用者自定義map處理和reduce處理)拷貝到各個計算節點。

各個計算節點按照排程執行map任務,該map任務會讀取包含銷售資料的資料塊。每個mapper(各自節點上的)會逐條讀取資料塊中的資料記錄(record),并過濾掉無用資料,僅保留2000年的資料。對應所輸入的資料記錄,mapper會輸出一條包含鍵/值對(key/value pair)的資料記錄。如果讀入的銷售資料是2000年的,那麼其鍵(key)就是州,其值(value)就是從讀入資料記錄中擷取的銷售數字。

最後,reducer會從每個mapper的輸出中擷取那些鍵/值對,運作reducer的數量是可以配置的。各個鍵會被發送到特定reducer進行處理,確定相同的鍵僅被相同的reducer處理。各個reducer把接受的鍵/值對中的銷售數字相加。reducer接受的資料格式是鍵(州)和這個鍵對應的銷售數字清單(銷售記錄是2000年的)。輸出結果寫回hdfs中。用戶端從hdfs上讀取結果資料後,對結果按州排序。最後這個步驟也可以交給reducer完成,因為reducer在接受它要處理的鍵時,這些鍵是已經排序完成的。本例中,為了達到按州排序的目的,我們需要把reducer的運作數量嚴格限制為1。可是由于mapper和reducer之間傳輸資料會引起網絡i/o,這樣可能會導緻網絡擁塞。本書的後面部分會詳細地讨論這個問題。

下面列出了mapreduce程式設計模型的幾個要點特征,這些特征同樣符合前文中給出的大資料系統定義:

資料以較大的資料塊的形式存放在hdfs上。hdfs是一個分布式檔案系統,資料塊分散存儲到各個節點,資料塊是有備援的。

程式運作依賴庫,包括map和reduce代碼被複制發送到所有的任務節點。

每個計算節點僅讀取節點本地資料。叢集中所有節點運作mapper,從節點本地讀取資料到mapper中(大多數情況下,哪個節點的mapper讀取哪個節點磁盤的資料塊,這是由排程程式管理決定的。排程程式可能會配置設定某個節點的mapper任務來處理遠端節點的資料塊,以保持叢集中的所有節點負載均衡)。

資料被每個節點的任務以資料塊的方式一次性順序讀取(資料塊大小一般為64~128mb)。

mapreduce程式設計範型的一個重要不足是它不适合疊代算法。大量的資料科學計算算法很自然就要使用疊代,并最終收斂于一個解。當我們使用這樣的算法的時候,mapreduce程式設計範型需要我們把每個疊代過程放到互相獨立的mapreduce任務中去。每次疊代産生的資料輸出作為下次疊代計算的資料輸入。但是,由于mapreduce任務每次都要從持久性存儲中重新讀取資料,是以每次疊代産生的結果需要存到持久性存儲中供下次疊代計算使用。這個過程導緻了不必要的i/o操作,并對系統吞吐量造成重大影響。這樣的問題在下面即将講到的關于bsp類型系統的講解中,也有論述。

整體同步并行(bsp)系統的運作過程跟mapreduce過程非常相似。與mapreduce程式在它的處理循環結束後即可終止不同的是,bsp系統程式執行由一系列的超步(processes)(這個與map處理的處理過程類似)組成,這些超步保持栅欄同步(synchronize on a barrier),向主節點發送資料并進行相關的資訊交換(exchange relevant information)。每當一次疊代執行完畢,主節點會通知每個資料處理節點進行下一次疊代。

間隔通信是在并行計算進行中經常提到的概念。間隔通信指的是許多線程在分别執行各自的任務,這些線程在運作之前需要協商出一個檢查點。這種模式是非常必要的,所有的處理線程在到達那個檢查點之前就要決定是繼續執行剩下的計算任務還是終止它們(并行的或者順序的),以便所有線程确認何時完成資料處理任務。間隔同步(synchronizing on a barrier)的方法在我們的日常生活中就經常使用。例如,一起拼車的夥伴們會常常商定在某一個特定的地方等車。整個等待過程的長短,取決于那個最晚到達該指定等車位置的人何時到達。

在bsp方法執行過程中,允許每個類似map的處理過程緩存上次疊代的結果,如此即可大幅提高整個資料處理過程的吞吐量。我們會在本書第15章中講解bsp系統。涉及了一些相關的疊代算法。