你準(zhǔn)備好面試了嗎?這里有一些面試中可能會(huì)問(wèn)到的問(wèn)題以及相對(duì)應(yīng)的答案。如果你需要更多的面試經(jīng)驗(yàn)和面試題,關(guān)注一下"張飛的豬大數(shù)據(jù)分享"吧,公眾號(hào)會(huì)不定時(shí)的分享相關(guān)的知識(shí)和資料。
1、MapReduce優(yōu)化方法
1)數(shù)據(jù)輸入
? (1)合并小文件:在執(zhí)行mr任務(wù)前將小文件進(jìn)行合并,大量的小文件會(huì)產(chǎn)生大量的map任務(wù),增大map任務(wù)裝載次數(shù),而任務(wù)的裝載比較耗時(shí),從而導(dǎo)致mr運(yùn)行較慢。
? (2)采用ConbinFileInputFormat來(lái)作為輸入,解決輸入端大量小文件場(chǎng)景。
2)map階段
? (1)減少spill次數(shù):通過(guò)調(diào)整io.sort.mb及sort.spill.percent參數(shù)值,增大觸發(fā)spill的內(nèi)存上限,減少spill次數(shù),從而減少磁盤 IO。
? (2)減少merge次數(shù):通過(guò)調(diào)整io.sort.factor參數(shù),增大merge的文件數(shù)目,減少merge的次數(shù),從而縮短mr處理時(shí)間。
? (3)在 map 之后先進(jìn)行combine處理,減少I/O。
3)reduce階段
? (1)合理設(shè)置map和reduce數(shù):兩個(gè)都不能設(shè)置太少,也不能設(shè)置太多。太少,會(huì)導(dǎo)致task等待,延長(zhǎng)處理時(shí)間;太多,會(huì)導(dǎo)致 map、reduce任務(wù)間競(jìng)爭(zhēng)資源,造成處理超時(shí)等錯(cuò)誤。
? (2)設(shè)置map、reduce共存:調(diào)整slowstart.completedmaps參數(shù),使map運(yùn)行到一定程度后,reduce也開始運(yùn)行,減少reduce的等待時(shí)間。
? (3)規(guī)避使用reduce,因?yàn)镽educe在用于連接數(shù)據(jù)集的時(shí)候?qū)?huì)產(chǎn)生大量的網(wǎng)絡(luò)消耗。
? (4)合理設(shè)置reduce端的buffer,默認(rèn)情況下,數(shù)據(jù)達(dá)到一個(gè)閾值的時(shí)候,buffer中的數(shù)據(jù)就會(huì)寫入磁盤,然后reduce會(huì)從磁盤中獲得所有的數(shù)據(jù)。也就是說(shuō),buffer和reduce是沒有直接關(guān)聯(lián)的,中間多個(gè)一個(gè)寫磁盤->讀磁盤的過(guò)程,既然有這個(gè)弊端,那么就可以通過(guò)參數(shù)來(lái)配置,使得buffer中的一部分?jǐn)?shù)據(jù)可以直接輸送到reduce,從而減少IO開銷:mapred.job.reduce.input.buffer.percent,默認(rèn)為0.0。當(dāng)值大于0的時(shí)候,會(huì)保留指定比例的內(nèi)存讀buffer中的數(shù)據(jù)直接拿給reduce使用。這樣一來(lái),設(shè)置buffer需要內(nèi)存,讀取數(shù)據(jù)需要內(nèi)存,reduce計(jì)算也要內(nèi)存,所以要根據(jù)作業(yè)的運(yùn)行情況進(jìn)行調(diào)整。
4)IO傳輸
? (1)采用數(shù)據(jù)壓縮的方式,減少網(wǎng)絡(luò)IO的的時(shí)間。安裝Snappy和LZOP壓縮編碼器。
? (2)使用SequenceFile二進(jìn)制文件
5)數(shù)據(jù)傾斜問(wèn)題
? (1)數(shù)據(jù)傾斜現(xiàn)象
? ? 數(shù)據(jù)頻率傾斜——某一個(gè)區(qū)域的數(shù)據(jù)量要遠(yuǎn)遠(yuǎn)大于其他區(qū)域。
? ? 數(shù)據(jù)大小傾斜——部分記錄的大小遠(yuǎn)遠(yuǎn)大于平均值。
? (2)如何收集傾斜數(shù)據(jù)
? ? 在reduce方法中加入記錄map輸出鍵的詳細(xì)情況的功能。
public static final String MAX_VALUES = "skew.maxvalues";
private int maxValueThreshold;
@Override
public void configure(JobConf job) {
maxValueThreshold = job.getInt(MAX_VALUES, 100);
}
@Override
public void reduce(Text key, Iterator<Text> values,
OutputCollector<Text, Text> output,
Reporter reporter) throws IOException {
int i = 0;
while (values.hasNext()) {
values.next();
i++;
}
if (++i > maxValueThreshold) {
log.info("Received " + i + " values for key " + key);
}
}
(3)減少數(shù)據(jù)傾斜的方法
? ? 方法1:抽樣和范圍分區(qū)
? ? ? 可以通過(guò)對(duì)原始數(shù)據(jù)進(jìn)行抽樣得到的結(jié)果集來(lái)預(yù)設(shè)分區(qū)邊界值。
? ? 方法2:自定義分區(qū)
? ? ? 另一個(gè)抽樣和范圍分區(qū)的替代方案是基于輸出鍵的背景知識(shí)進(jìn)行自定義分區(qū)。例如,如果map輸出鍵的單詞來(lái)源于一本書。其中大部分必然是省略詞(stopword)。那么就可以將自定義分區(qū)將這部分省略詞發(fā)送給固定的一部分reduce實(shí)例。而將其他的都發(fā)送給剩余的reduce實(shí)例。
? ? 方法3:Combine
? ? ? 使用Combine可以大量地減小數(shù)據(jù)頻率傾斜和數(shù)據(jù)大小傾斜。在可能的情況下,combine的目的就是聚合并精簡(jiǎn)數(shù)據(jù)。
2、MapReduce跑得慢的原因?
Mapreduce 程序效率的瓶頸在于兩點(diǎn):
1)計(jì)算機(jī)性能
? CPU、內(nèi)存、磁盤健康、網(wǎng)絡(luò)
2)I/O 操作優(yōu)化
? (1)數(shù)據(jù)傾斜
? (2)map和reduce數(shù)設(shè)置不合理
? (3)reduce等待過(guò)久
? (4)小文件過(guò)多
? (5)大量的不可分塊的超大文件
? (6)spill次數(shù)過(guò)多
? (7)merge次數(shù)過(guò)多等文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-599051.html
3、HDFS小文件優(yōu)化方法
1)HDFS小文件弊端:
? HDFS上每個(gè)文件都要在namenode上建立一個(gè)索引,這個(gè)索引的大小約為150byte,這樣當(dāng)小文件比較多的時(shí)候,就會(huì)產(chǎn)生很多的索引文件,一方面會(huì)大量占用namenode的內(nèi)存空間,另一方面就是索引文件過(guò)大是的索引速度變慢。
2)解決的方式:
? (1)Hadoop本身提供了一些文件壓縮的方案。
? (2)從系統(tǒng)層面改變現(xiàn)有HDFS存在的問(wèn)題,其實(shí)主要還是小文件的合并,然后建立比較快速的索引。
3)Hadoop自帶小文件解決方案
? (1)Hadoop Archive:
? ? 是一個(gè)高效地將小文件放入HDFS塊中的文件存檔工具,它能夠?qū)⒍鄠€(gè)小文件打包成一個(gè)HAR文件,這樣在減少namenode內(nèi)存使用的同時(shí)。
? (2)Sequence file:
? ? sequence file由一系列的二進(jìn)制key/value組成,如果為key小文件名,value為文件內(nèi)容,則可以將大批小文件合并成一個(gè)大文件。
? (3)CombineFileInputFormat:
? ? CombineFileInputFormat是一種新的inputformat,用于將多個(gè)文件合并成一個(gè)單獨(dú)的split,另外,它會(huì)考慮數(shù)據(jù)的存儲(chǔ)位置。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-599051.html
4、更多大數(shù)據(jù)面試集錦
- 大數(shù)據(jù)書籍資料分享
- 大數(shù)據(jù)面試題集錦
到了這里,關(guān)于大數(shù)據(jù)面試題集錦-Hadoop面試題(五)-優(yōu)化的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!