【发布时间】:2015-05-15 17:14:29
【问题描述】:
我在 Hadoop 中有一个大型数据集,其中包含许多不同客户的数据。
每个客户在此数据集中可以有许多订单商品,其中每天的数量从几百到几百万不等。
该数据集有大约 50,000 名客户。
我需要做的是为每个客户创建一份每日 XML 报告,其中每个客户的数据都在自己的文件中。这意味着一些文件会很小,但其他文件会很大(XML 表示非常冗长并且有很多字段)。
编写 Map Reduce 代码来生成 XML 很简单,我解决这个问题的第一个方法是使用 Hadoop 多输出在 reducer 中为每个客户编写一个文件。虽然这可行,但所有这些小文件都会给 Namenode 带来很大压力。此外,我需要将所有这些文件从 Hadoop 集群中导出,并将它们放在一个标准文件系统上,以便 Web 应用程序为它们提供服务,因此像这样导出大量文件也可能会出现问题。
我想出的另一个想法是创建一个序列文件,其键等于客户,值包含单个交易的 XML,按构成 XML 报告的顺序预先排序。然后我可以导出单个序列文件并编写一个简单的独立 Java 程序来读取序列文件并为每个客户写出一个文件。我已经在一个小数据集上对此进行了测试,希望性能可以。
有没有其他人遇到过这样的 Hadoop 问题,并且对如何解决这个问题有任何其他想法?
序列文件方法听起来是一种明智的方法吗?
【问题讨论】: