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