Java大数据开发(三)Hadoop(16)-MapReduce3

2021年11月21日 阅读数:4
这篇文章主要向大家介绍Java大数据开发(三)Hadoop(16)-MapReduce3,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。
导读:上一节咱们使用MapReduce,编写了wordcount的案例,知道了在计算时,须要经过mapper类,reducer类和Driver类的参与。

什么是序列化和反序列化

序列化就是把内存中的对象,转换成字节序列(或其余数据传输协议)以便于存储(持久化)和网络传输。 java


反序列化与上述描述正好相反,就是将收到字节序列(或其余数据传输协议)或者是硬盘的持久化数据,转换成内存中的对象。微信


Java的序列化是一个重量级序列化框架(Serializable),一个对象被序列化后,会附带不少额外的信息(各类校验信息,header,继承体系等),不便于在网络中高效传输。hadoop有属于本身的一套序列化机制(Writable),更加精简高效。网络


hadoop序列化的特色

(1)紧凑:可以更高效的使用存储空间

(2)快速:读写数据快,额外的开销小

(3)互操做:支持多种语言的交互

经常使用的数据序列化类型

Java类型app

Hadoop Writable类型框架

booleanide

BooleanWritable函数

byteoop

ByteWritable大数据

intthis

IntWritable

float

FloatWritable

long

LongWritable

double

DoubleWritable

string

Text

map

MapWritable

array

ArrayWritable


自定义bean对象实现序列化接口(Writable)


在企业开发中每每经常使用的基本序列化类型不能知足全部需求,好比在Hadoop框架内部传递一个bean对象,那么该对象就须要实现序列化接口。


具体实现bean对象序列化步骤以下7步:


(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 {upFlow = in.readLong();downFlow = in.readLong();sumFlow = in.readLong();}


(6)要想把结果显示在文件中,须要重写toString(),可用”\t”分开,方便后续用。


(5)注意反序列化的顺序和序列化的顺序彻底一致


(7)若是须要将自定义的bean放在key中传输,则还须要实现Comparable接口,由于MapReduce框中的Shuffle过程要求对key必须能排序。


@Overridepublic int compareTo(FlowBean o) {// 倒序排列,从大到小return this.sumFlow > o.getSumFlow() ? -1 : 1;}

关注「跟我一块儿学大数据」

跟我一块儿学大数据

本文分享自微信公众号 - 跟我一块儿学大数据(java_big_data)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。