1概述
1.1目的
初步了解hadoop,初步掌握hadoop環(huán)境的部署方法。
1.2基本概念
hadoop的核心主要包含:HDFS和MapReduce
HDFS是分布式文件系統(tǒng),用于分布式存儲海量數(shù)據(jù)。
MapReduce是分布式數(shù)據(jù)處理模型,本質(zhì)是并行處理
2基本概念
2.1HDFS
2.1.1HDFS是什么?
HADOOP DISTRIBUTED FILE SYSTEM,簡稱HDFS,是一個分布式文件系統(tǒng)。它是谷歌的GFS提出之后出現(xiàn)的另外一種文件系統(tǒng)。它有一定高度的容錯性,而且提供了高吞吐量的數(shù)據(jù)訪問,非常適合大規(guī)模數(shù)據(jù)集上的應用。HDFS 提供了一個高度容錯性和高吞吐量的海量數(shù)據(jù)存儲解決方案。
在最初,HADOOP是作為Apache Nutch搜索引擎項目的基礎架構(gòu)而開發(fā)的,后來由于它獨有的特性,讓它成為HADOOP CORE項目的一部分。
2.1.2HDFS的設計思路?
是什么提供它高吞吐量的數(shù)據(jù)訪問和適合大規(guī)模數(shù)據(jù)集的應用的特性呢,這就要說一下它的設計思路。
首先HDFS的設計之初就是針對超大文件的存儲的,小文件不會提高訪問和存儲速度,反而會降低;其次它采用了最高效的訪問模式,也就是經(jīng)常所說的流式數(shù)據(jù)訪問,特點就是一次寫入多次讀取;再有就是它運行在普通的硬件之上的,即使硬件故障,也就通過容錯來保證數(shù)據(jù)的高可用。
2.1.3HDFS的一些概念
Block:大文件的存儲會被分割為多個block進行存儲。默認為64MB,每一個blok會在多個datanode上存儲多份副本,默認為3份。[這些設置都能夠通過配置文件進行更改]
Namenode:主要負責存儲一些metadata信息,主要包括文件目錄、block和文件對應關系,以及block和datanote的對應關系
Datanode:負責存儲數(shù)據(jù),上面我們所說的高度的容錯性大部分在datanode上實現(xiàn)的[還有一部分容錯性是體現(xiàn)在namenode和secondname,還有jobtracker的容錯等]。
2.1.4HDFS的基礎架構(gòu)圖
HDFS的基礎架構(gòu)圖
2.1.5解析HDFS帶來的好處
高吞吐量訪問:HDFS的每個block分布在不同的rack上,在用戶訪問時,HDFS會計算使用最近和訪問量最小的服務器給用戶提供。由于block在不同的rack上都有備份,所以不再是單數(shù)據(jù)訪問,所以速度和效率是非常快的。另外HDFS可以并行從服務器集群中讀寫,增加了文件讀寫的訪問帶寬。
高容錯性:上面簡單的介紹了一下高度容錯。系統(tǒng)故障是不可避免的,如何做到故障之后的數(shù)據(jù)恢復和容錯處理是至關重要的。HDFS通過多方面保證數(shù)據(jù)的可靠性,多分復制并且分布到物理位置的不同服務器上,數(shù)據(jù)校驗功能、后臺的連續(xù)自檢數(shù)據(jù)一致性功能,都為高容錯提供了可能。
容量擴充:因為HDFS的block信息存放到namenode上,文件的block分布到datanode上,當擴充的時候,僅僅添加datanode數(shù)量,系統(tǒng)可以在不停止服務的情況下做擴充,不需要人工干預。
2.2MapReduce
從它名字上來看就大致可以看出個緣由,兩個動詞Map和Reduce。
Map(展開)就是將一個任務分解成為多個任務,Reduce就是將分解后多任務處理的結(jié)果匯總起來,得出最后的分析結(jié)果。
2.2.1MapReduce原理
在Hadoop中,每個MapReduce任務都被初始化為一個Job,每個Job又可以分為兩種階段:map階段和reduce階段。這兩個階段分別用兩個函數(shù)表示,即map函數(shù)和reduce函數(shù)。map函數(shù)接收一個
2.2.2Map的過程
MapRunnable從input split中讀取一個個的record,然后依次調(diào)用Mapper的map函數(shù),將結(jié)果輸出。map的輸出并不是直接寫入硬盤,而是將其寫入緩存memory buffer。當buffer中數(shù)據(jù)的到達一定的大小,一個背景線程將數(shù)據(jù)開始寫入硬盤。在寫入硬盤之前,內(nèi)存中的數(shù)據(jù)通過partitioner分成多個partition。在同一個partition中,背景線程會將數(shù)據(jù)按照key在內(nèi)存中排序。每次從內(nèi)存向硬盤flush數(shù)據(jù),都生成一個新的spill文件。
當此task結(jié)束之前,所有的spill文件被合并為一個整的被partition的而且排好序的文件。reducer可以通過http協(xié)議請求map的輸出文件,tracker.http.threads可以設置http服務線程數(shù)。
2.2.3Reduce的過程
當map task結(jié)束后,其通知TaskTracker,TaskTracker通知JobTracker。對于一個job,JobTracker知道TaskTracer和map輸出的對應關系。reducer中一個線程周期性的向JobTracker請求map輸出的位置,直到其取得了所有的map輸出。reduce task需要其對應的partition的所有的map輸出。reduce task中的copy過程即當每個map task結(jié)束的時候就開始拷貝輸出,因為不同的map task完成時間不同。reduce task中有多個copy線程,可以并行拷貝map輸出。當很多map輸出拷貝到reduce task后,一個背景線程將其合并為一個大的排好序的文件。當所有的map輸出都拷貝到reduce task后,進入sort過程,將所有的map輸出合并為大的排好序的文件。最后進入reduce過程,調(diào)用reducer的reduce函數(shù),處理排好序的輸出的每個key,最后的結(jié)果寫入HDFS。
-
Hadoop
+關注
關注
1文章
90瀏覽量
15914 -
HDFS
+關注
關注
1文章
30瀏覽量
9537
發(fā)布評論請先 登錄
相關推薦
評論