MR的分片机制
分片機(jī)制
分片簡(jiǎn)介
Hadoop將MapReduce的MapReduce的輸入數(shù)據(jù)劃分為等長(zhǎng)的小數(shù)據(jù)塊,稱之為輸入分片(inputSpilt)或者簡(jiǎn)稱“分片”Hadoop為為一個(gè)分片構(gòu)建一個(gè)單獨(dú)的map任務(wù),并由該任務(wù)來(lái)運(yùn)行用戶自定義的map方法,從而處理分片的每一條數(shù)據(jù)分片大小的選擇
1. 擁有許多分片,每個(gè)分片所需時(shí)間小于整體的時(shí)間 2. 并行處理分片,且每個(gè)分片比較小,負(fù)載均衡,好的計(jì)算機(jī)處理更快,可以騰出時(shí)間做其他計(jì)算 3. 分片太小,管理分片的時(shí)間和構(gòu)建map的時(shí)間將會(huì)決定整個(gè)作業(yè)執(zhí)行使時(shí)間 4. 分片跨數(shù)據(jù)塊會(huì)使占用帶寬效率更低 5. 最佳分片大小應(yīng)該和HDFS的塊大小一致。hadoop2.x默認(rèn)128M創(chuàng)建分片的過(guò)程
1.獲取文件的位置以及大小 2.判斷文件是否可以分片(壓縮格式有的可以分片,有的不行) 3.獲取分片大小 4.剩余文件的大小/分片的大小>1.1時(shí)循環(huán)封裝分片的信息,1.封裝一個(gè)分片的信息(包含路徑,分片的起使偏移量,要處理的大小,分片包含的塊信息,分片中包含的塊在那些機(jī)器上)2.剩余文件<1.1且不為零形成一個(gè)分片,hadoop分片允許10%的冗余讀取分片的細(xì)節(jié):如果有多個(gè)分片
- 第一個(gè)分片讀到末尾再多讀一行
- 因?yàn)橐话銇?lái)說(shuō)讀到最后一行的時(shí)候有很大可能不是正好一行結(jié)束因此可以一般要多讀取一行。
- 既不是第一個(gè)分片也不是最后一個(gè)分片第一行數(shù)據(jù)舍棄,末尾多讀一行
- 舍棄是因?yàn)樯弦粋€(gè)塊已經(jīng)讀過(guò)了
- 最后一個(gè)分片舍棄第一行,末尾多讀一行
MapTask的執(zhí)行流程
1.根據(jù)分片機(jī)制將文件分為多個(gè)片每個(gè)分片對(duì)應(yīng)一個(gè)container,map調(diào)用FileInputFormat的
getRecordReader讀取分片數(shù)據(jù)
2.MapTask每次讀取數(shù)據(jù),讀取一行返回一個(gè)<K,V>鍵值對(duì),其中K是偏移量,V是一行數(shù)據(jù)
3.將K,V對(duì)叫給MapTask處理,每讀取一行就要進(jìn)行一次MapTask
4.每對(duì)鍵值對(duì)調(diào)用一次map(K,V,context)方法,然后使用context.write(K,V)寫(xiě)出
5.寫(xiě)出的數(shù)據(jù)通過(guò)收集器OutputCollector.collector()處理
6.寫(xiě)到環(huán)形緩沖區(qū)中(環(huán)形緩沖區(qū)默認(rèn)大小為100M,緩沖區(qū)中存儲(chǔ)的有原始數(shù)據(jù)從順時(shí)針?lè)较驅(qū)懭?br /> ,將原始數(shù)據(jù)的偏移量,結(jié)束位置,分片請(qǐng)況等逆時(shí)針寫(xiě)入環(huán)形緩沖區(qū)中)
7.當(dāng)?shù)竭_(dá)閾值默認(rèn)是80%時(shí)開(kāi)始開(kāi)始溢寫(xiě)到磁盤(pán),溢寫(xiě)到磁盤(pán)時(shí)會(huì)進(jìn)行一定的排序)方便使用,并且繼續(xù)寫(xiě)入剩余的20%若是寫(xiě)滿則阻塞。
8默認(rèn)的分區(qū)規(guī)則是hashpatitioner,即key的hash%reduceNum
9. 默認(rèn)的排序規(guī)則是key的字典順序,使用的是快速排序
10. 溢寫(xiě)會(huì)形成多個(gè)文件,在maptask讀取完一個(gè)分片數(shù)據(jù)后,先將環(huán)形緩沖區(qū)數(shù)據(jù)刷寫(xiě)到磁盤(pán)
11將數(shù)據(jù)多個(gè)溢寫(xiě)文件進(jìn)行合并,分區(qū)內(nèi)排序(外部排序===》歸并排序)
reduce
若是數(shù)據(jù)小則放在內(nèi)存暫時(shí)存儲(chǔ)等待處理,若是抓取的數(shù)據(jù)過(guò)多則需要溢寫(xiě)在磁盤(pán)溢寫(xiě)前會(huì)進(jìn)行合,溢寫(xiě)可能會(huì)形成多個(gè)文件,最終要將文件合并,合并時(shí)默認(rèn)最后合并十個(gè)文件
總結(jié)
- 上一篇: 如何使用正则表达式验证电子邮件地址
- 下一篇: 如何将文字翻译成英文?简单教程讲解