使用JobControl测量Hadoop作业时间

时间:2012-04-12 07:44:03

标签: hadoop jobs timing

我曾经使用以下

启动我的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测量作业所用的时间?

1 个答案:

答案 0 :(得分:1)

JobControl没有很好的功能允许您挂钩并获取此信息。你有一些(可能是痛苦的)选择:

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