Hadoop大數據平台入門——HDFS和MapReduce


隨着硬件水平的不斷提高,需要處理數據的大小也越來越大。大家都知道,現在大數據有多火爆,都認為21世紀是大數據的世紀。當然我也想打上時代的便車。所以今天來學習一下大數據存儲和處理。

隨着數據的不斷變大,數據的處理就出現了瓶頸:存儲容量,讀寫速率,計算效率等等。

google不愧是走在世界前列的大公司,為了處理大數據,google提出了大數據技術,MapReduce,BigTable和GFS。

這個技術給大數據處理帶來了巨大的變革。

1.降低了大數據處理的成本,用PC機就可以處理大數據,而不需要采用大型機和高端設備進行存儲。

2.將硬件故障視為常態的基礎上,采用了軟件容錯的方法,保證軟件的可靠性。

3.簡化並行分布式計算,不需要控制節點的同步和數據的交換,降低了大數據處理的門檻。

 

雖然google的技術非常好,但是google並沒有將技術開源。不過值得慶幸的是,模仿google大數據的開源實現,Hadoop的出現了。

 

Hadoop是什么

Hadoop主要完成兩件事,分布式存儲和分布式計算。

Hadoop主要由兩個核心部分組成:

1.HDFS:分布式文件系統,用來存儲海量數據。

2.MapReduce:並行處理框架,實現任務分解和調度。

 

Hadoop能做什么

Hadoop能完成大數據的存儲,處理,分析,統計等業務,在數據挖掘等方面應用廣泛。

 

Hadoop的優勢

1.高擴展性。簡單的增加硬件就可以達到效果的提高。

2.低成本,用PC機就能做到。

3.Hadoop具有成熟的生態圈,比如Hive,Hbase,zookeeper等,讓Hadoop用起來更方便。

 

說了這么多,我們還沒了解Hadoop的機制。

我們首先就需要了解Hadoop的兩個核心組成:HDFS和MapReduce。

 

HDFS是什么呢?

前面說過,HDFS是一個分布式文件系統,用來存儲和讀取數據的。

文件系統都有最小處理單元,而HDFS的處理單元是塊。HDFS保存的文件被分成塊進行存儲,默認的塊大小是64MB。

並且在HDFS中有兩類節點:

1.NameNode和DataNode。

NameNode:

NameNode是管理節點,存放文件元數據。也就是存放着文件和數據塊的映射表,數據塊和數據節點的映射表。

也就是說,通過NameNode,我們就可以找到文件存放的地方,找到存放的數據。

DataNode:

DataNode是工作節點,用來存放數據塊,也就是文件實際存儲的地方。

這么說有點抽象,讓我們來看圖:

客戶端向NameNode發起讀取元數據的消息,NameNode就會查詢它的Block Map,找到對應的數據節點。然后客戶端就可以去對應的數據節點中找到數據塊,拼接成文件就可以了。這就是讀寫的流程。

作為分布式應用,為了達到軟件的可靠性,如圖上所示,每個數據塊都有三個副本,並且分布在兩個機架上。

這樣一來,如果某個數據塊壞了,能夠從別的數據塊中讀取,而當如果一個機架都壞了,還可以從另一個機架上讀取,從而實現高可靠。

我們從上圖還可以看到,因為數據塊具有多個副本,NameNode要知道那些節點是存活的吧,他們之間的聯系是依靠心跳檢測來實現的。這也是很多分布式應用使用的方法了。

我們還可以看到,NameNode也有一個Secondary NameNode,萬一NameNode出故障了,Secondary就會成替補,保證了軟件的可靠性。

 

HDFS具有什么特點呢?

1.數據冗余,軟件容錯很高。

2.流失數據訪問,也就是HDFS一次寫入,多次讀寫,並且沒辦法進行修改,只能刪除之后重新創建

3.適合存儲大文件。如果是小文件,而且是很多小文件,連一個塊都裝不滿,並且還需要很多塊,就會極大浪費空間。

 

HDFS的適用性和局限性:

1.數據批量讀寫,吞吐量高。

2.不適合交互式應用,延遲較高。

3.適合一次寫入多次讀取,順序讀取。

4.不支持多用戶並發讀寫文件。

 

了解完了HDFS,就輪到MapReduce了。

 

MapReduce是什么:

MapReduce是並行處理框架,實現任務分解和調度。

其實原理說通俗一點就是分而治之的思想,將一個大任務分解成多個小任務(map),小任務執行完了之后,合並計算結果(reduce)。

也就是說,JobTracker拿到job之后,會把job分成很多個maptask和reducetask,交給他們執行。 MapTask、ReduceTask函數的輸入、輸出都是<key,value>的形式。HDFS存儲的輸入數據經過解析后,以鍵值對的形式,輸入到MapReduce()函數中進行處理,輸出一系列鍵值對作為中間結果,在Reduce階段,對擁有同樣Key值的中間數據進行合並形成最后結果。

首先我們需要先知道幾個小概念:

1.job  2.task  3.jobTracker  4.taskTracker

job:在Hadoop內部,用Job來表示運行的MapReduce程序所需要用到的所有jar文件和類的集合,>這些文件最終都被整合到一個jar文件中,將此jar文件提交給JobTraker,MapReduce程序就會執行。

task:job會分成多個task。分為MapTask和ReduceTask。

jobTracker:管理節點。將job分解為多個map任務和reduce任務。

作用:
1.作業調度
2.分配任務,監控任務執行進度
3.監控TaskTracker狀態

taskTracker:任務節點。一般和dataNode為同一個節點,這樣計算可以跟着數據走,開銷最小化。

作用:

1.執行任務

2.匯報任務狀態

 

在MapReduce中,也有容錯機制。

1.重復執行。一個job最多被執行4次。

2.推測執行。因為Map全部算完之后才會執行Reduce,如果其中一個Map很慢,就會多開一個task來完成同樣的工作,哪個執行的快用哪個。

 

這樣,我們就大致了解了Hadoop其中的原理,主要了解HDFS文件系統的存儲過程和MapReduce的作業調度分配過程。

 

長按識別關注我們,每天都有精彩內容分享哦!~

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM