第2节 mapreduce深入学习:4, 5
第2節(jié) mapreduce深入學(xué)習(xí):4、mapreduce的序列化以及自定義排序
?
序列化(Serialization)是指把結(jié)構(gòu)化對(duì)象轉(zhuǎn)化為字節(jié)流。
反序列化(Deserialization)是序列化的逆過程。把字節(jié)流轉(zhuǎn)為結(jié)構(gòu)化對(duì)象。 當(dāng)要在進(jìn)程間傳遞對(duì)象或持久化對(duì)象的時(shí)候,就需要序列化對(duì)象成字節(jié)流
反之當(dāng)要將接收到或從磁盤讀取的字節(jié)流轉(zhuǎn)換為對(duì)象,就要進(jìn)行反序列化。
Java 的序列化(Serializable)是一個(gè)重量級(jí)序列化框架,一個(gè)對(duì)象被序列化后,會(huì)附帶很多額外的信息(各種校驗(yàn)信息,header,繼承體系…),不便于在網(wǎng)絡(luò)中高效傳輸;所以,hadoop 自己開發(fā)了一套序列化機(jī)制(Writable),精簡(jiǎn),高效。不用像 java 對(duì)象類一樣傳輸多層的父子關(guān)系,需要哪個(gè)屬性就傳輸哪個(gè)屬性值,大大的減少網(wǎng)絡(luò)傳輸?shù)拈_銷。
Writable是Hadoop的序列化格式,hadoop定義了這樣一個(gè)Writable接口。 一個(gè)類要支持可序列化只需實(shí)現(xiàn)這個(gè)接口即可。
另外Writable有一個(gè)子接口是WritableComparable,writableComparable是既可實(shí)現(xiàn)序列化,也可以對(duì)key進(jìn)行比較,我們這里可以通過自定義key實(shí)現(xiàn)WritableComparable來實(shí)現(xiàn)我們的排序功能
mapreduce的排序以及序列化:要求第一列按照字典順序進(jìn)行排列,第一列相同的時(shí)候,第二列按照升序進(jìn)行排列
a 1
a 9
b 3
a 7
b 8
b 10
a 5
a 9
最終排序結(jié)果
a 1
a 5
a 7
a 9
a 9
b 3
b 8
b 10
在mapreduce當(dāng)中默認(rèn)是對(duì)key2 記住,要對(duì)誰排序,就得要把誰封裝成k2
需要對(duì)兩個(gè)字段進(jìn)行排序
兩個(gè)字段進(jìn)行比較,可不可以封裝成一個(gè)對(duì)象,對(duì)象里面兩個(gè)字段,對(duì)象實(shí)現(xiàn)writableComparable接口,就可以實(shí)現(xiàn)序列化,也可以實(shí)現(xiàn)排序了.
詳見代碼
轉(zhuǎn)載于:https://www.cnblogs.com/mediocreWorld/p/11021987.html
總結(jié)
以上是生活随笔為你收集整理的第2节 mapreduce深入学习:4, 5的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java基础(七)--Exception
- 下一篇: flutter中的路由跳转