我對Hadoop非常陌生,不得不深入研究它的序列化。我知道Hadoop帶有自己的序列化程序,名爲Writables。我很想知道Avro(或protobuf,thrift)是否取代了Writables接口,或者Avro只是用於序列化MR客戶端數據,而不是說namenode和datanode之間的內部通信。Avro替代Writables
0
A
回答
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屬性)。
相關問題
- 1. Bijection - Java Avro Serialization
- 2. Pyspark + Hive avro表
- 3. 替代蟒蛇代替
- 4. 如何使用Avro
- 5. Apache AVRO與休息
- 6. Avro尺寸太大?
- 7. 在Avro的文件
- 8. Avro Map-Reduce on oozie
- 9. avro 1.8.1 BigInteger轉換
- 10. Avro RPC/Storm集成
- 11. Avro ReflectDatumWriter中的NullPointerException
- 12. Avro支持Flink - scala
- 13. 替代
- 14. (。*)代替(。*?)
- 15. 替代
- 16. Avro的淨串行忽略了Avro的屬性
- 17. 爲什麼DataFrameReader沒有「avro」方法來讀取avro文件?
- 18. 如何使用apache avro生成無模式的avro文件?
- 19. Logstash avro輸出不能被apache解碼avro-tools
- 20. 使用`/ *`代替`//`代替文件頭
- 21. ViewModel代替主鍵代替主鍵
- 22. 替代corba的好替代品
- 23. c#Array.ForEach替代元素替代
- 24. 替換使用替代
- 25. Java替換替代碼
- 26. 我在哪裏可以得到Avro代碼示例?
- 27. 使用avro-maven-plugin版本1.6.1時的棄用代碼
- 28. Avro 1.8.2 BigDecimal(邏輯類型)的Java代碼生成
- 29. 不能寫avro文件
- 30. 在Python 3.5 Avro編寫器
但是這個怎麼樣 - http://wiki.apache.org/hadoop/ProtocolBuffers。它說,從hadoop-0.23開始,本地二進制文件需要編譯Hadoop的這個版本和更高版本。 Apache是否推動protobuf而不是AVRO作爲內部序列化框架? –