我使用的是 Cloudera 的 Hadoop 发行版 CDH-0.20.2CDH3u0。 有什么办法可以使用在 hadoop 框架之外运行的 JAVA 程序获取诸如 jobtracker 状态、tasktracker 状态、计数器等信息?我尝试使用 JMX 进行监听,但 hadoop 提供的有关 Jobtracker、tasktracker 和数据节点的信息非常少。它不提供与运行作业状态相关的任何 JMX 属性,例如映射完成百分比、减少完成百分比、任务完成百分比、尝试完成百分比、计数器状态等。
此外,我尝试使用 hadoop 转储的指标日志。但它也不包含任何有关 map/reduce 完成百分比、任务完成百分比的信息。
我认为,应该有一些替代方法来获得所有这些东西。
请回复。
最佳答案
您可以使用 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
获取当前正在运行的作业列表,它返回一个 JobStatus
数组,它应该公开类似的值(mapProgress
等),并且可以提供可用于获取上面的 RunningJob
的 JobID
实例(如果您想避免弃用的方法)。
当然还有更多的选择。从 http://hadoop.apache.org/common/docs/r0.20.2/api/org/apache/hadoop/mapred/JobClient.html 开始了解更多详情。
关于java - 我如何以编程方式获取 Hadoop 在 Web 界面中显示的所有作业跟踪器和任务跟踪器信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6620374/