国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

大數(shù)據(jù)面試題集錦-Hadoop面試題(三)-MapReduce

這篇具有很好參考價值的文章主要介紹了大數(shù)據(jù)面試題集錦-Hadoop面試題(三)-MapReduce。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

你準備好面試了嗎?這里有一些面試中可能會問到的問題以及相對應(yīng)的答案。如果你需要更多的面試經(jīng)驗和面試題,關(guān)注一下"張飛的豬大數(shù)據(jù)分享"吧,公眾號會不定時的分享相關(guān)的知識和資料。

目錄
  • 1、談?wù)凥adoop序列化和反序列化及自定義bean對象實現(xiàn)序列化?
  • 2、FileInputFormat切片機制
  • 3、在一個Hadoop 任務(wù)中,什么是InputSplit(切片),以及切片是用來做什么的,切片與block有什么區(qū)別?
  • 4、如何判定一個job的map和reduce的數(shù)量?
  • 5、 Maptask的個數(shù)由什么決定?
  • 6、MapTask和ReduceTask工作機制或工作原理
  • 7、描述mapReduce有幾種排序及排序發(fā)生的階段
  • 8、描述mapReduce中shuffle階段的工作流程,如何優(yōu)化shuffle階段
  • 9、描述mapReduce中combiner的作用是什么,一般使用情景,以及和reduce的區(qū)別?
  • 10、如果沒有定義partitioner,那數(shù)據(jù)在被送達reducer前是如何被分區(qū)的?
  • 11、MapReduce 出現(xiàn)單點負載多大,怎么負載平衡?
  • 12、MapReduce 怎么實現(xiàn) TopN?
  • 13、Hadoop的緩存機制(Distributedcache)是怎么樣的?
  • 14、mapReduce如何實現(xiàn)兩個表的join?
  • 15、什么樣的計算不適用mr來提速?
  • 16、更多大數(shù)據(jù)面試集錦

1、談?wù)凥adoop序列化和反序列化及自定義bean對象實現(xiàn)序列化?

1)序列化和反序列化
? (1)序列化就是把內(nèi)存中的對象,轉(zhuǎn)換成字節(jié)序列(或其他數(shù)據(jù)傳輸協(xié)議)以便于存儲(持久化)和網(wǎng)絡(luò)傳輸。
? (2)反序列化就是將收到字節(jié)序列(或其他數(shù)據(jù)傳輸協(xié)議)或者是硬盤的持久化數(shù)據(jù),轉(zhuǎn)換成內(nèi)存中的對象。
? (3)Java的序列化是一個重量級序列化框架(Serializable),一個對象被序列化后,會附帶很多額外的信息(各種校驗信息,header,繼承體系等),不便于在網(wǎng)絡(luò)中高效傳輸。所以,hadoop自己開發(fā)了一套序列化機制(Writable),精簡、高效。

2)自定義bean對象要想序列化傳輸步驟及注意事項:

(1)必須實現(xiàn)Writable接口
? (2)反序列化時,需要反射調(diào)用空參構(gòu)造函數(shù),所以必須有空參構(gòu)造
? (3)重寫序列化方法
? (4)重寫反序列化方法
? (5)注意反序列化的順序和序列化的順序完全一致
? (6)要想把結(jié)果顯示在文件中,需要重寫toString(),且用"\t"分開,方便后續(xù)用
? (7)如果需要將自定義的bean放在key中傳輸,則還需要實現(xiàn)comparable接口,因為mapreduce框中的shuffle過程一定會對key進行排序

2、FileInputFormat切片機制

job提交流程源碼詳解

 waitForCompletion()
? submit();
? // 1、建立連接
? ? connect();
? ? ? // 1)創(chuàng)建提交job的代理
? ? ? new Cluster(getConfiguration());
? ? ? ? // (1)判斷是本地yarn還是遠程
? ? ? ? initialize(jobTrackAddr, conf);
? // 2、提交job
? submitter.submitJobInternal(Job.this, cluster)
? ? // 1)創(chuàng)建給集群提交數(shù)據(jù)的Stag路徑
? ? Path jobStagingArea = JobSubmissionFiles.getStagingDir(cluster, conf);
? ? // 2)獲取jobid ,并創(chuàng)建job路徑
? ? JobID jobId = submitClient.getNewJobID();
? ? // 3)拷貝jar包到集群
? ? copyAndConfigureFiles(job, submitJobDir);
? ? rUploader.uploadFiles(job, jobSubmitDir);
? ? // 4)計算切片,生成切片規(guī)劃文件
? ? writeSplits(job, submitJobDir);
? ? maps = writeNewSplits(job, jobSubmitDir);
? ? input.getSplits(job);
? ? // 5)向Stag路徑寫xml配置文件
? ? writeConf(conf, submitJobFile);
? ? conf.writeXml(out);
? ? // 6)提交job,返回提交狀態(tài)
? ? status = submitClient.submitJob(jobId, submitJobDir.toString(), job.getCredentials());

