Hadoop之Hadoop序列化


目录

  1. 什么是序列化
  2. 为什么要序列化
  3. 为什么不用Java的序列化
  4. 常用数据序列化类型
  5. 自定义bean对象实现序列化接口(Writable)

1. 什么是序列化

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

  2. 反序列化就是将收到字节序列(或其他数据传输协议)或者是硬盘的持久化数据,转换成内存中的对象。


2. 为什么要序列化

一般来说,“活的”对象只生存在内存里,关机断电就没有了。而且“活的”对象只能由本地的进程使用,不能被发送到网络上的另外一台计算机。 然而序列化可以存储“活的”对象,可以将“活的”对象发送到远程计算机。


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

Java的序列化是一个重量级序列化框架(Serializable),一个对象被序列化后,会附带很多额外的信息(各种校验信息,header,继承体系等),不便于在网络中高效传输。所以,hadoop自己开发了一套序列化机制(Writable),特点如下:

  1. 紧凑
    紧凑的格式能让我们充分利用网络带宽,而带宽是数据中心最稀缺的资源
  2. 快速
    进程通信形成了分布式系统的骨架,所以需要尽量减少序列化和反序列化的性能开销,这是基本的;
  3. 可扩展
    协议为了满足新的需求变化,所以控制客户端和服务器过程中,需要直接引进相应的协议,这些是新协议,原序列化方式能支持新的协议报文;
  4. 互操作
    能支持不同语言写的客户端和服务端进行交互;

4. 常用数据序列化类型

Java类型 Hadoop Writable类型
boolean BooleanWritable
byte ByteWritable
int IntWritable
float FloatWritable
long LongWritable
double DoubleWritable
String Text
map MapWritable
array ArrayWritable

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

自定义bean对象要想序列化传输,必须实现序列化接口,需要注意以下7项。

  1. 必须实现Writable接口
  2. 反序列化时,需要反射调用空参构造函数,所以必须有空参构造
public FlowBean() {super();
}
  1. 重写序列化方法
@Overridepublic void write(DataOutput out) throws IOException {out.writeLong(upFlow);out.writeLong(downFlow);out.writeLong(sumFlow);}
  1. 重写反序列化方法
@Override
public void readFields(DataInput in) throws IOException {upFlow = in.readLong();downFlow = in.readLong();sumFlow = in.readLong();
}
  1. 注意反序列化的顺序和序列化的顺序完全一致
  2. 要想把结果显示在文件中,需要重写toString(),可用”\t”分开,方便后续用。
  3. 如果需要将自定义的bean放在key中传输,则还需要实现comparable接口,因为mapreduce框中的shuffle过程一定会对key进行排序。
@Override
public int compareTo(FlowBean o) {// 倒序排列,从大到小return this.sumFlow > o.getSumFlow() ? -1 : 1;
}

