Hadoop自定義排序 分割槽

2021-09-20 15:23:55 字數 2406 閱讀 4398

自定義分割槽

主函式分割槽與分組

該物件需要實現writablecomparable介面

public

class

myclass

implements

writablecomparable

public

void

setyear

(int year)

public int gettemperature()

public

void

sethot

(int temperature)

@override

//反序列化過程

public

void

readfields

(datainput in

) throws ioexception

@override

//序列化過程

public

void

write

(dataoutput out) throws ioexception

@override

public int compareto

(myclass o)

return integer.

compare

(temperature, o.

gettemperature()

);} @override

public string tostring()

@override

public int hashcode()

}

需要繼承writablecomparator父類

public

class

mysort

extends

writablecomparator

public int compare

(writablecomparable a,writablecomparable b)

return

-integer.

compare

(o1.

gettemperature()

, o2.

gettemperature()

);//若在同一年份,則溫度降序排序

}}

需要繼承partitioner父類

public

class

mypartioner

extends

partitioner

}

因為,這裡的key為年份|溫度,但是要求相同年份的分為一組。故需要重寫分組方法。需要繼承writablecomparator父類

public

class

mygroup

extends

writablecomparator

public int compare

(writablecomparable a,writablecomparable b)

}

public

static

void

main

(string[

] args) throws ioexception, classnotfoundexception, interruptedexception

分割槽:如果不自定義分割槽類,而使用預設分割槽時,採取的是對鍵值進行雜湊操作,並與reducetask任務數取模,根據得到的值進行分割槽。由於預設的reducetask任務數設定為1,因此預設情況下只有1個分割槽。如果自定義乙個分割槽類,則會按照自定義的方式進行分割槽。

分組:分組和分割槽類似,也是用來劃分資料集的,只不過更加細粒度。如果不自定義分組類而使用預設分組的話,跟預設分割槽相同,也是通過比較鍵值來進行分組。reduce()函式是按照組為操作物件進行統計的。

reducer類處理整個分割槽的資料,其操作物件是區,乙個區呼叫一次reducer類。而reduce()函式的操作物件是組,也就是分割槽中有 幾個分組就呼叫幾次reduce()函式,reduce()函式對分組對應的集合進行處理。分組詳解:分組前先對合併後的分割槽檔案中的記錄進行排序,排序後再進行分組。分組是通過對排序後的記錄從上往下遍歷比對進行的。如果上下兩個比對結果為0,則分到同乙個組,否則各分乙個組。後面的分組與前面的分組無關,只與緊挨著的上一條記錄有關。舉個例子:就算前面有乙個「美國」分組,但是中間隔了乙個「日本」分組,則後面再出現「美國」時也不會合併到前面的分組中。因此,如果想按照國家分組的話,應該將國家作為組合鍵的第乙個屬性,這樣在reduce端排序後得到的就是相同的國家上下挨著了。

hadoop自定義分割槽

實現自定義分割槽比較簡單了,繼承partitioner,實現getpartition 方法就行了,分割槽是按照key進行的。以wordcount為例。輸入文字1 hello world hello 3.輸入文字2 hello world world 4 編寫程式,hello 和world各自為乙個分...

hadoop自定義許可權

參考 1.測試類 想執行hadoop的測試類,我們必須先編譯hadoop mac下編譯hadoop 2.7.4 然後檢視測試類 org.apache.hadoop.hdfs.server.namenode.testinodeattributeprovider然後直接執行testdelegationt...

mapreduce自定義分組 自定義分割槽 二次排序

mapreduce中二次排序的思想中,我們常常需要對資料的分割槽分組進行自定義,以下就介紹一下自定義分割槽分組的簡單實現 1 自定義分割槽 public class demopartitionerextends partitioner return 4 要注意的是 設定了分割槽之後,reduce任務...