3、在一個Hadoop 任務(wù)中,什么是InputSplit(切片),以及切片是用來做什么的,切片與block有什么區(qū)別?

FileInputFormat源碼解析(input.getSplits(job))
(1)找到你數(shù)據(jù)存儲的目錄。
(2)開始遍歷處理(規(guī)劃切片)目錄下的每一個文件。
(3)遍歷第一個文件xx.txt。
? a)獲取文件大小fs.sizeOf(xx.txt);。
? b)計算切片大小
computeSliteSize(Math.max(minSize,Math.min(maxSize,blocksize)))。
? c)默認情況下,切片大小=blocksize。
? d)開始切,形成第1個切片:xx.txt—0:128M 第2個切片xx.txt—128:256M 第3個切片xx.txt—256M:300M(每次切片時,都要判斷切完剩下的部分是否大于塊的1.1倍,不大于1.1倍就劃分一塊切片)。
? e)將切片信息寫到一個切片規(guī)劃文件中。
? f)整個切片的核心過程在getSplit()方法中完成。
? g)數(shù)據(jù)切片只是在邏輯上對輸入數(shù)據(jù)進行分片,并不會再磁盤上將其切分成分片進行存儲。InputSplit只記錄了分片的元數(shù)據(jù)信息,比如起始位置、長度以及所在的節(jié)點列表等。
? h)注意:block是HDFS上物理上存儲的存儲的數(shù)據(jù),切片是對數(shù)據(jù)邏輯上的劃分。
(4)提交切片規(guī)劃文件到y(tǒng)arn上,yarn上的MrAppMaster就可以根據(jù)切片規(guī)劃文件計算開啟maptask個數(shù)。

4、如何判定一個job的map和reduce的數(shù)量?

1)map數(shù)量
? splitSize=max{minSize,min{maxSize,blockSize}}
? map數(shù)量由處理的數(shù)據(jù)分成的block數(shù)量決定default_num = total_size / split_size;
2)reduce數(shù)量
? reduce的數(shù)量job.setNumReduceTasks(x);x 為reduce的數(shù)量。不設(shè)置的話默認為 1。

5、 Maptask的個數(shù)由什么決定?

一個job的map階段MapTask并行度(個數(shù)),由客戶端提交job時的切片個數(shù)決定。

6、MapTask和ReduceTask工作機制或工作原理

MapTask工作機制

(1)Read階段:Map Task通過用戶編寫的RecordReader,從輸入InputSplit中解析出一個個key/value。
(2)Map階段:該節(jié)點主要是將解析出的key/value交給用戶編寫map()函數(shù)處理,并產(chǎn)生一系列新的key/value。
(3)Collect收集階段:在用戶編寫map()函數(shù)中,當數(shù)據(jù)處理完成后,一般會調(diào)用OutputCollector.collect()輸出結(jié)果。在該函數(shù)內(nèi)部,它會將生成的key/value分區(qū)(調(diào)用Partitioner),并寫入一個環(huán)形內(nèi)存緩沖區(qū)中。
(4)Spill階段:即“溢寫”,當環(huán)形緩沖區(qū)滿后,MapReduce會將數(shù)據(jù)寫到本地磁盤上,生成一個臨時文件。需要注意的是,將數(shù)據(jù)寫入本地磁盤之前,先要對數(shù)據(jù)進行一次本地排序,并在必要時對數(shù)據(jù)進行合并、壓縮等操作。
(5)Combine階段:當所有數(shù)據(jù)處理完成后,MapTask對所有臨時文件進行一次合并,以確保最終只會生成一個數(shù)據(jù)文件。

