Hadoop面試問題和回答2

Hadoop面試問題和回答2

[toc]

參考:徹底了解mapreduce核心Shuffle--解惑各種mapreduce問題

1 shuffle 是什么侦副? 怎么調(diào)優(yōu)?

shuffle將map的輸出作為reduce端的輸入液兽,包括map端的combine和partition,以及reduce端的copy和combine掌动;
其目的就是:完整地從map task端拉取數(shù)據(jù)到reduce 端四啰;在跨節(jié)點(diǎn)拉取數(shù)據(jù)時(shí),盡可能地減少對帶寬的不必要消耗粗恢,減少磁盤IO對task執(zhí)行的影響柑晒。


map task
reduce task

調(diào)優(yōu):
減少I/O操作和提高網(wǎng)絡(luò)傳輸效率

2 每個map task都有一個內(nèi)存緩沖區(qū),存儲著map的輸出結(jié)果眷射,當(dāng)緩沖區(qū)快滿的時(shí)候需要將緩沖區(qū)的數(shù)據(jù)該如何處理匙赞?

每個map task都有一個內(nèi)存緩沖區(qū),存儲著map的輸出結(jié)果妖碉,當(dāng)緩沖區(qū)快滿的時(shí)候罚屋,需要將緩沖區(qū)的數(shù)據(jù)以一個臨時(shí)文件的方式存放到磁盤,當(dāng)整個map task結(jié)束后再對磁盤中這個map task產(chǎn)生的所有臨時(shí)文件進(jìn)行合并嗅绸,生成最終的正式輸出文件脾猛,然后等待reduce task來拉數(shù)據(jù)。

3 MapReduce提供Partitioner接口鱼鸠,它的作用是什么猛拴?

根據(jù)key或value及reduce的數(shù)量來決定當(dāng)前的這對輸出數(shù)據(jù)最終應(yīng)該交由哪個reduce處理。默認(rèn)對key hash后再以reduce數(shù)量取模蚀狰。默認(rèn)的取模方式只是為了平均reduce的處理能力愉昆,防止數(shù)據(jù)傾斜;如果用戶自己對Partitioner有需求麻蹋,可以訂制并設(shè)置到j(luò)ob上跛溉。

4 溢寫是為什么不影響往緩沖區(qū)寫map結(jié)果的線程?

關(guān)鍵詞:閾值 啟動 鎖定 執(zhí)行
溢寫線程啟動時(shí)不應(yīng)該阻止map的結(jié)果輸出扮授,所以整個緩沖區(qū)有個溢寫的比例spill.percent芳室。這個比例默認(rèn)是0.8,也就是當(dāng)緩沖區(qū)的數(shù)據(jù)已經(jīng)達(dá)到閾值(buffer size * spill percent = 100MB * 0.8 = 80MB)刹勃,溢寫線程啟動堪侯,鎖定這80MB的內(nèi)存,執(zhí)行溢寫過程荔仁。Map task的輸出結(jié)果還可以往剩下的20MB內(nèi)存中寫伍宦,互不影響芽死。

5 當(dāng)溢寫線程啟動后,需要對這80MB空間內(nèi)的key做排序(Sort)次洼。排序是MapReduce模型默認(rèn)的行為关贵,這里的排序也是對誰的排序?

關(guān)鍵字:序列化字節(jié)
當(dāng)溢寫線程啟動后卖毁,需要對這80MB空間內(nèi)的key做排序(Sort)坪哄。排序是MapReduce模型默認(rèn)的行為,這里的排序也是對序列化的字節(jié)做的排序势篡。

6 溢寫過程中如果有很多個key/value對需要發(fā)送到某個reduce端去翩肌,那么如何處理這些key/value值?

關(guān)鍵字:拼接 減少索引
如果有很多個key/value對需要發(fā)送到某個reduce端去禁悠,那么需要將這些key/value值拼接到一塊念祭,減少與partition相關(guān)的索引記錄。

7 哪些場景才能使用Combiner呢碍侦?

關(guān)鍵字:類型一致 不影響 累加 最大值
Combiner的輸出是Reducer的輸入粱坤,Combiner絕不能改變最終的計(jì)算結(jié)果。所以從我的想法來看瓷产,Combiner只應(yīng)該用于那種Reduce的輸入key/value與輸出key/value類型完全一致站玄,且不影響最終結(jié)果的場景。比如累加濒旦,最大值等株旷。Combiner的使用一定得慎重,如果用好尔邓,它對job執(zhí)行效率有幫助晾剖,反之會影響reduce的最終結(jié)果。

8 Merge的作用是什么梯嗽?

關(guān)鍵字:歸并 溢寫文件 過程
最終磁盤中會至少有一個這樣的溢寫文件存在(如果map的輸出結(jié)果很少齿尽,當(dāng)map執(zhí)行完成時(shí),只會產(chǎn)生一個溢寫文件)灯节,因?yàn)樽罱K的文件只有一個循头,所以需要將這些溢寫文件歸并到一起,這個過程就叫做Merge

9 每個reduce task不斷的通過什么協(xié)議從JobTracker那里獲取map task是否完成的信息炎疆?

關(guān)鍵字:RPC
每個reduce任務(wù)不斷地通過RPC從JobTracker那里獲取map任務(wù)是否完成的信息卡骂。

