1. 程式人生 > >Hadoop大資料平臺入門——HDFS和MapReduce

Hadoop大資料平臺入門——HDFS和MapReduce

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

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

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,我們就可以找到檔案存放的地方,找到存放的資料。 大資料學習資料分享群119599574

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函式的輸入、輸出都是的形式。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的作業排程分配過程。