MapReduce&&Hadoop

卿卿的博文發表於2017-12-16

高能效能計算(High Performance Computing, HPC)和網格計算(Grid Computing)組織多年以來一直在研究大規模資料處理,主要使用類似於訊息傳遞介面(Message Passing Interface, MPI)的API。從廣義上講,高效能運算採用的方法是將作業分散到叢集的各臺伺服器上,這些機器訪問儲存區域網路(SAN)所組成的共享檔案系統。這比較適用於計算密集型的作業,但如果節點需要訪問的資料量更龐大(高達幾百GB,MapReduce開始施展他的方法),很多計算節點就會因為網路頻寬的瓶頸問題不得步閒下來等資料。
MapReduce儘量在計算節點上儲存資料,以實現資料的本地快速訪問。資料本地化(data locality)特性是MapReduc的核心特徵,並因此而獲得良好的效能。意識到網路頻寬是資料中心環境最珍貴的資源之後,MapReduce通過顯式網路拓撲結構來保留網路頻寬。
雖然MPI(MPI是一個跨語言的通訊協議,用於編寫平行計算機。支援點對點和廣播。MPI是一個資訊傳遞應用程式介面,包括協議和和語義說明,他們指明其如何在各種實現中發揮其特性。MPI的目標是高效能,大規模性,和可移植性)賦予程式設計師很大的控制權,但需要程式設計師顯式控制資料流機制,包括用C語言構造底層的功能模型和高層的資料分析演算法。

志願計算
志願者吧自己的計算機CPU的空閒時間貢獻出來供分析無線一些需要的資料。志願計算專案將問題分成很多塊,每一塊成為一個工作單元,發到世界各地的計算機上進行分析。
MapReduce有三大目標:為只需要短短几分鐘或幾小時就可以完成的作業提供服務;執行於同一個內部有高速網路連線的資料中心內;資料中心內的計算機都是可靠的、定製的硬體。
Hadoop專案:
Common:一系列元件和介面,用於分散式檔案系統和通用I/O(序列化、Java RPC<(Remote Procedure Call)——遠端過程呼叫,它是一種通過網路從遠端計算機程式上請求服務,而不需要了解底層網路技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通訊程式之間攜帶資訊資料。在OSI網路通訊模型中,RPC跨越了傳輸層和應用層。RPC使得開發包括網路分散式多程式在內的應用程式更加容易。> 和持久化資料結構)
Avro:一種序列化系統,用於支援高效、跨語言的RPC和持久化資料儲存
MapReduce:分散式資料處理模型和執行環境,執行於大型商用機叢集
HDFS:分散式檔案系統,執行於大型商用機叢集
Pig:資料流語言和執行環境,用以探究非常龐大的資料集。Pig執行在MapReduce和HDFS叢集上
Hive:一種分散式的、按列儲存的資料倉儲。Hive管理HDFS中儲存的資料,並提供基於SQL的查詢語言(由執行時引擎翻譯成MapReduce作業)用以查詢資料
HBase:一種分散式的、按列儲存的資料。HBase使用HDFS作為底層儲存,同時支援MapReduce的批量式計算和點查詢(隨機讀取)
ZooKeeper:一種分散式的可用性搞得協調服務。ZooKeeper提供分散式鎖之類的基本服務用於構建分散式應用
Sqoop:該工具用於在結構化資料儲存(如關係型資料庫)和HDFS之間高效批量傳輸資料
Oozie:該服務用於執行和排程Hadoop作業(如MapReduce,Pig,Hive及Sqoop作業)
將Hadoop版本升級成另外一個版本時,需要仔細考慮需要升級步驟。同時還要考慮幾個方面:API相容性、資料相容性和連線相容性。
API相容性:考慮使用者程式碼和發行的Hadoop API之間的對比,例如Java MapReduce API。住發行版本時允許破壞API相容性的,因此使用者的程式要修改並重新編譯。次重點發行版本和單節點發行版本不應該破壞相容性。
資料相容性:考慮持久資料和後設資料的格式,這些修改對使用者透明,因為系統升級時資料會自動遷移。系統升級路徑有一些限制,這些限制包含在發行須知中。
連線相容性:主要考慮通過利用RPC和HTTP這樣的連線協議來實現客戶端和伺服器之間的互操作性。有兩類客戶端:外部客戶端和內部客戶端。其中內部客戶端在加鎖狀態進行升級,舊版本的無法與新版本的一起工作。