Java 如何以编程方式获取Hadoop在web界面中显示的所有作业跟踪器和任务跟踪器信息?

Java 如何以编程方式获取Hadoop在web界面中显示的所有作业跟踪器和任务跟踪器信息?,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,我正在使用Cloudera的Hadoop发行版CDH-0.20.2CDH3u0。 是否有任何方法可以使用在hadoop框架之外运行的JAVA程序获取诸如jobtracker状态、tasktracker状态、计数器之类的信息?我尝试使用JMX进行监听,但hadoop提供的关于Jobtracker、tasktracker和datanode的信息非常少。它不提供与运行作业状态相关的任何JMX属性,如映射完成百分比、减少完成百分比、任务完成百分比、尝试完成百分比、计数器状态等 此外,我还尝试使用hado

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

此外,我还尝试使用hadoop转储的度量日志。但它也不包含任何关于映射/减少完成百分比、任务完成百分比的信息

我认为,应该有其他的方法来获取所有这些东西


请回复。

我不确定这是否正确,但您可以试试色调。我认为色调提供了关于工作的信息。因为它是开源的,所以你可以看到他们是如何访问job tracker和name tracker的

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

您还可以使用jobclient.jobsToComplete获取当前正在运行的作业列表,该列表返回一个
作业状态
数组,该数组应公开类似的值(
mapProgress
,等等),并可以提供可用于获取上述
运行作业
JobID
实例(如果要避免使用不推荐的方法)


当然还有更多的选择。从开始了解更多细节。

Hue正在使用JobTracker上的一个小插件来获取其信息(运行作业、任务、日志…)通过Thrift RPC。@RomainRigaux插件是什么?另外,您能指出代码中Thrift RPC的具体位置吗?我认为JobClient或RunningJob对象不会提供OP请求的所有数据。
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)