10 reduce中Copy過程采用是什么協(xié)議?

關(guān)鍵字:拉取 fetcher http
Copy過程磷雇,簡單地拉取數(shù)據(jù)偿警。Reduce進(jìn)程啟動一些數(shù)據(jù)copy線程(Fetcher),通過HTTP方式請求map任務(wù)所在的TaskTracker獲取map任務(wù)的輸出文件唯笙。

11 reduce中merge過程有幾種方式螟蒸?

關(guān)鍵字:閾值 溢寫 merge 結(jié)束
merge有三種形式:

  1. 內(nèi)存到內(nèi)存
  2. 內(nèi)存到磁盤
  3. 磁盤到磁盤。

默認(rèn)情況下第一種形式不啟用崩掘,讓人比較困惑七嫌,是吧。當(dāng)內(nèi)存中的數(shù)據(jù)量到達(dá)一定閾值苞慢,就啟動內(nèi)存到磁盤的merge诵原。與map 端類似,這也是溢寫的過程挽放,這個過程中如果你設(shè)置有Combiner绍赛,也是會啟用的,然后在磁盤中生成了眾多的溢寫文件辑畦。第二種merge方式一直在運(yùn)行吗蚌,直到?jīng)]有map端的數(shù)據(jù)時(shí)才結(jié)束,然后啟動第三種磁盤到磁盤的merge方式生成最終的那個文件纯出。

12 Combiner 過程是 屬于map階段還是屬于reduce階段蚯妇?

關(guān)鍵字:聚合 排序 迭代 一個map 多個map
combiner最基本是實(shí)現(xiàn)本地key的聚合,對map輸出的key排序暂筝,value進(jìn)行迭代箩言。
combiner的目的是減少map網(wǎng)絡(luò)流量。
combiner的對象是對于map
combiner具有和reduce相似的功能焕襟,是一個Reducer的實(shí)現(xiàn)類陨收。只不過combiner合并對象,是對于一個map鸵赖。reduce合并對象畏吓,是對于多個map。

13 map和reduce的數(shù)量怎么設(shè)定卫漫?

map的數(shù)量:
通常是由hadoop集群的DFS塊大小確定的菲饼,也就是輸入文件的總塊數(shù),正常的map數(shù)量的并行規(guī)模大致是每一個Node是10~100個列赎。通過conf.setNumMapTasks(int num)設(shè)置宏悦;
reduce的數(shù)量:
正確的reduce任務(wù)的個數(shù)應(yīng)該是0.95或者1.75 *(節(jié)點(diǎn)數(shù) ×mapred.tasktracker.tasks.maximum參數(shù)值)。如果任務(wù)數(shù)是節(jié)點(diǎn)個數(shù)的0.95倍包吝,那么所有的reduce任務(wù)能夠在 map任務(wù)的輸出傳輸結(jié)束后同時(shí)開始運(yùn)行饼煞。如果任務(wù)數(shù)是節(jié)點(diǎn)個數(shù)的1.75倍,那么高速的節(jié)點(diǎn)會在完成他們第一批reduce任務(wù)計(jì)算之后開始計(jì)算第二批 reduce任務(wù)诗越,這樣的情況更有利于負(fù)載均衡砖瞧。通過conf.setNumReduceTasks(int num)設(shè)置。

參考:hadoop中map和reduce的數(shù)量設(shè)置問題


                                Boy-20180330-15:20
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嚷狞,一起剝皮案震驚了整個濱河市块促,隨后出現(xiàn)的幾起案子荣堰,更是在濱河造成了極大的恐慌,老刑警劉巖竭翠,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件振坚,死亡現(xiàn)場離奇詭異,居然都是意外死亡斋扰,警方通過查閱死者的電腦和手機(jī)渡八,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來传货,“玉大人屎鳍,你說我怎么就攤上這事∥试#” “怎么了逮壁?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長僻澎。 經(jīng)常有香客問我貌踏,道長,這世上最難降的妖魔是什么窟勃? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任祖乳,我火速辦了婚禮,結(jié)果婚禮上秉氧,老公的妹妹穿的比我還像新娘眷昆。我一直安慰自己,他們只是感情好汁咏,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布亚斋。 她就那樣靜靜地躺著,像睡著了一般攘滩。 火紅的嫁衣襯著肌膚如雪帅刊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天漂问,我揣著相機(jī)與錄音赖瞒,去河邊找鬼。 笑死蚤假,一個胖子當(dāng)著我的面吹牛栏饮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播磷仰,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼袍嬉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了灶平?” 一聲冷哼從身側(cè)響起伺通,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤箍土,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后泵殴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涮帘,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拼苍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年笑诅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疮鲫。...
    茶點(diǎn)故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡吆你,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出俊犯,到底是詐尸還是另有隱情妇多,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布燕侠,位于F島的核電站者祖,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏绢彤。R本人自食惡果不足惜七问,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望茫舶。 院中可真熱鬧械巡,春花似錦、人聲如沸饶氏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽疹启。三九已至古程,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間喊崖,已是汗流浹背挣磨。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贷祈,地道東北人趋急。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像势誊,于是被迫代替她去往敵國和親呜达。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容