hadoop输入格式二进制或ASCII

时间:2014-02-19 18:23:23

标签: hadoop hadoop-streaming

我想知道是否有人在dfs上存储大文件然后阅读它的经验;例如,我希望有数千条描述单个对象的记录,它们是不同的实例。例如,我有以下类实现来描述对象:

class someclass {
    attr1
    attr2
    attr3
    ....
}

该类是相同的但我会有不同的实例。哪个更好用于Hadoop,二进制类型存储(编写序列化程序并转储它)或ASCII并只是随意解析它们?

我还必须提到它中的属性数量可能会被改变,并且将来会有所不同。如果可能的话,我想避免更新已经在dfs中编写的类实例。

1 个答案:

答案 0 :(得分:1)

使用Avro二进制序列化。在这种情况下,您不能使用相同的类,但在属性和类型方面看起来相同。 Avro具有非常灵活的架构支持,可以拆分并完全支持Hadoop开箱即用。

您的类架构将如下所示:

{"namespace": "your.package.name",
 "type": "record",
 "name": "SomeClass",
 "fields": [
     {"name": "attr1", "type": "YourType1"},
     {"name": "attr2", "type": "YourType2"},
     {"name": "attr3", "type": "YourType3"}
 ]
}