Hadoop序列化

mapreduce流程


第一步中, 客户端编写好了代码并打包成jar包,会提交到集群中,也就是Cluster中,通讯方式就是通过RPC来通讯的。(RPC的一个最简单示例) 
当集群收到请求后,就会告诉yarn,请求分配资源。当yarn处理之后,会返回一个地址给client(第二步)。客户端去这个地址拷贝jar包(第三步)。 
第四步 就是提交任务给RM,主要提交的是任务的描述信息,比如jobID、jar包存在的位置、配置的信息等等。 
第五步 RM对任务进行初始化操作。分配资源,CPU、内存等等。 
第六步 资源分配完成后,回去HDFS上拷贝数据。并把数据分片。 
第七步 nodemanager通过心跳机制去获取RM上的任务资源得到任务信息。 
第八步 nm会从HDFS上下载jar包 
第九步 运行jar包 
第十步 处理完成任务以后,把数据写回到HDFS中。


序列化(Serialization)

  • 序列化最主要的作用是把结构化的对象转化成字节流
  • 反序列化(Deserialization)序列化的逆进程将字节流转化成结构化对象(还原数据)。

  • hadoop序列化的特点: 
    • 紧凑:高效使用存储空间
    • 快速:读写数据的额外开销小
    • 可扩展:可透明的读取老格式的数据
    • 互操作:支持多种语言的交互
    • Hadoop 序列化接口
    • org.apache.hadoop.io.Writable
    • hadoop序列化的作用
    • 序列化在分布式环境的两大作用:进程间通信,永久存储。

  • hadoop节点间通信
<code class="language-seq hljs haskell has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">消息序列化为二进制流->二进制流反序列化为消息: 二进制流消息
</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

  • Writable接口 
    Writable接口是根据DataInput和DataOutput实现的简单、有效的序列化对象
  • MR的任意Key和Value必须实现Writable接口。

  • MR的任意Key必须实现WritableComparable接口
  • 转载自http://blog.csdn.net/beidiqiuren/article/details/51759554

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值