本帖最后由 吴超老师 于 2013-4-6 06:05 编辑
序列化是干什么用的?本质上讲,就是数据保存到虚拟机之外,然后又被读到虚拟机内.如果仅仅是保存,不关心能读进jvm的话,就不关心序列化问题了.正是因为需要被读进jvm,所以必须识别写出、读入的数据格式、字符顺序等问题。因此序列化也就是比较重视的事情了。拿密码来打比方:序列化就像加密,反序列化就像解密。只加密不解密那肯定是不行的。hdfs作为分布式存储系统必然涉及到序列化问题。
hdfs中需要序列化的数据必须实现Writable接口,就像在java序列化中必须实现java.io.Serializable接口一样.
hdfs中的各种数据类型都是需要序列化的,因此都实现了Writable接口。常用的数据类型包括IntWritable、LongWritable、Text、ArrayWritable等,就像java中的int、long、String、Array一样,大部分都是基本数据类型。这些基本类型构成了mapreduce运算的基本类型。
就像java中有集合Arrary、List、Set、Map一样,在hdfs也有ArrayFile、SequenceFile、SetFile、MapFile与之对应。
学习hdfs时,要注意学习基本数据类型和集合操作,这是进行mapreduce计算的基础组成部分。只有把数据类型搞清楚了,再学好MapReduce的算法模型,hadoop就基本搞定了。
到这里,有没有疑问:hadoop是用java写的,hdfs、MapReduce也是。既然java中有了序列化、有了基本数据类型、有了集合操作,为什么在hdfs中还要重新定义一套哪?为什么不用java中的哪?
预知答案如何,请听课堂讲解!
|