1.序列化
JAVA 类型 HADOOP 类型
int IntWritable
float FloatWritable
long LongWritable
double DoubleWritable
string Text
boolean BooleanWritable
byte ByteWritable
map MapWritable
array ArrayWritable
为什么要序列化?
存储“活的对象”
什么是序列化?
序列化就是把内存当中的对象,转换成字节序列以便于存储和网络传输
反序列化就是将受到的字节序列或者硬盘的持久化数据,转换成内存中的对象
java的序列化->Serializable
为什么不使用java提供的序列化接口?
java的序列化是一个重量级的序列化框架,一个对象被序列化后会附带很多额外的信息(效验信息,header,继承体系等)。
不便于在网络中高效传输,所以hadoop开发了一套序列化机制(Writable),精简/高效.
为什么序列化在hadoop中很重要?
hadoop通信是通过远程调用(rpc)实现的,需要进行序列化
特点:
1)紧凑
2)快速
3)可拓展
4)互操作 //多语言之间交互
2.编程规范
用户编写mr程序主要分为三个部分:Mapper,Reducer,Driver
1.Mapper阶段
(1)用户自定义mapper类 要继承父类Mapper
(2)Mapper的输入数据的kv对形式(kv类型可以自定义)
(3)Mapper的map方法的重写(加入业务逻辑)
(4)Mapper的数据输出kv对的形式(kv类型可以自定义)
(5)map()方法(maptask进程)对每个<k,v>调用一次
2.Reducer阶段
(1)用户自定义reducer类 要继承父类Reducer
(2)Reducer的数据输入类型对应的是Mapper阶段的输出数据类型,也是kv对
(3)Reducer的reduce方法的重写(加入业务逻辑)
(4)ReduceTask进程对每组的k的<k,v>组调用一次reduce方法
3.Driver阶段
mr程序需要一个Driver来进行任务的提交,提交的任务是一个描述了各种重要信息的job对象