ReduceTask工作機制
(1)Copy階段:ReduceTask從各個MapTask上遠程拷貝一片數(shù)據(jù),并針對某一片數(shù)據(jù),如果其大小超過一定閾值,則寫到磁盤上,否則直接放到內(nèi)存中。
(2)Merge階段:在遠程拷貝數(shù)據(jù)的同時,ReduceTask啟動了兩個后臺線程對內(nèi)存和磁盤上的文件進行合并,以防止內(nèi)存使用過多或磁盤上文件過多。
(3)Sort階段:按照MapReduce語義,用戶編寫reduce()函數(shù)輸入數(shù)據(jù)是按key進行聚集的一組數(shù)據(jù)。為了將key相同的數(shù)據(jù)聚在一起,Hadoop采用了基于排序的策略。 由于各個MapTask已經(jīng)實現(xiàn)對自己的處理結(jié)果進行了局部排序,因此,ReduceTask只需對所有數(shù)據(jù)進行一次歸并排序即可。
(4)Reduce階段:reduce()函數(shù)將計算結(jié)果寫到HDFS上。

7、描述mapReduce有幾種排序及排序發(fā)生的階段

1)排序的分類:
? (1)部分排序:
? ? MapReduce根據(jù)輸入記錄的鍵對數(shù)據(jù)集排序。保證輸出的每個文件內(nèi)部排序。
? (2)全排序:
? ? 如何用Hadoop產(chǎn)生一個全局排序的文件?最簡單的方法是使用一個分區(qū)。但該方法在處理大型文件時效率極低,因為一臺機器必須處理所有輸出文件,從而完全喪失了MapReduce所提供的并行架構(gòu)。
? ? 替代方案:首先創(chuàng)建一系列排好序的文件;其次,串聯(lián)這些文件;最后,生成一個全局排序的文件。主要思路是使用一個分區(qū)來描述輸出的全局排序。例如:可以為待分析文件創(chuàng)建3個分區(qū),在第一分區(qū)中,記錄的單詞首字母a-g,第二分區(qū)記錄單詞首字母h-n, 第三分區(qū)記錄單詞首字母o-z。
? (3)輔助排序:(GroupingComparator分組)
? ? Mapreduce框架在記錄到達reducer之前按鍵對記錄排序,但鍵所對應(yīng)的值并沒有被排序。甚至在不同的執(zhí)行輪次中,這些值的排序也不固定,因為它們來自不同的map任務(wù)且這些map任務(wù)在不同輪次中完成時間各不相同。一般來說,大多數(shù)MapReduce程序會避免讓reduce函數(shù)依賴于值的排序。但是,有時也需要通過特定的方法對鍵進行排序和分組等以實現(xiàn)對值的排序。
? (4)二次排序:
? ? 在自定義排序過程中,如果compareTo中的判斷條件為兩個即為二次排序。
2)自定義排序WritableComparable
? bean對象實現(xiàn)WritableComparable接口重寫compareTo方法,就可以實現(xiàn)排序
? ? @Override
? ? public int compareTo(FlowBean o) {
? ? ? // 倒序排列,從大到小
? ? ? return this.sumFlow > o.getSumFlow() ? -1 : 1;
? ? }
3)排序發(fā)生的階段:
? (1)一個是在map side發(fā)生在spill后partition前。
? (2)一個是在reduce side發(fā)生在copy后 reduce前。

8、描述mapReduce中shuffle階段的工作流程,如何優(yōu)化shuffle階段

分區(qū),排序,溢寫,拷貝到對應(yīng)reduce機器上,增加combiner,壓縮溢寫的文件。

9、描述mapReduce中combiner的作用是什么,一般使用情景,以及和reduce的區(qū)別?

1)Combiner的意義就是對每一個maptask的輸出進行局部匯總,以減小網(wǎng)絡(luò)傳輸量。
2)Combiner能夠應(yīng)用的前提是不能影響最終的業(yè)務(wù)邏輯,而且,Combiner的輸出kv應(yīng)該跟reducer的輸入kv類型要對應(yīng)起來。
3)Combiner和reducer的區(qū)別在于運行的位置。
? Combiner是在每一個maptask所在的節(jié)點運行;
? Reducer是接收全局所有Mapper的輸出結(jié)果。

10、如果沒有定義partitioner,那數(shù)據(jù)在被送達reducer前是如何被分區(qū)的?

如果沒有自定義的 partitioning,則默認的 partition 算法,即根據(jù)每一條數(shù)據(jù)的 key 的 hashcode 值摸運算(%)reduce 的數(shù)量,得到的數(shù)字就是“分區(qū)號“。

11、MapReduce 出現(xiàn)單點負載多大,怎么負載平衡?

通過Partitioner實現(xiàn)

12、MapReduce 怎么實現(xiàn) TopN?

可以自定義groupingcomparator,對結(jié)果進行最大值排序,然后再reduce輸出時,控制只輸出前n個數(shù)。就達到了topn輸出的目的。

13、Hadoop的緩存機制(Distributedcache)是怎么樣的?

