日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hadoop之Hadoop序列化

發(fā)布時(shí)間:2024/2/28 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hadoop之Hadoop序列化 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Hadoop之Hadoop序列化


目錄

  • 什么是序列化
  • 為什么要序列化
  • 為什么不用Java的序列化
  • 常用數(shù)據(jù)序列化類型
  • 自定義bean對(duì)象實(shí)現(xiàn)序列化接口(Writable)

  • 1. 什么是序列化

  • 序列化就是把內(nèi)存中的對(duì)象,轉(zhuǎn)換成字節(jié)序列(或其他數(shù)據(jù)傳輸協(xié)議)以便于存儲(chǔ)(持久化)和網(wǎng)絡(luò)傳輸。

  • 反序列化就是將收到字節(jié)序列(或其他數(shù)據(jù)傳輸協(xié)議)或者是硬盤的持久化數(shù)據(jù),轉(zhuǎn)換成內(nèi)存中的對(duì)象。


  • 2. 為什么要序列化

    一般來說,“活的”對(duì)象只生存在內(nèi)存里,關(guān)機(jī)斷電就沒有了。而且“活的”對(duì)象只能由本地的進(jìn)程使用,不能被發(fā)送到網(wǎng)絡(luò)上的另外一臺(tái)計(jì)算機(jī)。 然而序列化可以存儲(chǔ)“活的”對(duì)象,可以將“活的”對(duì)象發(fā)送到遠(yuǎn)程計(jì)算機(jī)。


    3. 為什么不用Java的序列化

    Java的序列化是一個(gè)重量級(jí)序列化框架(Serializable),一個(gè)對(duì)象被序列化后,會(huì)附帶很多額外的信息(各種校驗(yàn)信息,header,繼承體系等),不便于在網(wǎng)絡(luò)中高效傳輸。所以,hadoop自己開發(fā)了一套序列化機(jī)制(Writable),特點(diǎn)如下:

  • 緊湊
    緊湊的格式能讓我們充分利用網(wǎng)絡(luò)帶寬,而帶寬是數(shù)據(jù)中心最稀缺的資源
  • 快速
    進(jìn)程通信形成了分布式系統(tǒng)的骨架,所以需要盡量減少序列化和反序列化的性能開銷,這是基本的;
  • 可擴(kuò)展
    協(xié)議為了滿足新的需求變化,所以控制客戶端和服務(wù)器過程中,需要直接引進(jìn)相應(yīng)的協(xié)議,這些是新協(xié)議,原序列化方式能支持新的協(xié)議報(bào)文;
  • 互操作
    能支持不同語言寫的客戶端和服務(wù)端進(jìn)行交互;

  • 4. 常用數(shù)據(jù)序列化類型

    Java類型Hadoop Writable類型
    booleanBooleanWritable
    byteByteWritable
    intIntWritable
    floatFloatWritable
    longLongWritable
    doubleDoubleWritable
    StringText
    mapMapWritable
    arrayArrayWritable

    5. 自定義bean對(duì)象實(shí)現(xiàn)序列化接口(Writable)

    自定義bean對(duì)象要想序列化傳輸,必須實(shí)現(xiàn)序列化接口,需要注意以下7項(xiàng)。

  • 必須實(shí)現(xiàn)Writable接口
  • 反序列化時(shí),需要反射調(diào)用空參構(gòu)造函數(shù),所以必須有空參構(gòu)造
  • public FlowBean() {super(); }
  • 重寫序列化方法
  • @Overridepublic void write(DataOutput out) throws IOException {out.writeLong(upFlow);out.writeLong(downFlow);out.writeLong(sumFlow);}
  • 重寫反序列化方法
  • @Override public void readFields(DataInput in) throws IOException {upFlow = in.readLong();downFlow = in.readLong();sumFlow = in.readLong(); }
  • 注意反序列化的順序和序列化的順序完全一致
  • 要想把結(jié)果顯示在文件中,需要重寫toString(),可用”\t”分開,方便后續(xù)用。
  • 如果需要將自定義的bean放在key中傳輸,則還需要實(shí)現(xiàn)comparable接口,因?yàn)閙apreduce框中的shuffle過程一定會(huì)對(duì)key進(jìn)行排序。
  • @Override public int compareTo(FlowBean o) {// 倒序排列,從大到小return this.sumFlow > o.getSumFlow() ? -1 : 1; }

    總結(jié)

    以上是生活随笔為你收集整理的Hadoop之Hadoop序列化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。