当我们在hadoop上运行数据密集型作业时。hadoop执行作业。现在我想要的是工作完成的时间。它将给我有关执行的工作,即统计数字;所用时间、Map器数量、缩减器数量等有用信息。作业执行过程中在浏览器中显示的信息,如作业跟踪器、数据节点等。但是我如何在我的应用程序中获得统计数据呢?它通过hadoop运行作业,并在作业完成后像报告一样给出结果。我的应用程序是java的任何可以帮助我的api。如有任何建议,我们将不胜感激。
l2osamch1#
奇尔斯是对的。taskreport的文档说明 org.apache.hadoop.mapred.TaskReport 从继承这些方法 org.apache.hadoop.mapreduce.TaskReport . 所以,可以得到这样的值。以下是获取作业开始和结束时间的代码,按每个Map分组并减少任务。
org.apache.hadoop.mapred.TaskReport
org.apache.hadoop.mapreduce.TaskReport
import org.apache.hadoop.mapred.JobClient; import org.apache.hadoop.mapred.JobStatus; import org.apache.hadoop.conf.Configuration; import java.net.InetSocketAddress; import java.util.*; import org.apache.hadoop.mapred.TaskReport; import org.apache.hadoop.mapred.RunningJob; import org.apache.hadoop.util.StringUtils; import java.text.SimpleDateFormat; public class mini{ public static void main(String args[]){ String jobTrackerHost = "192.168.151.14"; int jobTrackerPort = 54311; try{ Configuration conf = new Configuration(); JobClient jobClient = new JobClient(new InetSocketAddress(jobTrackerHost, jobTrackerPort), conf); JobStatus[] activeJobs = jobClient.jobsToComplete(); SimpleDateFormat dateFormat = new SimpleDateFormat("d-MMM-yyyy HH:mm:ss"); for(JobStatus js: activeJobs){ System.out.println(js.getJobID()); RunningJob runningjob = jobClient.getJob(js.getJobID()); while(runningjob.isComplete() == false){ /*Wait till the job completes.*/} TaskReport[] maptaskreports = jobClient.getMapTaskReports(js.getJobID()); for(TaskReport tr: maptaskreports){ System.out.println("Task ID: "+tr.getTaskID()+" Start TIme: "+StringUtils.getFormattedTimeWithDiff(dateFormat, tr.getStartTime(), 0)+" Finish Time: "+StringUtils.getFormattedTimeWithDiff(dateFormat, tr.getFinishTime(), tr.getStartTime())); } TaskReport[] reducetaskreports = jobClient.getReduceTaskReports(js.getJobID()); for(TaskReport tr: reducetaskreports){ System.out.println("Task ID: "+tr.getTaskID()+" Start TIme: "+StringUtils.getFormattedTimeWithDiff(dateFormat, tr.getStartTime(), 0)+" Finish Time: "+StringUtils.getFormattedTimeWithDiff(dateFormat, tr.getFinishTime(), tr.getStartTime())); } } }catch(Exception ex){ ex.printStackTrace(); } } }
这是一个获取正在运行的作业的开始和完成时间的简单示例。你可以随心所欲。下面是运行这个程序的“字数统计”mapreduce作业。
[root@dev1-slave1 ~]# java -classpath /usr/lib/hadoop/hadoop-core.jar:/usr/lib/hadoop/lib/jackson-core-asl-1.8.8.jar:/usr/lib/hadoop/lib/jackson-mapper-asl-1.8.8.jar:/usr/lib/hadoop/lib/commons-logging-1.1.1.jar:/usr/lib/hadoop/lib/commons-configuration-1.6.jar:/usr/lib/hadoop/lib/commons-lang-2.4.jar:. mini job_201501151144_0042 Task ID: task_201501151144_0042_m_000000 Start TIme: 16-Jan-2015 17:07:35 Finish Time: 16-Jan-2015 17:07:43 (7sec) Task ID: task_201501151144_0042_m_000001 Start TIme: 16-Jan-2015 17:07:35 Finish Time: 16-Jan-2015 17:07:56 (20sec) Task ID: task_201501151144_0042_m_000002 Start TIme: 16-Jan-2015 17:07:35 Finish Time: 16-Jan-2015 17:07:43 (7sec) Task ID: task_201501151144_0042_m_000003 Start TIme: 16-Jan-2015 17:07:43 Finish Time: 16-Jan-2015 17:07:53 (10sec) Task ID: task_201501151144_0042_m_000004 Start TIme: 16-Jan-2015 17:07:43 Finish Time: 16-Jan-2015 17:07:53 (10sec) Task ID: task_201501151144_0042_r_000000 Start TIme: 16-Jan-2015 17:07:43 Finish Time: 16-Jan-2015 17:08:00 (17sec) Task ID: task_201501151144_0042_r_000001 Start TIme: 16-Jan-2015 17:07:43 Finish Time: 16-Jan-2015 17:08:05 (22sec) Task ID: task_201501151144_0042_r_000002 Start TIme: 16-Jan-2015 17:07:43 Finish Time: 16-Jan-2015 17:08:05 (21sec)
打开你想要的门是件好事 jsp hadoop在its中的文件 mapreduce/src/webapps/job/ 目录并找出jobtrackerwebui是如何显示信息的。我从jobstasks.jsp派生了上述代码。希望有帮助。:)
jsp
mapreduce/src/webapps/job/
suzh9iv82#
查看jobclient的以下方法:getmaptaskreports(作业ID)getreducetaskreports(作业ID)这两个调用都返回taskreport对象的数组,您可以从中提取开始/完成时间,以及每个任务的单个计数器
2条答案
按热度按时间l2osamch1#
奇尔斯是对的。taskreport的文档说明
org.apache.hadoop.mapred.TaskReport
从继承这些方法org.apache.hadoop.mapreduce.TaskReport
. 所以,可以得到这样的值。以下是获取作业开始和结束时间的代码,按每个Map分组并减少任务。
这是一个获取正在运行的作业的开始和完成时间的简单示例。你可以随心所欲。
下面是运行这个程序的“字数统计”mapreduce作业。
打开你想要的门是件好事
jsp
hadoop在its中的文件mapreduce/src/webapps/job/
目录并找出jobtrackerwebui是如何显示信息的。我从jobstasks.jsp派生了上述代码。
希望有帮助。:)
suzh9iv82#
查看jobclient的以下方法:
getmaptaskreports(作业ID)
getreducetaskreports(作业ID)
这两个调用都返回taskreport对象的数组,您可以从中提取开始/完成时间,以及每个任务的单个计数器