分布式緩存一個最重要的應(yīng)用就是在進行join操作的時候,如果一個表很大,另一個表很小,我們就可以將這個小表進行廣播處理,即每個計算節(jié)點上都存一份,然后進行map端的連接操作,經(jīng)過我的實驗驗證,這種情況下處理效率大大高于一般的reduce端join,廣播處理就運用到了分布式緩存的技術(shù)。
? DistributedCache將拷貝緩存的文件到Slave節(jié)點在任何Job在節(jié)點上執(zhí)行之前,文件在每個Job中只會被拷貝一次,緩存的歸檔文件會被在Slave節(jié)點中解壓縮。將本地文件復(fù)制到HDFS中去,接著Client會通過addCacheFile() 和addCacheArchive()方法告訴DistributedCache在HDFS中的位置。當文件存放到文地時,JobClient同樣獲得DistributedCache來創(chuàng)建符號鏈接,其形式為文件的URI加fragment標識。當用戶需要獲得緩存中所有有效文件的列表時,JobConf 的方法 getLocalCacheFiles() 和getLocalArchives()都返回一個指向本地文件路徑對象數(shù)組。

14、mapReduce如何實現(xiàn)兩個表的join?

1)reduce side join : 在map階段,map函數(shù)同時讀取兩個文件File1和File2,為了區(qū)分兩種來源的key/value數(shù)據(jù)對,對每條數(shù)據(jù)打一個標簽(tag),比如:tag=0 表示來自文件File1,tag=2 表示來自文件File2。
? 2)map side join : Map side join 是針對以下場景進行的優(yōu)化:兩個待連接表中,有一個表非常大,而另一個表非常小,以至于小表可以直接存放到內(nèi)存中。這樣,我們可以將小表復(fù)制多份,讓每個map task 內(nèi)存中存在一份(比如存放到hash table 中),然后只掃描大表:對于大表中的每一條記錄key/value,在hash table 中查找是否有相同的key 的記錄,如果有,則連接后輸出即可。

15、什么樣的計算不適用mr來提速?

1)數(shù)據(jù)量很小
2)特別多的小文件
3)特別頻繁的讀的時候,索引是更好的存取機制的時候
4)需要使用事務(wù)的時候
5)只有一臺機器的時候文章來源地址http://www.zghlxwxcb.cn/news/detail-511578.html

16、更多大數(shù)據(jù)面試集錦

  1. 大數(shù)據(jù)書籍資料分享
  2. 大數(shù)據(jù)面試題集錦

