自定義分割槽
主函式分割槽與分組
該物件需要實現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任務...