1. 程式人生 > >Hadoop & Spark

Hadoop & Spark

src 元數據 不可 alt 節點 node bsp 系統 數據節點

  1. Hadoop & Spark 概述

Apache Hadoop 是一種通過服務集群並使用MapReduce編程數據模型完成大數據的分布式處理框架,核心模塊包括:MapReduce,Hadoop Utilites,YARN(Yet Another Resource Negotiator)和HDFS(Hadoop Distributed File System)。

MapReduce是一種提供平行計算的編程模型,具有位置感知計劃(locality-aware scheduling),容錯(fault-tolerance),和可擴展性(scalability);

技術分享圖片

MapReduce把數據處理分為兩個階段:Map階段和Reduce階段,處理流程如下:

(1)每一個分割文件對應一個map任務,mapper首先將輸入數據轉化為中間數據,然後將結果輸出到一個循環的內存緩沖中(默認100M);

(2)當這個緩沖中的數據接近閥值(默認80%),mapper開始將緩存中的內容寫入本地磁盤的一個文件,但在數據寫入之前,mapper將數據分成幾個寫入區,寫入區的數據量對應於reducer的數量(或reduce task數量);同時,在數據分區期間,數據結果默認以key排序。

(3)在數據寫入磁盤的同時,當完成在緩存中寫入數據時,這個map任務被阻塞,直到緩存中的內容全部被清空。

(4)一旦mapper完成輸出,reducer或reduce task(負責將相同key的中間結果收縮到一個更小的結果集)開始從mapper中抓取一個特定分區數據,這種將mapper的輸出結果轉換為reducer的輸入稱之為數據洗牌(data shuffling),即all-map-to-all-reduce personalized communication, Hadoop使用自己的算法實現了這種數據洗牌。

(5)洗牌一旦完成,reducer開始融合(merge)這些分區,然後reduce函數被調用處理這些融合的數據;

(6)最後,reduce函數將結果輸出到HDFS上。

技術分享圖片

YARN在Hadoop裏是一個集群資源管理框架,它包括兩個主要的守護線程:一個計劃job和task的管理器,即在集群之間分配資源;啟動和監視容器的節點管理器;一個容器對應一個JVM實例,每個JVM實例為應用或tasks分配一定CPU、內存和其它資源;

HDFS是一個存儲大數據的分布式文件系統,在分布式的數據塊之間建立邏輯關系;它從應用數據中分離出文件系統元數據,將元數據存儲在主節點(Name Node),應用數據存儲在數據節點上(Data Node),並且HDFS在集群的節點上相互復制一定重復數量的數據塊以提高系統的可靠性(以防節點的失敗而導致應用不可用)。

Hadoop被認為是可靠的、可擴展的、可容錯的,MapReduce雖然適合於處理大數據的應用,但對於不合適與叠代算法和低延遲的應用,因為MapReduce為了提供容錯而依賴於持久化的數據,在運行分析查詢之前,需將整個數據集加載到系統,這就是為什麽Spark誕生的原因。

Spark也是一種處理大數據應用的集群計算框架和引擎,它在內存裏構建了一個分布式的對象集合,即Resilent Distrubted Dataset(RDD),然後對這些數據集執行各類平行計算。Spark在叠代機器學習任務中的性能是MapReduce的10倍以上,甚至在某些叠代應用超過20倍。

Hadoop & Spark