2016-08-25 87 views
2

我是Hadoop和編程的新手,我對Avro架構的演變有點困惑。我會解釋我對Avro到目前爲止的瞭解。Avro模式演進如何工作?

Avro是一個序列化工具,它將二進制數據及其json模式存儲在頂部。模式看起來像這樣。

{ 
    "namespace":"com.trese.db.model", 
    "type":"record", 
    "doc":"This Schema describes about Product", 
    "name":"Product", 
    "fields":[ 
     {"name":"product_id","type": "long"}, 
     {"name":"product_name","type": "string","doc":"This is the name of the product"}, 
     {"name":"cost","type": "float", "aliases":["price"]}, 
     {"name":"discount","type": "float", "default":5} 
    ] 
} 

現在我的問題是,爲什麼我們需要進化?我已經讀過,我們可以在模式中使用default來創建新字段;但如果我們在文件中添加一個新的模式,那麼以前的模式將被覆蓋。對於單個文件我們不能有兩個模式。

另一個問題是,什麼是讀者和作家的模式,他們如何幫助?

回答

6

如果你有一個avro文件,並且你想改變它的模式,你可以在裏面重新編寫一個新模式的文件。但是如果你有幾兆字節的avro文件而你想改變他們的模式呢?每次模式更改時,您是否會重寫所有數據?

模式演進允許您更新用於寫入新數據的模式,同時保持與舊數據模式的向後兼容性。然後你可以一起閱讀它,就好像所有的數據都有一個模式一樣。當然,爲了保持兼容性,管理允許的更改有精確的規則。這些規則列在Schema Resolution之下。

除了進化之外,讀者和寫者模式還有其他用例。您可以使用閱讀器作爲過濾器。想象一下數百個領域的數據,其中您只對少數領域感興趣。您可以爲這幾個字段創建一個模式,只讀取您需要的數據。您可以採取另一種方式並創建一個添加默認數據的讀取器模式,或者使用模式來加入兩個不同數據集的模式。

或者您可以只使用一個模式,它永遠不會改變,用於讀寫。這是最簡單的情況。

+0

謝謝@ jaco0646的詳細解釋。 –