Hadoop幾個常見類的作用

2021-08-16 11:09:33 字數 2717 閱讀 8274

1、自定義bean中的copmareto()

public

class keypair implements writablecomparable

return integer.compare(hot, o.gethot());

}@override

public

void

write(dataoutput dataoutput) throws ioexception

@override

public

void

readfields(datainput datainput) throws ioexception

@override

public

inthashcode()

@override

public boolean equals(object obj)

@override

public string tostring()

get和set方法...

}

2、job.setgroupingcomparatorclass(itemidgroupingcomparator.class)

groupingcomparator是在reduce階段分組來使用的,由於reduce階段,如果key相同的一組,只取第乙個key作為key,迭代所有的values。

如果reduce的key是自定義的bean,我們只需要bean裡面的某個屬性相同就認為這樣的key是相同的,並把value放同乙個values,進行一次reduce函式的處理,這時我們就需要自定義groupcoparator來「欺騙」reduce了。

3、job.setpartitionerclass(itemidpartitioner.class)

目的:shuffle階段,用來決定map輸出時,什麼樣的key輸出到同乙個reduce節點

4、job.setsortcomparatorclass(sorthot.class)

目的:對進入同乙個reduce的鍵或鍵的部分 進行排序

時機:shuffle階段,reduce部分fetch資料之後,合併小檔案之後的排序

5、job.setcombinerclass()

時機:map輸出之後,shuffle之前

目的:每乙個map可能會產生大量的輸出,combiner的作用就是在map端對輸出先做一次合併,以減少傳輸到reducer的資料量

combiner有類似於本地reducer的功能。如果不使用combiner,那麼所有的結果都是reduce完成,效率會相對低下。使用combiner,先完成的map會在本地聚合,提公升速度。

注意:combiner的輸出是reducer的輸入,如果combiner是可插拔的,新增combiner絕對不能改變最終計算結果。所以在可插拔的情況下combiner只應該用於那種和reduce的輸入key/value與輸出key/value型別完全一致,且不影響最終結果的場景。比如累加,最大值等。

6、fileinputformat.addinputpath(job, new path("/usr/input/hot"))和fileoutputformat.setoutputpath(job, new path("/usr/output/hot"))設定源資料的輸入目錄,和計算結果的輸出目錄

6、shuffle原理!

乙個切片對應乙個map ,每乙個map對應乙個在記憶體中的環形緩衝區,用來儲存map的輸出,緩衝區的大小預設是100m

當map向環形緩衝區寫入資料達到一定閥值,就是超出一定範圍(80

%) 就會啟動乙個後台執行緒將緩衝區資料溢寫到磁碟

注意:不僅僅是將資料存入到磁碟,而是經過很複雜的過程,寫入磁碟之前首先將資料按照分割槽規則進行分割槽,如果沒有指定分割槽規則,就會按照hadoop預設的分割槽規則進行分割槽,然後按照排序規則對分區內的資料按照k2(map輸出的key即reducer輸入的key)進行排序(每個分區內呼叫job.setsortcomparatorclass()設定的key比較函式類排序(如果沒有通過job.setsortcomparatorclass()設定key比較函式類,則使用key的實現的compareto方法),如果k2是text型別 則按照k2的字典順序的排序規則,如果是bean按照自定義的排序規則排序,然後得到多個分割槽且排序的小檔案。分割槽是按照分割槽號排序,分區內的資料是按照k2的排序規則進行排序,小檔案內可以有多個分割槽。

由於map向快取區中存資料速度遠遠比緩衝區向磁碟寫資料的速度,所以當緩衝區中的資料達到80

%,map就會阻塞,停止向緩衝區存入資料,直到緩衝區中的資料寫入到多個小檔案並清空緩衝區,才讓map繼續向緩衝區存入資料,之所以寫入多個小檔案,是因為檔案越小排序的速度越快。

注意:乙個分割槽如果過大可能存在於多個小檔案之中。在得到多個分割槽且排序的小檔案後要進行合併,合併規則是按照分割槽號將多個小檔案中的部分分割槽資料合併成對應分割槽號的完整分割槽資料裡面,在合併的同時再對分區內的多個部分資料按照k2排序規則進行一次排序。

Hadoop調優的幾個引數

hdfs hdfs site.xml中的dfs.namenode.handler.count 20 log2 cluster size 比如集群規模為 8 台時,此引數設定為 60,該引數決定有多少執行緒數用來處理不同 datanode 的併發心跳以及客戶端併發的元資料操作 yarn yarn si...

解讀udev的幾個作用

udev是一種工具,它能夠根據系統中的硬體裝置的狀況動態更新裝置檔案,包括裝置檔案的建立,刪除等。裝置檔案通常放在 dev目錄下,使用udev後,在 dev下面只包含系統中真實存在的裝置。它於硬體平台無關的,位於使用者空間,需要核心sysfs和tmpfs的支援,sysfs為udev提供裝置入口和ue...

常見的幾個名詞含意

部落格blog 維客wiki 維基百科wikipedia 維客wikiwiki一詞 於夏威夷語的 weekeeweekee 是 快點快點 quick,quick 的意思。wiki一種超文字系統,這種超文字系統支援面向社群的協作式寫作。使用者可以在web的基礎上對wiki文字進行瀏覽 建立 更改。wi...