Hadoop之Hadoop序列化相关推荐

  1. Java拾遗:004 - JDK、Hadoop、Hessian序列化

    2019独角兽企业重金招聘Python工程师标准>>> JDK序列化 在分布式架构中,序列化是分布式的基础构成之一,我们需要把单台设备上的数据通过序列化(编码.压缩)后通过网络传输给 ...

  2. 【云计算 Hadoop】Hadoop 版本 生态圈 MapReduce模型

    忘的差不多了, 先补概念, 然后开始搭建集群实战 ... . 一 Hadoop版本 和 生态圈 1. Hadoop版本 (1) Apache Hadoop版本介绍 Apache的开源项目开发流程 : ...

  3. Hadoop——(Hadoop框架,Hadoop的优缺点,Hadoop1.x和2.x的版本区别,Hadoop架构,Hadoop目录结构)

    文章目录 大数据的简介 Hadoop框架 Hadoop的优缺点 Hadoop1.x和2.x的版本区别 Hadoop架构 Hadoop目录结构 正常工作的Hadoop集群中Hadoop都分别需要启动哪些 ...

  4. 零基础linux安装hadoop步骤,hadoop的Linux下简单安装步骤

    首先安装Hadoop cluster版本: $ curl -O http://archive.cloudera.com/cdh/3/hadoop-0.20.2-cdh3u6.tar.gz $ cd / ...

  5. 「hadoop」hadoop启动需要相关的命令(仅供本人使用)

    #拷贝配置文件 cp -R /mnt/hgfs/D/SharedFiles/etc/hadoop/* /usr/hadoop/etc/hadoop #拷贝日志到win7 cp -R /usr/hado ...

  6. [Linux][Hadoop] 将hadoop跑起来

    前面安装过程待补充,安装完成hadoop安装之后,开始执行相关命令,让hadoop跑起来 使用命令启动所有服务: hadoop@ubuntu:/usr/local/gz/hadoop-2.4.1$ . ...

  7. BigData之Hadoop:Hadoop的简介、深入理解、下载、案例应用之详细攻略

    BigData之Hadoop:Hadoop的简介.深入理解.下载.案例应用之详细攻略 目录 Hadoop的简介 1.HDFS体系结构图 Hadoop的深入理解 0.深入了解Hadoop的其它相关基础知 ...

  8. Hadoop之Hadoop企业优化(HDFS小文件优化)

    Hadoop之Hadoop企业优化 目录 MapReduce 跑的慢的原因 MapReduce优化方法之数据输入 MapReduce优化方法之Map阶段 MapReduce优化方法之Reduce阶段 ...

  9. Hadoop之Hadoop数据压缩

    Hadoop之Hadoop数据压缩 目录 概述 MR支持的压缩编码 Gzip压缩 Bzip2压缩 Lzo压缩 Snappy压缩 压缩位置选择 压缩参数配置 1. 概述 压缩技术能够有效减少底层存储系统 ...

最新文章

  1. ICCV2021|首届城市规模点云语义理解挑战赛启动了
  2. lintcode480- Binary Tree Paths- easy
  3. 数据结构(C语言实现)勘误
  4. kernel 中标准的 ir 模块的 时间的定义_Linux开机流程详解:BIOSgt;MBRgt;GRUBgt;Kernel...
  5. 最全的 pip 使用指南,50% 你可能没用过。
  6. PHP两个字符串比较(人为出错),两字符串类型和数据表面相等,但strcmp()结果不为0...
  7. [Docker]Docker快速上手学习笔记
  8. 服务器不删档的设置_不删档预捏脸开启,快来体验次世代黑科技!
  9. JQuery根据值设置radio选中
  10. NUC1445 Euclid's Game【博弈】
  11. cisco路由器菜单的制作
  12. 机电传动控制第二周作业
  13. 营销模式线上与线下相结合
  14. heic文件怎么转换成jpg?实用图片格式转换方法分享
  15. 嵌入式Linux学习笔记(1-4)——下载bootoader
  16. windows winrar 指令_Windows上WinRAR.exe命令行参数说明
  17. 杰理之MIC 免电容方案需要设置【篇】
  18. ROM和硬盘的关系(ROM-RAM-NANDFLASH-HDD-SSD)
  19. 蓝牙Ibeacon室内定位之微信摇一摇原理浅析--蓝牙定位--新导智能
  20. ramos一键处理多合一_PrimoCache驱RAMOS一键制作工具四合一 V2.99版

热门文章

  1. 猫猫学IOS(二十一)UIApplication设置程序图标右上⾓红⾊数字_联⺴指⽰器等
  2. (转)开源 Apache 服务器安全防护技术精要及实战
  3. memcached 相关
  4. 数据结构与算法-数组
  5. CodeForces - 1480D2 Painting the Array II(dp)
  6. 服务器修改密码复杂性,【已解决】在windows server 2008域环境中如何禁用密码复杂性要求?...
  7. UVA140 Bandwidth带宽
  8. 无法全新安装_好墙板更需好安装:护墙板安装新方法
  9. arduino自带程序_arduino代码运行时间测试函数,代码性能运行时间测试方法
  10. L1-045. 宇宙无敌大招呼