1、序列化与反序列化的作用
序列化是对象转化为字节序列的过程;
反序列化是字节码恢复为对象(存在于内存中)的过程;
对象的序列化主要有两种用途:对象的持久化,即把对象转换成字节序列后保存到文件中;对象数据的网络传送。
2、SerDe本质
编码的工具。
3、Hadoop SerDe
Mapreduce过程中会大量创建对象,并且在内存和磁盘之间读写数据,需要序列化(对象转化为字节序列)存放于磁盘中,一般的编码方式会占用大量的内存,为了减小开销,hadoop的序列化简化了编码的过程,使得高效、快速、开销小。
4、Hive SerDe
hive的建表时的SerDe主要作用还是用来读取、写入和解析数据(为表切分和解析列、Insert、Select等),建表时DELIMITED 作用主要也是用来读取、写入和解析数据。
在建表时可以指定SerDe的不同实现(对于不同文件的类型)或 DELIMITED来进行解析数据,并且使用STORED AS来指定文件的类型。
<建表导入数据example>
//假设t1已经有数据 表文件类型为textfile 解析方式为DeLimited
create table t1(id int,name string) ;
//创建t2 指定表文件类型
create table t1(id int,name string) stored as sequencefile;
//从t1导入数据到t2
insert into t2 select * from t1;
part 1:select * from t1;
使用select是一个反序列化过程,对对象数据进行网络传输。
part2:insert into t2
导入数据的过程默认会使用 sequencefile的内置SerDe来读取数据与解析数据,生成sequencefile存储于hdfs中。
序列化的实现主要还是得看表文件存储类型。