您好,登錄后才能下訂單哦!
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)簡單類型:
(2)復雜類型
這里record類型最重要,其他類型主要用來定義record的字段。
基本schema示例
這里我們先引用一段SQL CREATE TABLE語句
然后我們使用Avro schema來表達同樣的語句
在Schema里指定默認值
Avro支持在schema里設置默認值,當沒有明確指定字段值的時候使用,和SQL相似
AvroSchemas和Null值
(1)當序列化數據時Avro檢查null值
(2)當在schema里明確指定時才可以使用Null值
復雜類型的schema示例
示例:帶enum和string array類型的record
注釋schema
給schema加注釋是一種避免歧義的好的做法
(1)所有的類型都支持加上可選的doc屬性
Avro容器格式
Avro定義了一種容器文件格式來存儲Avro記錄,也稱為“Avro數據文件格式”。和Hadoop SequenceFile格式相似,支持交叉語言的數據讀寫。它也支持塊記錄的壓縮,壓縮后數據可分片。另外這種格式是自描述的,每個文件包含一份schema的拷貝,用于寫數據,并且所有記錄在文件中必須使用相同的schema。
使用Avro工具檢查Avro數據文件
Avro數據文件是一種高效存儲數據的方式,然而,二進制格式使得debug很不方便。使用avro-tools命令來操作二進制文件,可以讀取Avro文件里的schema或數據。
挖掘了一番,你有沒有挖掘到寶貝呢?如果找到了,這絕對是你的私人財產,如果沒有,也沒有關系,因為還有猛料等你來!盛大網絡大咖親自坐鎮,分享大數據干貨,一起來吧!關注微信公眾號“大數據cn”,一起來交流。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。