2010-03-21 90 views
16

根據Apache AVRO項目,「Avro是一個序列化系統」。通過說數據序列化系統,這是否意味着avro是產品還是api?什麼是數據序列化系統?

另外,我不確定數據序列化系統是什麼?現在,我的理解是,它是一個定義數據對象如何通過網絡傳遞的協議。任何人都可以用一種直觀的方式幫助解釋它,這對分佈式計算背景有限的人來說更容易理解嗎?

提前致謝!

回答

26

因此,當Doug Cutting編寫Hadoop時,他決定使用Java對象序列化(Java Serialization)序列化Java對象的標準Java方法不符合他對Hadoop的要求。即,這些要求是:

  1. 序列化數據爲緊湊二進制格式。
  2. 快速,無論在性能上還是數據傳輸速度有多快。
  3. 可互操作使其他語言更容易插入Hadoop。

正如他描述的Java序列:

它看起來又大又毛茸茸的,我雖然我們需要一些瘦肉,而是使用Java序列化他們寫下自己的序列化框架的意思

。 Java序列化的主要問題在於它將每個正在序列化的對象的類名寫入流中,該類的每個後續實例都包含對第一個對象的5字節引用,而不是類名。

除了減少流的有效帶寬,這也會導致隨機訪問以及序列化流中記錄的排序問題。因此,Hadoop序列化不會寫入類名或必需的引用,並且假定客戶端知道預期的類型。

Java序列化還爲每個反序列化的對象創建一個新對象。實現Hadoop序列化的Hadoop Writable可以重用。因此,有助於提高重複序列化和反序列化數十億記錄的MapReduce的性能。

Avro適合Hadoop,它以不同的方式處理序列化。客戶端和服務器交換描述數據流的方案。這有助於使它快速,緊湊,重要的是可以更輕鬆地將語言混合在一起。

So Avro定義了一個序列化格式,一個用於客戶端和服務器的通信這些串行流的協議,以及一種緊湊地保存文件中數據的方法。

我希望這會有所幫助。我認爲Hadoop的一些歷史記錄有助於理解爲什麼Avro是Hadoop的子項目以及它的意圖。

+2

非常感謝!這是非常有用的,我想我需要一點點的hadoop背景,以瞭解它的子項目:) – Yang 2010-03-22 12:41:33

0

如果您必須在有限的文件中存儲層次結構或數據結構實現細節等信息,並通過網絡傳遞該信息,則可以使用數據序列化。它接近理解XML或JSON格式。好處是可以反序列化轉換成任何序列化格式的信息,以重新生成類,對象,數據結構,無論序列化如何。

actual implementation-->serialization-->.xml or .json or .avro --->deserialization--->imlementation in original form 

Here是序列化格式列表的鏈接。評論你是否想要更多的信息! :)