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