【发布时间】:2012-01-03 17:45:04
【问题描述】:
场景:
我有一个数据库子集和一个数据仓库。我把这两个东西都带到了 HDFS 上。 我想根据子集和数据仓库分析结果。 (简而言之,对于子集中的一条记录,我必须扫描数据仓库中的每条记录)
问题:
我想使用 Map-Reduce 算法来完成这项任务。我不知道如何将这两个文件作为映射器的输入,以及如何在 map-reduce 的映射阶段处理这两个文件。
请建议我一些想法,以便我能够执行它?
【问题讨论】:
我有一个数据库子集和一个数据仓库。我把这两个东西都带到了 HDFS 上。 我想根据子集和数据仓库分析结果。 (简而言之,对于子集中的一条记录,我必须扫描数据仓库中的每条记录)
我想使用 Map-Reduce 算法来完成这项任务。我不知道如何将这两个文件作为映射器的输入,以及如何在 map-reduce 的映射阶段处理这两个文件。
请建议我一些想法,以便我能够执行它?
【问题讨论】:
查看Data-Intensive Text Processing with MapReduce 中的第 3.5 节(关系连接),了解 Map-Side Joins、Reduce-Side Joins 和 Memory-Backed Joins。无论如何,MultipleInput 类用于让多个映射器在单个作业中处理不同的文件。
仅供参考,您可以使用 Apache Sqoop 将 DB 导入 HDFS。
【讨论】:
前段时间,我为我的一个类写了一个 Hadoop map reduce。我正在扫描几个 IMD 数据库并生成有关演员的合并信息(基本上,他所扮演的姓名、传记和电影在不同的数据库中)。我认为您可以使用我在作业中使用的相同方法: 我编写了一个单独的 map reduce 以相同的格式将每个数据库文件转换为相同的格式,只需在 map-reduce 生成的每一行前面放置一个两个字母的前缀,以便能够区分“BI”(传记)、“MV”(电影)和很快。然后我使用所有这些生成的文件作为我的最后一张地图的输入,减少处理它们以所需的方式对它们进行分组。
如果您真的要扫描数据仓库的每一行,我什至不确定您需要做这么多工作。也许在这种情况下,您可以在 map 或 reduce 阶段进行此扫描(基于您想要执行的其他处理),但我的建议假设您实际上需要根据子集过滤数据仓库。如果后者我的建议可能对你有用。
【讨论】: