1. 程式人生 > >分散式計算和平行計算差異

分散式計算和平行計算差異

Mapreduce是分散式計算的典型技術,MPI則是平行計算的典型技術。總結下來主要兩點區別:
1、分散式計算(如MapReduce)的計算節點任務往往是獨立的,鬆散的。不涉及大規模的資料互動,因此節點之間執行幾乎互不影響。體現到技術架構上就使得可以做到計算和儲存在同一個節點上,不存在計算節點拉取大量儲存資料的情況,因此也就不需要技術架構提供內部專用的高速網路。但這同時也導致分散式計算本身的計算模型比較簡單,比如Mapreduce就是確定分拆和合並兩個大的步驟。

一個典型的分散式計算場景就是搜尋。使用者輸入一個關鍵字後,計算任務就被下發到儲存所有網頁關鍵字的分散式計算平臺上,平臺上每個節點都儲存了不同的資訊,然後分別從每個節點的本地儲存上計算出搜尋相關網頁URL,再講結果合併成需要展示給使用者的URL列表。每個節點上搜索的過程是獨立的,因此可以在節點計算完後將結果彙總起來。中間無需各節點互相通訊。

2、平行計算則需要在計算過程中多個程序(計算任務)有頻繁的互動。比如C++的MPI框架在使用時需要開發者考慮多個程序之間的通訊機制,優化的越好效率越高。因此,技術架構上MPI是一種計算和儲存分離的架構,計算節點需要從儲存節點拉取資料,進一步帶來的需求就是高效能運算(HPC)往往都需要有專門的計算叢集內部高速網路來支援節點間的高速通訊和資料拉取工作;同時,需要一套共享儲存(如NAS)。
下面一張圖簡單介紹了平行計算的過程,其中可以看到communicate這一步實際上涉及了大量的相互通訊,這個是MPI介面規範可以支援開發的。
在這裡插入圖片描述

3、MPI、Hadoop和Spark區別
易用性上MPI<Hadoop<Spark。Spark的介面比Hadoop簡潔,表達力比Hadoop強,效能也比Hadoop好,在做Machine Learning / Data analytics 方面的工作,Spark是最好的選擇。而MPI則是更原生的分散式開發框架,如果有專門的技術團隊,可以考慮用MPI框架自己開發程式碼和優化,效能應該是最好的。Hadoop與Spark比的話,如果是一次性批量處理的任務,Spark沒有明顯優勢,如果是迭代型(iterative)演算法(大部分機器學習都是迭代的),那麼Spark就有很大的優勢。
另外,Spark可以基於HDFS部署,也可以基於其它分散式儲存平臺,當然預設都是基於HDFS的。Hadoop的Mapreduce在處理分散式計算時每次中間結果是要寫會硬碟的,而Spark不會,因此Spark比MR要快的多。

MPI參考:https://blog.csdn.net/KevinBetterQ/article/details/77095337
MPI開發示例:https://blog.csdn.net/zhaodedong/article/details/73441318?utm_source=blogxgwz2
MPI、Hadoop、Spark對比:
https://blog.csdn.net/forward__/article/details/78770466
https://blog.csdn.net/u010159842/article/details/49055549?utm_source=blogxgwz2