Avro schema,序列化框架的金領

Avro schema,序列化框架的金領

Avro schema,序列化框架的金領

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相似

五、 AvroSchemasNull

(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」是我平時自己在自主學習過程中找到微信服務號,裡面介紹的關於大數據的知識以及大數據發展的一些行業知識都很不錯,平常大家可以看看。


推薦閱讀:

公共安全領域智能積分模型如何構建?
從頭學習大數據培訓課程 spark 基於內存的分散式計算框架(三)RDD 編程二次排序、mapjoin
相信未來——深度好詩,值得所有心懷希望的人讀!
大數據時代下的遷移學習
MaxCompute(原ODPS)使用總結-初級篇

TAG:大數據 | Hadoop | 大數據時代 |