2011-06-28 35 views
0

我有一个只执行Map函数的应用程序。 我创建了1000个作业,每个作业都有一个独特的PrefixFilter。 例子:Hadoop - 执行多地图作业

public void startNewScan(String prefix, long endTime) 
    Job job = new Job(conf, "MyJob"); 
    job.setNumReduceTasks(0); 

    Scan scan = new Scan(); 

    scan.setTimeRange(0, endTime); 
    scan.addColumn(Bytes.toBytes("col"), Bytes.toBytes("Value")); 
    scan.setFilter(new PrefixFilter(prefix.getBytes())); 

    TableMapReduceUtil.initTableMapperJob(tableName, scan, ExtractMapper.class, ImmutableBytesWritable.class, Result.class, job); 
    job.waitForCompletion(true); 
} 

现在 - 我不想等待完成,因为在执行1000年工作会带我到永远。为每项工作创建线程也不是一种选择。 这种用法有什么内置的吗? 喜欢的东西JobsPool接受所有的工作,有自己的waitForCompletion为所有作业..

在此先感谢, 乌迪

回答

0

用途:

job.submit(); 

"Submit the job to the cluster and return immediately." 
+0

是啊,我看到了这个功能,但事情是,一旦完成,我没有办法知道天气我所做的事情是否成功,我失去了在这个过程中抛出异常的任何迹象.. – Udi

+1

@Udi似乎有方法,如'isComplete ()','isRetired()'等,在[API](http://hadoop.apache.org/mapreduce/docs/current/api/org/ap痛/ hadoop的/映射精简/ Job.html) – CMR