0

我曾经通过以下方式启动我的 Hadoop 工作

long start = new Date().getTime();
boolean status = job.waitForCompletion(true);            
long end = new Date().getTime();

这样我就可以测量工作在我的代码中直接结束后所花费的时间。

现在我必须使用 JobControl 来表达我的工作之间的依赖关系:

JobControl jobControl = new JobControl("MyJob");
jobControl.addJob(job1);
jobControl.addJob(job2);
job3.addDependingJob(job2);
jobControl.addJob(job3);

jobControl.run();

但是,一旦执行了 jobControl.run(),代码就不会更进一步,所以我不能包含代码来轮询 jobControl.getState() 以完成作业。

如何使用 JobControl 测量作业所花费的时间?

4

1 回答 1

1

JobControl 没有很好的功能可以让您挂钩并获取此信息。您可以尝试一些(可能很痛苦)的选择:

  • 从一个单独的线程开始JobControl.run(),在你的主线程中,轮询JobControl.getXXXJobs()方法以跟踪作业何时更改状态
  • 考虑使用Job End Notification URL hook,但这将要求您在客户端中启动“服务器”以接收通知事件,然后尝试从作业结束时向后工作
  • 扩展JobControljobcontrol.Job对象以跟踪作业何时更改状态并添加方法以查询开始/结束时间
于 2012-04-12T10:50:48.343 回答