您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“hadoop基礎(chǔ)面試題有哪些”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“hadoop基礎(chǔ)面試題有哪些”這篇文章吧。
使用 job.setInputFormatClass() 定義的 InputFormat ,將輸入的數(shù)據(jù)集分割成小數(shù)據(jù)塊 split,同時(shí) InputFormat 提供一個(gè) RecordReader的實(shí)現(xiàn)。一般使用的是 TextInputFormat,它提供的 RecordReader 會將文本的行號作為 Key,這一行的文本作為 Value。這就是自定義 Mapper 的輸入是 < LongWritable,Text> 的原因。 然后調(diào)用自定義 Mapper 的map方法,將一個(gè)個(gè)< LongWritable,Text>鍵值對輸入給 Mapper 的 map方法。
將map的輸出作為reduce的輸入的過程就是shuffle了,這個(gè)是mapreduce優(yōu)化的重點(diǎn)地方。Shuffle一開始就是map階段做輸出操作,一般mapreduce計(jì)算的都是海量數(shù)據(jù),map輸出時(shí)候不可能把所有文件都放到內(nèi)存操作,因此map寫入磁盤的過程十分的復(fù)雜,更何況map輸出時(shí)候要對結(jié)果進(jìn)行排序,內(nèi)存開銷是很大的,map在做輸出時(shí)候會在內(nèi)存里開啟一個(gè)環(huán)形內(nèi)存緩沖區(qū),這個(gè)緩沖區(qū)專門用來輸出的,默認(rèn)大小是100mb,并且在配置文件里為這個(gè)緩沖區(qū)設(shè)定了一個(gè)閥值,默認(rèn)是0.80(這個(gè)大小和閥值都是可以在配置文件里進(jìn)行配置的),同時(shí)map還會為輸出操作啟動(dòng)一個(gè)守護(hù)線程,如果緩沖區(qū)的內(nèi)存達(dá)到了閥值的80%時(shí)候,這個(gè)守護(hù)線程就會把內(nèi)容寫到磁盤上,這個(gè)過程叫spill,另外的20%內(nèi)存可以繼續(xù)寫入要寫進(jìn)磁盤的數(shù)據(jù),寫入磁盤和寫入內(nèi)存操作是互不干擾的,如果緩存區(qū)被撐滿了,那么map就會阻塞寫入內(nèi)存的操作,讓寫入磁盤操作完成后再繼續(xù)執(zhí)行寫入內(nèi)存操作。在寫磁盤之前,線程首先根據(jù)數(shù)據(jù)最終要傳的reducer把數(shù)據(jù)劃分成相應(yīng)的分區(qū)(job.setPartitionerClass())。在每個(gè)分區(qū)中,后臺進(jìn)程按鍵進(jìn)行內(nèi)排序( job.setSortComparatorClass(),如果沒設(shè)置回默認(rèn)使用 Key 實(shí)現(xiàn)的 compareTo() 方法),如果我們定義了combiner函數(shù)(job.setCombinerClass()),那么排他就在排序后的輸出上運(yùn)行。每次spill操作也就是寫入磁盤操作時(shí)候就會寫一個(gè)溢出文件,也就是說在做map輸出有幾次spill就會產(chǎn)生多少個(gè)溢出文件,等map輸出全部做完后,map還會調(diào)用combine合并這些輸出文件。
到了reduce階段就是合并map輸出文件了,Partitioner會找到對應(yīng)的map輸出文件,然后進(jìn)行復(fù)制操作,復(fù)制操作時(shí)reduce會開啟幾個(gè)復(fù)制線程,這些線程默認(rèn)個(gè)數(shù)是5個(gè),程序員也可以在配置文件更改復(fù)制線程的個(gè)數(shù),這個(gè)復(fù)制過程和map寫入磁盤過程類似,也有閥值和內(nèi)存大小,閥值一樣可以在配置文件里配置,而內(nèi)存大小是直接使用reduce的tasktracker的內(nèi)存大小,復(fù)制完所有map輸出后,reduce還會進(jìn)行排序操作和合并文件操作,這些操作完了就會進(jìn)行reduce計(jì)算了。
在 Reduce 階段,reduce() 方法接受所有映射到這個(gè) Reduce 的 map 輸出后,也是會調(diào)用 job.setSortComparatorClass()方法設(shè)置的 Key 比較函數(shù)類,對所有數(shù)據(jù)進(jìn)行排序。然后開始構(gòu)造一個(gè) Key 對應(yīng)的 Value 迭代器。 這時(shí)就要用到分組,使用 job.setGroupingComparatorClass()方法設(shè)置分組函數(shù)類。只要這個(gè)比較器比較的兩個(gè) Key 相同,它們就屬于同一組,它們的 Value 放在一個(gè) Value 迭代器,而這個(gè)迭代器的 Key 使用屬于同一個(gè)組的所有Key的第一個(gè)Key。最后就是進(jìn)入 Reducer 的 reduce() 方法,reduce() 方法的輸入是所有的 Key 和它的 Value 迭代器,同樣注意輸入與輸出的類型必須與自定義的 Reducer 中聲明的一致。
數(shù)據(jù)經(jīng)過reduce處理后,通過OutPutFormat實(shí)現(xiàn)類輸出
2 hadoop各配置文件分別有什么用
3 hive添加一列語句怎么寫
alter table test_table add columns (d string);
4 sqoop將關(guān)系數(shù)據(jù)庫數(shù)據(jù)導(dǎo)入hive命令上需要加一個(gè)什么配置
--hive-import
5 項(xiàng)目中文件怎么傳到hdfs
flume,kettle,shell腳本
7 hive某個(gè)分區(qū)文件損壞,對其他分區(qū)是否有影響
否
8 怎么理解hive
hive可以理解為基于hadoop的數(shù)據(jù)倉庫,他負(fù)責(zé)管理hdfs,并提供解釋器將hive sql翻譯成mr程序進(jìn)行查詢(個(gè)人理解,可自由發(fā)揮)
9 怎么理解sqoop
關(guān)系型數(shù)據(jù)庫與hdfs之間互相倒數(shù)的工具,底層用mr實(shí)現(xiàn)
以上是“hadoop基礎(chǔ)面試題有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。