14

我管理着一个小型开发团队,在任何给定时间,我们都有几个正在进行的(一次性)数据项目,这些项目可以被认为是“令人尴尬的并行”——​​这些通常涉及在一台计算机上运行一个脚本数天,这是一个经典例如,处理数千个 PDF 文件以提取一些关键文本并放入 CSV 文件中,以便稍后插入数据库。

我们现在已经完成了足够多的此类任务,我开始研究使用 RabbitMQ 和一些备用服务器开发一个简单的作业队列系统(着眼于将 Amazon SQS/S3/EC2 用于需要更大扩展的项目)

在寻找其他人这样做的例子时,我不断遇到经典的 Hadoop New York Times 例子:

纽约时报使用 100 个 Amazon EC2 实例和一个 Hadoop 应用程序在 24 小时内将 4 TB 的原始图像 TIFF 数据(存储在 S3 中)处理成 1100 万个完成的 PDF,计算成本约为 240 美元(不包括带宽)

哪个听起来很完美?所以我研究了 Hadoop 和 Map/Reduce。

但我想不通的是他们是怎么做到的?或者他们为什么这样做?

在 PDF 中转换 TIFF 肯定不是 Map/Reduce 问题吗?一个简单的作业队列不是更好吗?

另一个经典的 Hadoop 示例是Yahoo Hadoop 教程中的“wordcount”,它似乎非常适合 Map/Reduce,我可以理解为什么它是大数据如此强大的工具。

我不明白这些“令人尴尬的并行”任务是如何放入 Map/Reduce 模式的?

TL;博士

这是一个非常概念性的问题,基本上我想知道如何将“处理数千个 PDF 文件以提取一些关键文本并放入 CSV 文件”的任务融入 Map/Reduce 模式?

如果您知道任何完美的示例,我并不是要您为我编写它。

(注意:我们有处理 PDF 的代码,我不是要求那个 - 这只是一个例子,它可以是任何任务。我要求将这样的过程放入 Hadoop Map/Reduce 模式中 - 当有对任务没有明确的“映射”或“减少”元素。)

干杯!

4

2 回答 2

5

你的想法是对的。

您提到的上述示例仅使用了 hadoop 提供的部分解决方案。他们肯定使用了hadoop的并行计算能力加上分布式文件系统。您不必总是需要减少步骤。您可能在运行的并行进程之间没有任何数据相互依赖性。在这种情况下,您将消除 reduce 步骤。

我认为您的问题也将适合 hadoop 解决方案域。

您拥有大量数据 - 大量 PDF 文件和一项长期运行的工作

您可以通过将文件放在 HDFS 上并运行 MapReduce 作业来并行处理这些文件。理论上,您的处理时间会随着集群上的节点数量而提高。如果您不需要聚合由各个线程生成的数据集,则不需要使用 reduce 步骤,否则您还需要设计 reduce 步骤。

这里的问题是,如果您不需要 reduce 步骤,您只是利用 hadoop 的并行计算能力,加上您有能力在不那么昂贵的硬件上运行您的作业。

于 2013-04-01T13:47:33.117 回答
1

我还需要添加一件事:错误处理和重试。在分布式环境中,节点失败是很常见的。我定期运行由数百个节点组成的 EMR 集群 3 - 8 天,发现在此期间很可能有 3 或 4 个失败。Hadoop JobTracker 将很好地在不同的节点中重新提交失败的任务(最多一定次数)。

于 2015-01-22T00:15:30.167 回答