我在研究hadoop。我有100k压缩文件和处理文件使用mapreduce,但现在我有一个任务,我需要保持跟踪一些日志。
1.zip文件已处理2。zip文件需要处理3。进程的状态,如错误或成功
我是用下面的方法做的
catch (Exception Ex)
{
System.out.println("Killing task ");
runningJob.killTask((TaskAttemptID)context.getTaskAttemptID(), true);
}
这样地。但现在我需要把它放在一个普通的地方
我该怎么做
我想把它储存在hbsae里。欢迎有想法,请帮助我
2条答案
按热度按时间j2qf4p5b1#
以下是一些建议:
使用自定义任务计数器。http://lintool.github.io/cloud9/docs/content/counters.html 它们非常轻巧,是跟踪小价值的好方法。
如果你需要记录更多的细节。有两种方法。首先,可以将日志语句作为Map作业的一部分输出。然后使用两个简单的过滤器(Map作业)拆分管道。第一个过滤器将获取zip处理的输出并将其插入管道的其余部分,第二个过滤器将获取日志语句并将它们保存到单独的位置,以便进一步分析。
使用hbase也可以,但会带来额外的复杂性,并在集群上利用更多的资源。除非已经有一个hbase作为管道的一部分。
jaxagkaj2#
计数器确实是最好的解决方案,但是,不要过度使用它们,因为它们也有很大的开销。
您可以考虑聚合任务中的计数器,并仅不时地刷新它们。
请注意,如果使用手动机制跟踪这些统计信息,则必须考虑多次运行的任务(由于各种错误或推测性执行)