我想知道是否有人在dfs上存储大文件然后阅读它的经验;例如,我希望有数千条描述单个对象的记录,它们是不同的实例。例如,我有以下类实现来描述对象:
class someclass {
attr1
attr2
attr3
....
}
该类是相同的但我会有不同的实例。哪个更好用于Hadoop,二进制类型存储(编写序列化程序并转储它)或ASCII并只是随意解析它们?
我还必须提到它中的属性数量可能会被改变,并且将来会有所不同。如果可能的话,我想避免更新已经在dfs中编写的类实例。
答案 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"}
]
}