我對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. RdKafka Avro Consumer
- 2. Bijection - Java Avro Serialization
- 3. Pyspark + Hive avro表
- 4. 替代替換
- 5. 代替代替使用PowerShell
- 6. 什麼是替代(替代())?
- 7. 替代蟒蛇代替
- 8. Avro ReflectDatumWriter中的NullPointerException
- 9. Avro支持Flink - scala
- 10. Avro模式存儲
- 11. 亞類Avro記錄?
- 12. avro 1.8.1 BigInteger轉換
- 13. Avro尺寸太大?
- 14. 在Avro的文件
- 15. Apache AVRO與休息
- 16. Avro Map-Reduce on oozie
- 17. Spark:寫Avro文件
- 18. Avro RPC/Storm集成
- 19. Sqoop2的Avro支持
- 20. 如何使用Avro
- 21. spring-cloud-stream kafka avro
- 22. 替代
- 23. 替代
- 24. 替代
- 25. (。*)代替(。*?)
- 26. 替代
- 27. 替代
- 28. ViewModel代替主鍵代替主鍵
- 29. c#Array.ForEach替代元素替代
- 30. 替代corba的好替代品
但是這個怎麼樣 - http://wiki.apache.org/hadoop/ProtocolBuffers。它說,從hadoop-0.23開始,本地二進制文件需要編譯Hadoop的這個版本和更高版本。 Apache是否推動protobuf而不是AVRO作爲內部序列化框架? –