场景:
我有一个子数据库和一个数据仓库。我把这两件事都带到HDFS上了。我想基于子集和数据仓库来分析结果。(简而言之,对于子集中的一条记录,我必须扫描数据仓库中的每一条记录)
问题:
我想使用Map Reduce算法来完成这项任务。我不知道如何将两个文件都作为mapper中的输入,也不知道如何在map reduce的map阶段处理这两个文件。
请给我一些建议,这样我就可以表演了?
使用MapReduce检查数据密集型文本处理中的第3.5节(关系连接)中的Map侧连接、Reduce侧连接和内存支持连接。在任何情况下,MultipleInput类都用于让多个映射器在单个作业中处理不同的文件。
仅供参考,您可以使用ApacheSqoop将DB导入HDFS。
不久前,我为我的一个类编写了Hadoop映射reduce。我扫描了IMD的几个数据库,并制作了一个关于演员的合并信息(基本上,他的名字、传记和电影都在不同的数据库中)。我想你可以用我做作业时用的方法:我写了一个单独的map reduce,将每个数据库文件转换为相同的格式,只需在map reduces生成的每一行前面放一个两个字母的前缀,就可以说出"BI"(传记)、"MV"(电影)等等。然后,我将所有这些生成的文件用作我最后一个map reduced的输入,并以所需的方式对它们进行分组。
如果你真的要扫描数据仓库的每一行,我甚至不确定你是否需要这么多工作。在这种情况下,您可以在map或reduce阶段(根据您想要做的额外处理)进行扫描,但我的建议假设您实际上需要根据子集过滤数据仓库。如果是后者,我的建议可能对你有用。