Serialization Avro可写文件的替代品

Serialization Avro可写文件的替代品,serialization,hadoop,avro,Serialization,Hadoop,Avro,我对Hadoop非常陌生,必须深入研究它的序列化。我知道Hadoop自带一个名为Writables的序列化程序。我很想知道Avro或protobuf,thrift是否取代了Writables接口,或者Avro只是用于序列化MR客户机数据,而不是用于诸如namenode和datanode之间的内部通信。Avro是一个序列化库,具有多种语言的API。AVRO是使用/实现键/值对象作为可写对象的替代方案,但hadoop在各种服务datanodes、namenodes、,作业和任务跟踪器。我在某个地方读

我对Hadoop非常陌生,必须深入研究它的序列化。我知道Hadoop自带一个名为Writables的序列化程序。我很想知道Avro或protobuf,thrift是否取代了Writables接口,或者Avro只是用于序列化MR客户机数据,而不是用于诸如namenode和datanode之间的内部通信。

Avro是一个序列化库,具有多种语言的API。AVRO是使用/实现键/值对象作为可写对象的替代方案,但hadoop在各种服务datanodes、namenodes、,作业和任务跟踪器。

我在某个地方读到,Avro很可能最终成为Hadoop中的标准内部数据交换机制/序列化框架,这是有意义的,因为它是基于继承的,很像新的Hadoop API,即使用mapreduce命名空间作为其库的API,而旧的API映射库是基于接口的。这意味着,在实践中,您当然可以将avro与这两种API一起使用,尽管如果您使用的是mapred LIB(例如,多种输出格式、链映射器),则可能需要定制一到两种代码

但是Avro提供的远不止是不需要您自己的可写文件,尽管在我看来,这是一个相当大的优点:它提供了相当高效的序列化,可以根据生成的实体类(如thrift)进行序列化,也可以选择使用所谓的GenericRecord结构,而且不需要有标记的数据。这是可能的,因为Avro在读写时总是有可用的数据模式,它实际上以json格式保存为数据文件中的头,这意味着您可以选择从一组字段投影到这些字段的子集,只需在用于读取数据的模式中隐式提供此信息。然后,您可以通过调整模式来适应输入数据结构中的更改,而不是在多个位置更改代码。您还可以通过适当地定义模式来更改数据的排序方式,因为有一个可选的ORDER属性available。

但是这个呢-。它说,从hadoop-0.23开始,编译本版和更高版本的hadoop需要本机二进制文件。是Apache推动protobuf而不是AVRO作为内部序列化框架吗?