我怎样才能以编程方式获取Hadoop在Web界面中显示的所有作业跟踪器和任务跟踪器信息?

我正在使用Cloudera的Hadoop发行版CDH-0.20.2CDH3u0。 有没有什么方法可以获得诸如jobtracker状态,tasktracker状态,使用在hadoop框架之外运行的JAVA程序的计数器等信息? 我尝试使用JMX进行监听,但hadoop提供的有关Jobtracker,tasktracker和datanode的信息非常少。 它不提供与运行作业状态相关的任何JMX属性,如映射百分比完成,减少完成百分比,任务完成百分比,尝试完成百分比,计数器状态等。

此外,我尝试使用hadoop转储的指标日志。 但它也不包含任何关于地图/减少完成百分比,完成任务百分比的信息。

我认为,应该有一些替代方法来获得所有这些东西。

请回复。

我不确定这是否正确,但您可以尝试HUE。 我认为HUE提供有关工作的信息。 从开源开始,您就可以看到他们如何访问作业跟踪器和名称跟踪器。

您可以使用Hadoop API以编程方式访问此信息。 特别是,使用适合您的集群的配置实例化JobClient ,然后您可以在该实例上使用getJob来获取RunningJob 。 有了这个,你应该能够得到你正在寻找的细节(以下代码是完全未经测试的,但我希望在正确的想法的方向):

 JobClient theJobClient = new JobClient(new InetSocketAddress("your.job.tracker", 8021), new Configuration()); RunningJob theJob = theJobClient.getJob("job_id_string"); // caution, deprecated float mapProgress = theJob.mapProgress(); // similar for reduceProgress // etc (see RunningJob) 

您还可以使用theJobClient.jobsToComplete获取当前正在运行的作业theJobClient.jobsToComplete ,它返回一个theJobClient.jobsToComplete数组,它应该公开类似的值( mapProgress等),并且可以提供您可以用来获取上面的RunningJobJobID实例(如果你想避免弃用的方法)。

当然还有其他选择。 从http://hadoop.apache.org/common/docs/r0.20.2/api/org/apache/hadoop/mapred/JobClient.html开始了解更多详情。