到了這里,關(guān)于大數(shù)據(jù)面試題集錦-Hadoop面試題(三)-MapReduce的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • vue面試題集錦

    1. 談一談對 MVVM 的理解? MVVM 是 Model-View-ViewModel 的縮寫。MVVM 是一種設(shè)計思想。 Model 層代表數(shù)據(jù)模型,也可以在 Model 中定義數(shù)據(jù)修改和操作的業(yè)務(wù)邏輯; View 代表 UI 組件,它負責將數(shù)據(jù)模型轉(zhuǎn)化成 UI 展現(xiàn)出來,View 是一個同步 View 和 Model 的對象 在 MVVM 架構(gòu)下,View 和 Model 之

    2024年01月21日
    瀏覽(20)
  • Spark面試題集錦

    1、什么是Apache Spark?Spark是什么? 是基于內(nèi)存的分布式的大數(shù)據(jù)并行計算框架,可用于構(gòu)建大型的、低延遲的數(shù)據(jù)分析應(yīng)用程序。包含Spark core、Spark sql、Spark streaming 、Spark MLlib 、spark GraphX五個核心組件。 2、Spark的核心組件是什么? Spark Core:是其它組件的基礎(chǔ),spark的內(nèi)核

    2024年02月04日
    瀏覽(23)
  • 音視頻開發(fā)面試題集錦

    音視頻開發(fā)面試題集錦

    下面是 2022.06 月音視頻面試題集錦內(nèi)容的節(jié)選: 媒體封裝層是表示媒體數(shù)據(jù)是什么封裝格式的,比如 MP4、FLV。在這層信息里,通常會攜帶碼流編碼格式的信息。 拿 MP4 來說,我們可以根據(jù) Sample Description Box(moov/trak/mdia/minf/stbl/stsd) 中的信息來確定其封裝的碼流的編碼格式。

    2023年04月13日
    瀏覽(26)
  • 500道網(wǎng)絡(luò)安全面試題集錦(附答案)

    500道網(wǎng)絡(luò)安全面試題集錦(附答案)

    本篇文章內(nèi)容為網(wǎng)絡(luò)安全各個方向涉及的面試題,但是無論如何都無法覆蓋所有的面試問題,更多的還是希望由點達面,查漏補缺,然后祝各位前程似錦,都能找到自己滿意的工作! ? 攻擊者通過在web界面中嵌入惡意腳本(通常為js代碼),造成用戶在瀏覽網(wǎng)頁時,控制用戶

    2024年02月15日
    瀏覽(26)
  • Java大廠常見1000道面試題集錦(一)

    Java大廠常見1000道面試題集錦(一)

    本系列為Java常見面試題集錦,持續(xù)更新中,包括筆試題和面試題, 建議收藏慢慢看 while(true){} 是一個無限循環(huán)的語句,它的作用是讓程序在執(zhí)行到該語句時不停地循環(huán)下去,直到程序被終止或者遇到 break、return 等跳出循環(huán)的語句。 無限循環(huán)的使用場景比較多,例如: 實現(xiàn)

    2024年02月06日
    瀏覽(56)
  • 找工作嗎?50道Python面試題集錦【附答案】

    找工作嗎?50道Python面試題集錦【附答案】

    嗨害大家好鴨!我是愛摸魚的芝士~ 希望能夠幫助你在今年的求職面試中脫穎而出, 找到一份高薪工作~ 這些面試題涉及Python基礎(chǔ)知識、Python編程、數(shù)據(jù)分析以及Python函數(shù)庫等多個方面。 提前預(yù)祝給這篇文章點贊收藏的友友們~ 拿到心中最滿意的那一份OFFER~ Q1、Python中的列表

    2023年04月18日
    瀏覽(26)
  • mysql數(shù)據(jù)庫面試題基礎(chǔ)知識,Hadoop之MapReduce04,騰訊java面試流程

    mysql數(shù)據(jù)庫面試題基礎(chǔ)知識,Hadoop之MapReduce04,騰訊java面試流程

    該方法的執(zhí)行過程比較復(fù)雜,我們慢慢來分析,首先來看下簡化的時序圖 3.1waitForCompletion public boolean waitForCompletion(boolean verbose ) throws IOException, InterruptedException, ClassNotFoundException { // 判斷任務(wù)的狀態(tài),如果是DEFINE就提交 if (state == JobState.DEFINE) { submit(); } if (verbose) { // 監(jiān)聽并且

    2024年04月14日
    瀏覽(33)
  • 大數(shù)據(jù)開發(fā)之Hadoop(MapReduce)

    大數(shù)據(jù)開發(fā)之Hadoop(MapReduce)

    MapReduce是一個分布式運算程序的編程框架,是用戶開發(fā)“基于Hadoop的數(shù)據(jù)分析應(yīng)用”的核心框架。 MapReduce核心功能是將用戶編寫的業(yè)務(wù)邏輯代碼和自帶默認組件整合成一個完整的分布式運算程序,并發(fā)運行在一個Hadoop集群上。 1.2.1 優(yōu)點 1、MapReduce易于編程 它簡單的實現(xiàn)一些

    2024年01月22日
    瀏覽(15)
  • 大數(shù)據(jù)框架之Hadoop:MapReduce(三)MapReduce框架原理——MapTask工作機制

    大數(shù)據(jù)框架之Hadoop:MapReduce(三)MapReduce框架原理——MapTask工作機制

    MapTask工作機制如下圖所示。 (1)Read階段:MapTask通過用戶編寫的RecordReader,從輸入InputSplit中解析出一個個key/value。 (2)Map階段:該節(jié)點主要是將解析出的key/value交給用戶編寫map()函數(shù)處理,并產(chǎn)生一系列新的key/value。 (3)Collect收集階段:在用戶編寫map()函數(shù)中,當數(shù)據(jù)處

    2023年04月08日
    瀏覽(19)
  • 大數(shù)據(jù)課程D4——hadoop的MapReduce

    大數(shù)據(jù)課程D4——hadoop的MapReduce

    文章作者郵箱:yugongshiye@sina.cn? ? ? ? ? ? ? 地址:廣東惠州 ??了解MapReduce的作用和特點; ??掌握MapReduce的組件; ? 掌握MapReduce的Shuffle; ? 掌握MapReduce的小文件問題; ? 掌握MapReduce的壓縮機制; ? 掌握MapReduce的推測執(zhí)行機制; ? 掌握MapReduce的數(shù)據(jù)傾斜問題; 1.

    2024年02月15日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包