hadoop MapReduce簡介和安裝(三)

2021-07-11 22:59:37 字數 3141 閱讀 2620

一、mapreduce概述

mapreduce,簡稱mr,分布式計算框架,hadoop核心元件。分布式計算框架還有storm, spark等,它們不是誰替換誰關係,而是哪乙個更適合的問題。

mapreduce是離線計算框架,storm是流式計算框架,spark是記憶體計算框架,適合快速得到結果的專案。

二、mapreduce設計理念

三、mapreduce工作原理

摘自:

流程分析

map端

1.每個輸入分片會讓乙個map任務來處理,預設情況下,以hdfs的乙個塊的大小(預設為64m)為乙個分片,當然我們也可以設定塊的大小。map輸出的結果會暫且放在乙個環形記憶體緩衝區中(該緩衝區的大小預設為100m,由io.sort.mb屬性控制),當該緩衝區快要溢位時(預設為緩衝區大小的80%,由io.sort.spill.percent屬性控制),會在本地檔案系統中建立乙個溢位檔案,將該緩衝區中的資料寫入這個檔案。

2.在寫入磁碟之前,執行緒首先根據reduce任務的數目將資料劃分為相同數目的分割槽,也就是乙個reduce任務對應乙個分割槽的資料。這樣做是為了避免有些reduce任務分配到大量資料,而有些reduce任務卻分到很少資料,甚至沒有分到資料的尷尬局面。其實分割槽就是對資料進行hash的過程。然後對每個分割槽中的資料進行排序,如果此時設定了combiner,將排序後的結果進行combia操作,這樣做的目的是讓盡可能少的資料寫入到磁碟。

3.當map任務輸出最後乙個記錄時,可能會有很多的溢位檔案,這時需要將這些檔案合併。合併的過程中會不斷地進行排序和combia操作,目的有兩個:1.儘量減少每次寫入磁碟的資料量;2.儘量減少下一複製階段網路傳輸的資料量。最後合併成了乙個已分割槽且已排序的檔案。為了減少網路傳輸的資料量,這裡可以將資料壓縮,只要將mapred.compress.map.out設定為true就可以了。

4.將分割槽中的資料拷貝給相對應的reduce任務。有人可能會問:分割槽中的資料怎麼知道它對應的reduce是哪個呢?其實map任務一直和其父tasktracker保持聯絡,而tasktracker又一直和jobtracker保持心跳。所以jobtracker中儲存了整個集群中的巨集觀資訊。只要reduce任務向jobtracker獲取對應的map輸出位置就ok了哦。

到這裡,map端就分析完了。那到底什麼是shuffle呢?shuffle的中文意思是「洗牌」,如果我們這樣看:乙個map產生的資料,結果通過hash過程分割槽卻分配給了不同的reduce任務,是不是乙個對資料洗牌的過程呢?

reduce端

1.reduce會接收到不同map任務傳來的資料,並且每個map傳來的資料都是有序的。如果reduce端接受的資料量相當小,則直接儲存在記憶體中(緩衝區大小由mapred.job.shuffle.input.buffer.percent屬性控制,表示用作此用途的堆空間的百分比),如果資料量超過了該緩衝區大小的一定比例(由mapred.job.shuffle.merge.percent決定),則對資料合併後溢寫到磁碟中。

2.隨著溢寫檔案的增多,後台執行緒會將它們合併成乙個更大的有序的檔案,這樣做是為了給後面的合併節省時間。其實不管在map端還是reduce端,mapreduce都是反覆地執行排序,合併操作,現在終於明白了有些人為什麼會說:

排序是hadoop的靈魂。

3.合併的過程中會產生許多的中間檔案(寫入磁碟了),但mapreduce會讓寫入磁碟的資料盡可能地少,並且最後一次合併的結果並沒有寫入磁碟,而是直接輸入到reduce函式。

四、安裝mapreduce

現在有node1,node2,node3三個伺服器,其中node1是namenode,node2,node3是datanode,node2也是secondarynamenode,把mapreduce安裝到node1伺服器

1、關閉node1防火牆

systemctl stop iptables.service
2、node1上配置mapreduce主伺服器 conf/mapred_site.xml,從伺服器是datanode伺服器

mapred.job.tracker

node1:9001

3、拷貝node1的mapred_site.xml到node2,node3

scp ./mapred-site.xml root@node2:~/hadoop-1.2.1/conf/
scp ./mapred-site.xml root@node3:~/hadoop-1.2.1/conf/
4、啟動

node1,進入hadoop-1.2.1/bin

執行./hadoop namenode -format

結果node1

hadoop map reduce 階段筆記

shuffle and sort mr 框架保證 每個 reducer 的輸入都是按照 key 鍵排過序的。shuffle 將map輸出結果送到reducer和排序的功能。1 map 每個map task將結果輸出到環形記憶體緩衝區,當到達一定閾值,則啟動乙個後台程序將快取中的資料 1 按照 red...

Hadoop MapReduce 效能優化

我們時常談論說到mapreduce時,我們都會說它是離線計算框架,磁碟io開銷大,job執行比較慢等等。這一篇部落格,南國系統回顧下mr程式執行慢的原因,以及如何優化mr程式。我們都知道mapreduce是離線計算框架,不同於spark記憶體計算框架模型。乙個標準的mr程式由map方法和reduce...

九 hadoop mapreduce分割槽

一 什麼時候分割槽?1 分割槽的實現 通過繼承partitioner類,實現getpartition方法。public int getpartition key key,value value,int reducetasknumber map結束後得到的每個key value都呼叫該方法,並把key...