序列化與反序列化的作用
1,序列化是對象轉化為字節序列的過程;
2,反序列化是字節碼恢復為對象的過程;
序列化的作用主要有兩個:
(1),對象向的持久化;即把對象轉換成字節碼后保存文件;
(2),對象數據的傳輸;
反序列化的主要作用:
對<key,value>反序列化成Hive table的每一列的值;Hive可以方便的將數據加載到表中而不需要對數據進行轉換,這樣在海量數據處理時,可以節省大量的時間。
在Hive的HQL語句中,select時將會用到序列化操作, insert 時會用到反序列化操作,下面是具體的操作過程。
SerDe使用
Hive創建表時,通過定義的SerDe或使用Hive內置的SerDe類型指定數據的序列化和反序列化方式。
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] [CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] [ROW FORMAT row_format] [STORED AS file_format] [LOCATION hdfs_path]
如上創建表語句, 使用row format 參數說明SerDe的類型。
SerDe包括內置類型
Avro
ORC
RegEx
Thrift
Parquet
CSV
JsonSerDe
Eg..
CREATE EXTERNAL TABLE IF NOT EXISTS teacher ( id BIGINT, name STRING, age INT) ROW FORMAT SERDE 'com.coder4.hive.MySerDe' STORED AS TEXTFILE LOCATION '/usr/hive/text/'
參考:https://www.jianshu.com/p/9c43f03b97e7
https://cwiki.apache.org/confluence/display/Hive/DeveloperGuide#DeveloperGuide-HiveSerDe