我想编写一个hadoop应用程序,它将一个文件和一个包含多个文件的输入文件夹作为输入。单个文件包含需要从文件夹中的其他文件中选择和提取其记录的键。我怎样才能做到这一点?
顺便说一句,我有一个正在运行的 hadoop mapreduce 应用程序,它将文件夹路径作为输入,进行处理并将结果写到不同的文件夹中。
我有点纠结于如何使用文件来获取需要从特定目录中的其他文件中选择和提取的密钥。包含密钥的文件是一个大文件,因此不能直接放入主存储器。我该怎么做?
谢谢!
如果键的数量太大而无法放入内存,则考虑将键集加载到布隆过滤器中(大小合适以产生低误报率),然后处理文件,检查每个键在布隆过滤器中的成员资格(Hadoop 带有一个 BloomFilter 类,请查看 Javadocs)。
您还需要执行第二个 MR 作业来进行最终验证(很可能是在 reduce 侧连接中),以消除第一个作业的误报输出。
在您运行工作之前,我会先阅读单个文件。将所有需要的密钥存储在作业配置中。然后,您可以编写一个作业来读取文件夹中的文件。在您的 mapper/reducersetup(context)
方法中,从配置中读出键并将它们全局存储,以便您可以在map
或期间读取它们reduce
。