Hadoop MapReduce:读取文件并将其用作过滤其他文件的输入



我想编写一个hadoop应用程序,它将一个文件和一个包含多个文件的输入文件夹作为输入。单个文件包含需要从文件夹中的其他文件中选择和提取其记录的键。我怎样才能做到这一点?

顺便说一下,我有一个正在运行的hadoopmapreduce应用程序,该应用程序将文件夹的路径作为输入,进行处理并将结果写出到不同的文件夹中。

我有点纠结于如何使用文件来获取需要从特定目录中的其他文件中进行选择和提取的密钥。包含密钥的文件是一个大文件,因此不能直接放入主存储器。我该怎么做?

感谢!

如果密钥数量太大而无法放入内存,请考虑将密钥集加载到布隆过滤器(大小合适以产生低误报率)中,然后处理文件,检查每个密钥在布隆过滤器中的成员身份(Hadoop附带一个BloomFilter类,请查看Javadocs)。

您还需要执行第二个 MR 作业来执行最终验证(很可能是在归约侧联接中),以消除第一个作业的误报输出。

我会在运行作业之前先读取单个文件。将所有需要的密钥存储在作业配置中。然后,您可以编写作业以从文件夹中读取文件。在您的映射器/化简器setup(context)方法中,从配置中读出密钥并将它们全局存储,以便您可以在mapreduce期间读取它们。

相关内容

最新更新