2012-05-02 64 views
0

我對Hadoop非常陌生,不得不深入研究它的序列化。我知道Hadoop帶有自己的序列化程序,名爲Writables。我很想知道Avro(或protobuf,thrift)是否取代了Writables接口,或者Avro只是用於序列化MR客戶端數據,而不是說namenode和datanode之間的內部通信。Avro替代Writables

回答

0

AVRO是一個序列化庫(帶有多種語言的apis)。 AVRO是使用/實現Key/Value對象作爲Writable的替代方案,但在各種服務(datanodes,namenodes,job和任務跟蹤器)之間進行通信時,hadoop仍然使用它自己的RPC數據結構。

0

我讀過的地方是Avro最終可能成爲Hadoop中的標準內部數據交換機制/序列化框架,這很有意義,因爲它基於繼承,就像「新」Hadoop API(那個使用mapreduce名稱空間作爲其庫),而「舊」API(mapred庫)則基於接口。這意味着,實際上,您可以在兩個API中都使用avro,但如果您使用映射庫(例如多個輸出格式,鏈式映射器),則有一兩件事可能需要自定義代碼。但是Avro提供的遠遠不僅僅是「只是」放棄了對自己寫入的需求(儘管這在我看來有很大的優勢):它提供了相當高效的序列化,序列化與生成的實體類(如節儉要求)或使用所謂的GenericRecord結構,而不必標記數據。這是可能的,因爲Avro在讀取和寫入時總是有其數據模式可用(它實際上以json格式作爲數據文件中的頭文件保存),這意味着您可以選擇從一組字段「投影」到這些字段只需在用於讀取數據的模式中隱式提供此信息。然後,您可以通過調整模式來適應輸入數據結構的變化,而不是在多個地方更改代碼。您還可以通過適當地定義模式來更改數據的排序方式(因爲有可選的ORDER屬性)。

+0

但是這個怎麼樣 - http://wiki.apache.org/hadoop/ProtocolBuffers。它說,從hadoop-0.23開始,本地二進制文件需要編譯Hadoop的這個版本和更高版本。 Apache是​​否推動protobuf而不是AVRO作爲內部序列化框架? –