Serde是 Serializer/Deserializer的簡寫。hive使用Serde進行行對象的序列與反序列化。
序列化是對象轉換為字節序列的過程。
序列化是字節序列恢復為對象的過程。
對象的序列化主要有兩種用途:對象的持久化,即把對象轉換成字節序列後保存到文件中;對象數據的網絡傳送。
除了上面兩點, hive的序列化的作用還包括:Hive的反序列化是對key/value反序列化成hive table的每個列的值。Hive可以方便的將數據加載到表中而不需要對數據進行轉換,這樣在處理海量數據時可以節省大量的時間。
SerDe說明hive如何去處理壹條記錄,包括Serialize/Deserilize兩個功能, Serialize把hive使用的java object轉換成能寫入hdfs的字節序列,或者其他系統能識別的流文件。Deserilize把字符串或者二進制流轉換成hive能識別的java object對象。比如:select語句會用到Serialize對象, 把hdfs數據解析出來;insert語句會使用Deserilize,數據寫入hdfs系統,需要把數據序列化。
當是讀取hdfs文件時key部分將會被忽略,在寫入hdfs時key總是壹個常量,壹般的行的數據是存儲在value中的。
妳可以創建表時使用用戶 自定義的Serde或者native Serde , 如果 ROW FORMAT沒有指定或者指定了 ROW FORMAT DELIMITED就會使用native Serde。 hive已經實現了許多自定義的Serde,之前我們在介紹stored時也涉及到:
使用正則來序列化行數據,如下例子:
按照json格式存儲text文件
按照 CSV / TSV格式來存儲text文件。
ROW FORMAT SERDE
‘org.apache.hadoop.hive.serde2.OpenCSVSerde’
STORED AS TEXTFILE
如下例子創建tsv文件,默認是csv文件的分隔符
hive的CSVSerde基於 csv-serde 實現。
最後附上 Hive User Meeting August 2009 Facebook 對serde的講解。