我对hadoop和hbase非常陌生。
我的用例非常简单:我想要 reduce input groups
在运行时对作业进行计数(即获取从作业启动到终止期间正在更新的计数器)。
到目前为止,我搜索到的是:所有与作业相关的日志都写在目录下 /var/log/hadoop/userlogs
如下图所示:
[root@dev1-slave1 userlogs]# pwd
/var/log/hadoop/userlogs
[root@dev1-slave1 userlogs]# ll
total 24
drwx--x--- 2 mapred mapred 4096 Jan 13 19:59 job_201501121917_0008
drwx--x--- 2 mapred mapred 4096 Jan 13 11:31 job_201501121917_0009
drwx--x--- 2 mapred mapred 4096 Jan 13 12:01 job_201501121917_0010
drwx--x--- 2 mapred mapred 4096 Jan 13 12:13 job_201501121917_0011
drwx--x--- 2 mapred mapred 4096 Jan 13 12:23 job_201501121917_0012
drwx--x--- 2 mapred mapred 4096 Jan 13 19:59 job_201501121917_0013
在每个 job
,有如下目录 attempt_201501121917_0013_m_000000_0
(Map器日志)和 attempt_201501121917_0013_r_000000_0
(减速器日志)。
还原程序日志目录 attempt_201501121917_0013_r_000000_0
包含 syslog
其中包含有关作业运行的信息。但它没有显示任何关于柜台的信息。
从hadoop的jobtracker ui中,我可以看到计数器 reduce input groups
正在更新,直到工作完成,但我找不到同样的其他地方。
我怎样才能做到这一点?在另一个应用程序中(不是在执行mapreduce任务的应用程序中)是否有任何JavaAPI来获取作业计数器?
我还需要查看其他日志或文件吗?
我希望我的要求是明确的。
更新:
hadoop版本:hadoop 1.0.3-intel
3条答案
按热度按时间bkhjykvo1#
也可以从命令行获取计数器,而无需编写任何java:
或(对于较新版本)
xa9qqrwz2#
我用另一种方式找到了问题的答案。
以下是代码:
代码是不言自明的。类名自言自语。
编译:
跑步:
这就是计数器的输出。
s4chpxco3#
假设您知道您的作业id,您可以按id查找您的作业(我认为在有限的时间内取决于集群清理作业历史记录的时间)。
更多阅读请参见hadoop:权威指南。