精彩解密大數據之精絕古城

     Avro schema作爲大數據一個項目,它可以算得上精品中的上等品,讓學習或者想要學習大數據的人爲之傾倒,不斷挖掘學習,那麼它究竟有着怎樣的神祕面紗呢?我們一起來揭開!

爲了理解Avro,首先要理解序列化。序列化是在內存裏表述數據的一種方式,它是一連串的字節,可以保存數據到磁盤或通過網絡發送出去,反序列化允許你把數據讀回到內存。

舉個實際的例子,我們如何序列化數字108125150?可以指定一些具體類型:(1)當存儲爲Java int類型時是4 bytes;(2)當存儲爲Java string類型時是9 bytes.

很多編程語言和庫都支持序列化,比如Java裏的Serializable或Python的pickle。但是向後兼容和交叉語言支持對我們來講可能是一項挑戰,而Avro就是開發出來應對這些挑戰。

  • 什麼是Apache Avro

Avro數據文件格式只是Avro項目的一部分,它是高效的數據序列化框架,是由Doug Cutting創立的Apache頂級項目,在Hadoop和它的生態系統得到廣泛的支持。最大的特點就是在不犧牲性能的前提下提供兼容性,可在Java、C、C++、C#、Python、PHP和其他語言中讀寫數據。Avro也支持RemoteProcedure Calls(RPC),可以用於構建定製網絡協議,而且Flume使用它進行內部通信。

  • AvroSchemas支持的類型

1)簡單類型:

wKioL1h0MzKz3uR6AAGqlMYvIb0357.png-wh_50

(2)複雜類型

wKiom1h0M0HC0YK7AAAnTM_0Yrc480.png-wh_50

這裏record類型最重要,其他類型主要用來定義record的字段。

  • 基本schema示例

這裏我們先引用一段SQL CREATE TABLE語句

wKioL1h0M4iAoFtzAABUgHCUydI192.png-wh_50

然後我們使用Avro schema來表達同樣的語句

wKioL1h0M5exvytGAADkMT9XlXo512.png-wh_50

  • 在Schema裏指定默認值

Avro支持在schema裏設置默認值,當沒有明確指定字段值的時候使用,和SQL相似

wKiom1h0M6XAr1z3AAEFMM0RjFY459.png-wh_50

  • AvroSchemasNull

1)當序列化數據時Avro檢查null

2)當在schema裏明確指定時纔可以使用Null

wKioL1h0M7OAgO1rAAETPEHC1Qo609.png-wh_50

  • 複雜類型的schema示例

示例:帶enumstring array類型的record

wKioL1h0M7_AnRQTAAHzBeNOkwE005.png-wh_50

  • 註釋schema

schema加註釋是一種避免歧義的好的做法

1)所有的類型都支持加上可選的doc屬性

wKiom1h0M8yz8u0ZAAFjU2HvWSY864.png-wh_50

  • Avro容器格式

Avro定義了一種容器文件格式來存儲Avro記錄,也稱爲“Avro數據文件格式”。和Hadoop SequenceFile格式相似,支持交叉語言的數據讀寫。它也支持塊記錄的壓縮,壓縮後數據可分片。另外這種格式是自描述的,每個文件包含一份schema的拷貝,用於寫數據,並且所有記錄在文件中必須使用相同的schema

  • 使用Avro工具檢查Avro數據文件

Avro數據文件是一種高效存儲數據的方式,然而,二進制格式使得debug很不方便。使用avro-tools命令來操作二進制文件,可以讀取Avro文件裏的schema或數據。

wKiom1h0M-LDJy4JAAE7LRd6jeU663.png-wh_50

挖掘了一番,你有沒有挖掘到寶貝呢?如果找到了,這絕對是你的私人財產,如果沒有,也沒有關係,因爲還有猛料等你來!盛大網絡大咖親自坐鎮,分享大數據乾貨,一起來吧!關注微信公衆號“大數據cn”,一起來交流。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章