hadoop-序列化和反序列化的概念

推荐深入研究学习的参考博客:
大数据入门基础系列之Hadoop文件的序列化,为什么不用Java的序列化
一、序列化
1.将对象转换为二进制的字节流并写入到输出流out中是序列化,write 的过程(最好记!!!)
2.从输入流in中读取二进制的字节流反序列化为对象是反序列化,readFields的过程(最好记!!!)
3、java序列化和hadoop序列化的区别
(1)Hadoop的序列化机制与Java的序列化机制不同,它将对象序列化到流中,值得一提的是java的序列化机制是不断的创建对象。但在Hadoop的序列化机制中,用户可以复用对象,这样就减少了java对象的分配和回收,提高了应用效率。
(2)hadoop在集群之间进行通讯或者RPC调用的时候,需要序列化,而且要求序列化要快,且体积要小,占用带宽要小。
4.Hadoop中定义哪些序列化相关的接口

 Hadoop中定义了两个序列化相关的接口:Writable 接口和 Comparable 接口,这两个接口可以合并成一个接口 WritableComparable。
    注意:Hadoop通过Writale接口实现的序列化机制,不过没有提供比较功能,所以要和java中的Comparable接口合并,提供一个接口WritableComparable。
       为了能够读取或者存储Java对象,MapReduce编程模型要求用户输入和输出数据中的key和value必须是可序列化的。在Hadoop MapReduce中,使一个java对象可序列化的方法是让其对应的类实现Writable接口。但对于Key而言,由于它是数据排序的关键字,因此还需要提供比较两个Key对象的方法。为此,Key对应类需实现WritableComparable接口。

这里写图片描述
5 、 对于一个特定的 Writable接口,我们可以对它进行哪些操作呢

    有两种常用操作:赋值和取值。
    这里我以 IntWritable 为例来分别说明(IntWritable 是对 Java 的 int 类型的封装)。
      1、通过 set() 函数设置 IntWritable 的值。

IntWritable value = new IntWritable();
value.set(588)
        或者,也可以使用构造函数来赋值。

IntWritable value = new IntWritable(588);
        2、通过get() 函数获取 IntWritable 的值。

int result = value.get();//这里获取的值为588

hadoop的NullWritable:

NullWritable是Writable的一个特殊类,实现方法为空实现,不从数据流中读数据,也不写入数据,只充当占位符,如在MapReduce中,如果你不需要使用键或值,你就可以将键或值声明为NullWritable,NullWritable是一个不可变的单实例类型。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值