在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 大數(shù)據(jù)/ MapReduce - Shuffle
YARN - Failover
MapReduce - Shuffle
Hadoop配置
MapReduce - 讀取數(shù)據(jù)
Hadoop - MapReduce
YARN - Container
Hadoop 測試
MapReduce - Mapper
Hadoop - 參考
YARN - ResourceManager
HDFS - 可靠性
HDFS - 讀文件
Hadoop - 簡介
YARN - ApplicationMaster
Hadoop - IO
Hadoop 監(jiān)控
MapReduce - 編程
Hadoop - YARN
Hadoop - HDFS
HDFS - 命令工具
HDFS - 寫文件
YARN - NodeManager
Hadoop安裝

MapReduce - Shuffle

對Map的結(jié)果進行排序并傳輸?shù)絉educe進行處理 Map的結(jié)果并不#x662F;直接存放到硬盤,而是利用緩存做一些預排序處理 Map會調(diào)用Combiner,壓縮,按key進行分區(qū)、排序等,盡量減少結(jié)果的大小 每個Map完成后都會通知Task,然后Reduce就可以進行處理

http://wiki.jikexueyuan.com/project/hadoop/images/mapreduce-process.png" alt="" />

Map端

當Map程序開始產(chǎn)生結(jié)果的時候,并不是直接寫到文件的,而是利用緩存做一些排序方面的預處理操作

每個Map任務都有一個循環(huán)內(nèi)存緩沖區(qū)(默認100MB),當緩存的內(nèi)容達到80%時,后臺線程開始將內(nèi)容寫到文件,此時Map任務可以&#x#x7EE7;續(xù)輸出結(jié)果,但如果緩沖區(qū)滿了,Map任務則需要等待

寫文件使用round-robin方式。在寫入文件之前,先將數(shù)據(jù)按照Reduce進行分區(qū)。對于每一個分區(qū),都會在內(nèi)存中根據(jù)key進行排序,如果配置了Combiner,則排序后執(zhí)行Combiner(Combine之后可以減少寫入文件和傳輸?shù)臄?shù)據(jù))

每次結(jié)果達到緩沖區(qū)的閥值時,都會創(chuàng)建一個文件,在Map結(jié)束時,可能會產(chǎn)生大量的文件。在Map完成前,會將這些文件進行合并和排序。如果文件的數(shù)量超過3個,則&##x5408;并后會再次運行Combiner(1、2個文件就沒有必要了)

如果配置了壓縮,則最終寫入的文件會先進行壓縮,這樣可以減少寫入和傳輸?shù)臄?shù)據(jù)

一旦Map完成,則通知任務管理器,此時Reduce就可以開始復制結(jié)果數(shù)據(jù)

Reduce端

Map的結(jié)果文件都存放到運行Map任務的機器的本地硬盤中

如果Map的結(jié)果很少,則直接放到內(nèi)存,否則寫入文件中

同時后臺線程將這些文件進行合并和排序到一個更大的文件中(如果文件是壓縮的?#xFF0C;則需要先解壓)

當所有的Map結(jié)果都被復制和合并后,就會調(diào)用Reduce方法

Reduce結(jié)果會寫入到HDFS中

調(diào)優(yōu)

一般的原則是給shuffle分配盡可能多的內(nèi)存,但前提是要保證Map、Reduce任務有足夠的內(nèi)存

對于Map,主要就是避免把文件寫入磁盤,例如使用Combiner,增大io.sort.mb的值

對于Reduce,主要是把Map的結(jié)果盡可能地保存到內(nèi)存中,同樣也是要避免把中間結(jié)果寫入磁盤。默認情況下,所有的內(nèi)存都是分配給Reduce方法的,如果Reduce方法不怎&##x4E48;消耗內(nèi)存,可以mapred.inmem.merge.threshold設成0,mapred.job.reduce.input.buffer.percent設成1.0

在任務監(jiān)控中可通過Spilled records counter來監(jiān)控寫入磁盤的數(shù),但這個值是包括map和reduce的

對于IO方面,可以Map的結(jié)果可以使用壓縮,同時增大buffer size(io.file.buffer.size,默認4kb)

配置

屬性 默認值 描述
io.sort.mb 100 映射輸出分類時所使用緩沖區(qū)的大小.
io.sort.record.percent 0.05 剩余空間用于映射輸出自身記錄.在1.X發(fā)布后去除此屬性.隨機代碼用于使用映射所有內(nèi)存并記錄信息.
io.sort.spill.percent 0.80 針對映射輸出內(nèi)存緩沖和記錄索引的閾值使用比例.
io.sort.factor 10 文件分類時合并流的最大數(shù)量。此屬性也用于reduce。通常把數(shù)字設為100.
min.num.spills.for.combine 3 組合運行所需最小溢出文件數(shù)目.
mapred.compress.map.output false 壓縮映射輸出.
mapred.map.output.compression.codec DefaultCodec 映射輸出所需的壓縮解編碼器.
mapred.reduce.parallel.copies 5 用于向reducer傳送映射輸出的線程數(shù)目.
mapred.reduce.copy.backoff 300 時間的最大數(shù)量,以秒為單位,這段時間內(nèi)若reducer失敗則會反復嘗試傳輸
io.sort.factor 10 組合運行所需最大溢出文件數(shù)目.
mapred.job.shuffle.input.buffer.percent 0.70 隨機復制階段映射輸出緩沖器的堆棧大小比例
mapred.job.shuffle.merge.percent 0.66 用于啟動合并輸出進程和磁盤傳輸?shù)挠成漭敵鼍彌_器的閥值使用比例
mapred.inmem.merge.threshold 1000 用于啟動合并輸出和磁盤傳輸進程的映射輸出的閥值數(shù)目。小于等于0意味著沒有門檻,而溢出行為由 mapred.job.shuffle.merge.percent單獨管理.
mapred.job.reduce.input.buffer.percent 0.0 用于減少內(nèi)存映射輸出的堆棧大小比例,內(nèi)存中映射大小不得超出此值。若reducer需要較少內(nèi)存則可以提高該值.
上一篇:HDFS - 命令工具下一篇:YARN - Failover