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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hadoop--MapReduce_Hadoop序列化

發布時間:2025/3/17 编程问答 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hadoop--MapReduce_Hadoop序列化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 序列化概述
    • 什么是序列化
    • 為什么要序列化
    • 為什么不使用Java的序列化
  • 自定義bean對象實現序列化接口(Writable)
    • 實現bean對象序列化步驟

序列化概述

什么是序列化

序列化就是把內存中的對象,轉換成字節序列(或其他數據傳輸協議)以便于存儲到磁盤(持久化)和網絡傳輸。

反序列化就是將收到的字節序列(或其他數據傳輸協議)或者是磁盤的持久化數據,轉換成內存中對象。

為什么要序列化

一般來說,“活的”對象只生存在內存里,關機斷電就沒有了。而且“活的”對象只能由本地的進程使用,不能被發送到網絡上的另外一臺計算機。然而序列化可以存儲“活的”對象,可以將“活的”對象發送到遠程計算機。

為什么不使用Java的序列化

java的序列化是一個重量級序列化框架(Serializable),一個對象被序列化后,會s附帶很多額外的信息(各種校驗信息,Header,繼承體系等),不便于在網絡中高效傳輸。

而hadoop序列化具有以下優點:

緊湊:高效使用存儲空間;
快速:讀寫數據的額外開銷小;
可擴展:隨著通信協議的升級可升級;
互操作性:支持多語言的交互。

自定義bean對象實現序列化接口(Writable)

在企業開發中往往常用的基本序列化類型不能滿足所有需求,比如在hadoop框架內部傳遞一個bean對象,那么該對象就需要實現序列化接口。

實現bean對象序列化步驟

1.必須實現Writable接口;

2.反序列化時,需要反射調用空參構造函數,所以必須有空參構造:

public FlowBean(){super(); }

3.重寫序列化方法

@Overridepublic void write(DataOutput out) throws IOException {out.writeLong(upFlow);out.writeLong(downFlow);out.writeLong(sumFlow);}

4.重寫反序列化方法

@Overridepublic void readFields(DataInput in) throws IOException {this.upFlow = in.readLong();this.downFlow = in.readLong();this.sumFlow = in.readLong();}

5.注意反序列化的順序和序列化的順序完全一致;

6.要想把結果顯示在文件中,需要重寫toString()(默認傳輸的是地址值), 可用"\t"分開,方便后續使用;

7.如果需要將自定義的bean放在key中傳輸,還需要實現Comparable接口,因為MapReduce框架中的Shuffle過程要求對key必須能排序;

@Override public int comparaTo(FlowBean o){//從大到小倒序排列return this.sumFlow > o.getSumFlow() ? -1 : 1; }

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。