亚马逊MapReduce日志分析最佳实践

9
我正在解析由Apache、Nginx、Darwin(视频流服务器)生成的访问日志,并按日期/引荐人/用户代理聚合每个传递的文件的统计信息。
每小时产生大量日志,而且未来这个数字可能会急剧增加 - 因此通过Amazon Elastic MapReduce以分布式方式处理这种数据听起来很合理。
现在,我已经准备好使用映射器和减速器处理我的数据,并使用以下流程测试了整个过程:
- 将映射器、减速器和数据上传到Amazon S3 - 配置适当的作业并成功处理它 - 通过运行CLI脚本从Amazon S3下载聚合结果,并将它们插入到MySQL数据库中
我根据互联网上可谷歌的成千上万个关于Amazon ERM的教程手动完成了这一过程。
接下来我该怎么做?最佳方法是什么,可以自动化这个过程吗?
  • 我应该通过API控制Amazon EMR jobTracker吗?
  • 如何确保我的日志不会被处理两次?
  • 将已处理的文件移动到归档的最佳方法是什么?
  • 将结果插入PostgreSQL/MySQL的最佳方法是什么?
  • 工作数据应该放置在输入/输出目录中的哪个位置?
  • 每次使用API创建新的EMR作业吗?
  • 将原始日志上传到Amazon S3的最佳方法是什么?
  • 有人可以分享他们的数据处理流程设置吗?
  • 如何控制文件上传和作业完成?

我认为这个主题对于许多试图使用Amazon Elastic MapReduce处理访问日志但无法找到好材料和/或最佳实践的人都很有用。

更新:只是为了澄清,这里是单一最终问题:

由Amazon Elastic MapReduce支持的日志处理的最佳实践是什么?

相关帖子:

将数据传入和传出Elastic MapReduce HDFS


2
其实我认为这是一个问题中的太多问题了。但其中一些确实很有趣。 - Thomas Jungblut
是的,实际上只有一个问题:我们在哪里可以找到关于使用Amazon MapReduce进行日志分析最佳实践的材料?更新了描述。 - webdevbyjoss
1个回答

3

这是一个非常开放的问题,但以下是一些你可以考虑的想法:

  • 使用Amazon SQS:这是一个分布式队列,非常适用于工作流管理。你可以有一个进程在日志可用时将其写入队列,另一个进程从中读取,处理队列消息中描述的日志,并在处理完成后将其删除。这将确保日志仅被处理一次。
  • 正如你提到的,Apache Flume非常适用于日志聚合。即使你不需要实时性,这也是你应该考虑的,因为它至少给你提供了一个标准化的聚合过程。
  • Amazon最近发布了SimpleWorkFlow。我刚开始研究它,但听起来很有前途,可以管理数据管道的每个步骤。

希望这能给你一些线索。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接