Hive的序列化/反序列化(SerDe)
如果說前兩者分別是Hive模式設計的沙漠飛鷹和AK47,那麼SerDe就是巡航導彈。
下面我們來看一下SerDe是什麼。
SerDe是序列化/反序列化的簡寫形式,其作用是將一條非結構化位元組轉化成Hive可以使用的一條記錄。Hive本身自帶了幾個內建的SerDe,而一些第三方的SerDe也十分常用。
我們舉例介紹一下常見SerDe:
RegexSerDe
CSVSerde/TSVSerde
JsonSerde
AvroSerDe
LazySimpleSerDe
......
以JsonSerde為例,
#
本例中,/data/messages檔案為Json格式。JsonSerde讀取messages中的每一條記錄,並解析成Json Object,在程式碼中以$表示。類似"msg_id"="$.id"這樣的操作語句,表示獲取$["id"]的資料內容並轉化成messages中的msg_id。
一旦定義好之後,使用者就不再需要關心如何讀取解析Json資料,可以像運算元據庫資料一樣操作Json資料。serdeproperties是Hive提供給SerDe的一個功能,Hive並不關心這些配置屬性是什麼。在讀取檔案記錄的時候,SerDe讀取相應的配置資訊來完成解析工作。也就是說,serdeproperties其實是SerDe的配置介面,一種SerDe擁有一種配置資訊格式,而不同SerDe之間的serdeproperties配置資訊並沒有任何關聯。下圖為SerDe的工作原理,
Hive的SerDe著實是一項重磅武器。對於絕對大多數常用的資料格式,Hive官方或者第三方都提供了相應的SerDe。如果有公司和團隊劍走偏鋒,採用一些“非凡”的資料格式,仍然可以自定義SerDe。
例如,友盟的移動APP日誌資料就採用Google Protobuf格式,並選用高壓縮比的lzma/lzo作為壓縮演算法,而Hive原生態元件中並不支援解析這樣的資料格式。如果將Protobuf+lzo的資料轉化成文字或者Json以方便Hive讀取,又將面臨大量的資料冗餘。友盟資料倉儲搭建採用了Twitter開源專案ElephantBird提供的“ProtobufDeserializer”,又在此基礎上實現了對lzo/lzma的解壓縮功能,無縫地對接上了友盟資料平臺的離線日誌。 友盟的小夥伴們從此走上了幸福而快樂的資料分析之路。
相關文章
- 使用快取記憶體Serde加速Kafka反序列化效能 - Kaszuba快取記憶體Kafka
- 物件序列化(序列化)物件
- python的序列化和反序列化Python
- Java的序列化和反序列化Java
- Java的序列化與反序列化Java
- Java序列化、反序列化、反序列化漏洞Java
- 序列化與反序列化
- Java中的序列化與反序列化Java
- PHP的序列化和反序列化入門PHP
- .NET物件的XML序列化和反序列化物件XML
- 序列化與反序列化(GO)Go
- 25. 乾貨系列從零用Rust編寫正反向代理,序列化之serde是如何工作的Rust
- Java物件的序列化和反序列化實踐Java物件
- 從java的序列化和反序列化說起Java
- Java物件的序列化與反序列化-Json篇Java物件JSON
- 高效的序列化/反序列化資料方式 Protobuf
- C++ 序列化和反序列化C++
- ctf serialize 序列化和反序列化
- xml序列化和反序列化(一)XML
- 序列化
- Python中序列化/反序列化JSON格式的資料PythonJSON
- jackson序列化與反序列化的應用實踐
- jackson對日期的處理(序列化與反序列化)
- Fastjson定製屬性的序列化和反序列化ASTJSON
- [Java基礎]序列化和反序列化Java
- Flutter中JSON序列化與反序列化FlutterJSON
- JSR310-LocalDateTime序列化 & 反序列化JSLDA
- C#序列化和反序列化(json)C#JSON
- Python中物件序列化和反序列化Python物件
- IO流(3) - 序列化和反序列化
- 關於序列化與反序列化的一些思考
- springboot自定義ObjectMapper序列化、配置序列化對LocalDateTime的支援Spring BootObjectAPPLDA
- jackson對Exception型別物件的序列化與反序列化Exception型別物件
- 為什麼需要序列化和反序列化
- 序列化/反序列化,我忍你很久了
- Django REST framework 序列化與反序列化(4)DjangoRESTFramework
- redis的序列化(四)Redis
- java的序列化SerializableJava