我想构建一个hadoop应用程序,它可以读取一个文件中的单词并在另一个文件中搜索.
如果单词存在 - 它必须写入一个输出文件如果该单词不存在 - 它必须写入另一个输出文件
我在hadoop中尝试了几个例子.我有两个问题
两个文件各约200MB.检查另一个文件中的每个单词可能会导致内存不足.有没有其他方法可以做到这一点?
如何将数据写入不同的文件,因为hadoop的reduce阶段的输出只写入一个文件.是否可以使用过滤器来减少相位以将数据写入不同的输出文件?
谢谢.
我该怎么做:
通过单词"map"分割值,发出(
你会进入'减少':( )
检查源列表(对于两个/所有源可能很长)
如果并非所有源都在列表中,则每次都发出(
job2:job.setNumReduceTasks(
job2:在'map'中发出(
job2:为'reduce'中的每个
你最终会得到与不同
(*1)如何找到地图中的来源(0.20):
private String localname; private Text outkey = new Text(); private Text outvalue = new Text(); ... public void setup(Context context) throws InterruptedException, IOException { super.setup(context); localname = ((FileSplit)context.getInputSplit()).getPath().toString(); } public void map(Object key, Text value, Context context) throws IOException, InterruptedException { ... outkey.set(...); outvalue.set(localname); context.write(outkey, outvalue); }