這篇文章主要為大家展示了“hadoop基礎(chǔ)面試題有哪些”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“hadoop基礎(chǔ)面試題有哪些”這篇文章吧。
成都創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的吳川網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
使用 job.setInputFormatClass() 定義的 InputFormat ,將輸入的數(shù)據(jù)集分割成小數(shù)據(jù)塊 split,同時(shí) InputFormat 提供一個(gè) RecordReader的實(shí)現(xiàn)。一般使用的是 TextInputFormat,它提供的 RecordReader 會(huì)將文本的行號(hào)作為 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í)候會(huì)在內(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還會(huì)為輸出操作啟動(dòng)一個(gè)守護(hù)線程,如果緩沖區(qū)的內(nèi)存達(dá)到了閥值的80%時(shí)候,這個(gè)守護(hù)線程就會(huì)把內(nèi)容寫到磁盤上,這個(gè)過程叫spill,另外的20%內(nèi)存可以繼續(xù)寫入要寫進(jìn)磁盤的數(shù)據(jù),寫入磁盤和寫入內(nèi)存操作是互不干擾的,如果緩存區(qū)被撐滿了,那么map就會(huì)阻塞寫入內(nèi)存的操作,讓寫入磁盤操作完成后再繼續(xù)執(zhí)行寫入內(nèi)存操作。在寫磁盤之前,線程首先根據(jù)數(shù)據(jù)最終要傳的reducer把數(shù)據(jù)劃分成相應(yīng)的分區(qū)(job.setPartitionerClass())。在每個(gè)分區(qū)中,后臺(tái)進(jìn)程按鍵進(jìn)行內(nèi)排序( job.setSortComparatorClass(),如果沒設(shè)置回默認(rèn)使用 Key 實(shí)現(xiàn)的 compareTo() 方法),如果我們定義了combiner函數(shù)(job.setCombinerClass()),那么排他就在排序后的輸出上運(yùn)行。每次spill操作也就是寫入磁盤操作時(shí)候就會(huì)寫一個(gè)溢出文件,也就是說在做map輸出有幾次spill就會(huì)產(chǎn)生多少個(gè)溢出文件,等map輸出全部做完后,map還會(huì)調(diào)用combine合并這些輸出文件。
到了reduce階段就是合并map輸出文件了,Partitioner會(huì)找到對應(yīng)的map輸出文件,然后進(jìn)行復(fù)制操作,復(fù)制操作時(shí)reduce會(huì)開啟幾個(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還會(huì)進(jìn)行排序操作和合并文件操作,這些操作完了就會(huì)進(jìn)行reduce計(jì)算了。
在 Reduce 階段,reduce() 方法接受所有映射到這個(gè) Reduce 的 map 輸出后,也是會(huì)調(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í)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!