1. 程式人生 > >hadoop初級班(三)

hadoop初級班(三)

本教程主要參考hadoop實戰和煉數成金視訊教程

在一個全配置的叢集上,執行hadoop意味著在網路分佈的不同伺服器上執行一組守護程序。這些守護程序有特殊的角色,一些僅存在與單個伺服器上,一些則執行在多個伺服器上,他們包括:NameNode(名位元組點)、DataNode(資料節點)、Secondary NameNode(次名位元組點)、JobTracker(作業跟蹤節點)、TaskTracker(任務跟蹤節點)

NameNode:hadoop在分散式計算與分散式儲存中都採用了主從(master/slave)結構。分散式儲存系統被稱為hadoop檔案系統,或簡稱為HDFS。NameNode位於HDFS的主端,它指導從端的DataNode執行底層的I/O任務。NameNode跟蹤檔案被分成檔案塊,被哪些節點儲存已經執行狀態是否正常。執行NameNode的是伺服器不會執行別的任務,一旦這個伺服器失效,那就完蛋了。DataNode將HDFS資料塊讀取或寫入到本地檔案系統的實際檔案中。當希望對HDFS檔案進行讀寫時,檔案被分割成多個塊,由NameNode告訴客戶端每個資料塊駐留在哪個DataNode。同時DataNode之間互相通訊,實現資料塊的複製。Secondary NameNode是一個用於監測叢集狀態的輔助守護程序。分散式計算也分為主從結構,主就是jobtracker,他負責對提交的應用程式制定計劃,決定怎麼幹。tasktracker其實就是從,管理每個分節點的情況。



hadoop的HDFS:

HDFS也就是hadoop distributed file system,hadoop 分散式檔案系統,一個簡單的操作就是將本地檔案上傳到HDFS,然後MR處理。HDFS的命令樣式:

hadoop fs -cmd 比如 hadoop fs -ls這個就類似於shell中的ls,把HDFS下根目錄的內容列出來

將本地的上傳到HDFS使用put命令,而從HDFS取回用get命令

顯示檔案內容用cat命令  很多shell下能用的HDFS也可以

通過web可以瞭解hadoop的活動

(1)通過用瀏覽器和http訪問obtracker所在節點的50030埠監控jobtracker

(2)通過用瀏覽器和http訪問NameNode所在節點的50070埠監控叢集

HDFS的設計基礎與目標:

1.硬體錯誤是常態的。因此需要冗餘

2.流式資料訪問。即資料批量讀取而非隨機讀寫,hadoop擅長做的就是資料分析而不是事務處理

3.大規模資料集

4.簡單一致性模型,為了降低系統複雜度,對檔案採用一次性寫多次讀的邏輯設計,即是檔案一經寫入,關閉,就再也不能修改

5.程式採用“資料就近“原則分配節點執行

HDFS體系結構包括NameNode、datanode、secondarynamenode、事務日誌和映像檔案。

讀取資料流程:

客戶端要訪問HDFS中的一個檔案,首先從NameNode獲得組成這個檔案的資料塊位置列表,根據列表知道儲存資料塊的datanode,訪問datanode,NameNode並不參與資料實際傳輸

HDFS的可靠性:

冗餘副本策略:可以在hdfs-site.xml中設定複製因子指定副本數量,所有資料塊都有副本

機架策略:一般在本機存放一個副本,在其他機架再存放別的副本,這樣可以防止機架失效時丟失資料,也可以提高頻寬利用率

心跳機制:NameNode週期性從datanode接收心跳訊號和塊報告,NameNode根據塊報告驗證元資料

沒有按時傳送心跳的DataNode會被標記為宕機,不會再給他任何I/O請求

安全模式:在此階段NameNode會收集各個DataNode的報告,當資料塊達到最小副本數以上時,會被認為是安全的。

校驗和:在檔案創立時,每個資料塊都會產生校驗和,校驗和作為單獨一個隱藏檔案儲存在名稱空間下,客戶端獲取資料時可以檢查校驗和是否相同,從而發現數據塊是否損壞,如果損壞,繼續讀取其他副本

回收站:可以快速恢復,可以設定一個時間,當存放超時,徹底刪掉

元資料保護:在NameNode上,副本多了可以增加安全性

快照:HDFS可以恢復到某個時間點

接下來我們開始說mapreduce模型:


這裡的資料是每一行是一個單位資料,要抽取的是每一年最高的溫度,首先對於input資料匯入HDFS,然後split為一行一行的資料,然後進入map,此時的key是行偏移量,不用管,value是每一行。map過程是把每一行的年和溫度提取出來,然後通過一個shuffle的過程,shuffle做了一個sort,為了將同樣的key的value放在一起,然後將資料拷貝到很少的reduce機器上,做一個merge的過程,因為不同的機器上可能有一樣的資料。

然後做reduce的過程,其實就是對之前每一個key對應的list進行遍歷,取最大值,然後輸出即可

Mapper:

Map-Reduce的思想就是”分而治之“  Mapper負責分,即把複雜的任務分解成若干個簡單的任務執行,簡單的任務有幾個含義:1.資料或計算規模相對於原任務要大大縮小 2.就近計算,即會被分到存放了所需資料的節點進行計算 3.這些小任務可以進行平行計算,彼此間幾乎沒有依賴關係

Reducer:

Reduce的數目由mapred-site.xml配置檔案裡的專案 mapred.reduce.tasks決定。預設值為1,使用者可以覆蓋之

Shuffler:

在mapper和reduce之間的一個步驟(可以沒有)

可以把mapper的輸出按照某種key值重新切分和組合成n份,把key值符合某種範圍的輸出送到特定的reducer那裡去處理

可以簡化reducer過程

效能調優:

輸入:大檔案優於小檔案

減少網路傳輸:壓縮map的輸出

優化每個節點能執行的任務數:mapred.tasktracker.map.tasks.maximum和 mapred.tasktracker.reduce.tasks.maximum(預設值均為2)