我正在解析 Apache、Nginx、Darwin(视频流服务器)生成的访问日志,并按日期/引用者/用户代理聚合每个交付文件的统计信息。
每小时都会生成大量日志,而且这个数字在不久的将来可能会急剧增加 - 因此通过 Amazon Elastic MapReduce 以分布式方式处理此类数据听起来很合理。
现在,我已准备好使用映射器和缩减器来处理我的数据,并使用以下流程测试整个过程:
- 将映射器、缩减器和数据上传到 Amazon S3
- 配置了适当的作业并成功处理它
- 将聚合结果从 Amazon S3 下载到我的服务器,并通过运行 CLI 脚本将它们插入 MySQL 数据库
我已经根据互联网上可通过谷歌搜索的数千个有关 Amazon ERM 的教程手动完成了此操作。
接下来我应该做什么?自动化此过程的最佳方法是什么?
- 我应该通过 API 控制 Amazon EMR jobTracker 吗?
- 如何确保我的日志不会被处理两次?
- 将已处理的文件移动到存档的最佳方法是什么?
- 将结果插入 PostgreSQL/MySQL 的最佳方法是什么?
- 作业的数据应如何布置在输入/输出目录中?
- 每次使用 API 时我都应该创建一个新的 EMR 作业吗?
- 将原始日志上传到 Amazon S3 的最佳方法是什么?
- 有人可以分享他们的数据处理流程设置吗?
- 如何控制文件上传和作业完成?
我认为这个主题对于许多尝试使用 Amazon Elastic MapReduce 处理访问日志但无法找到好的材料和/或最佳实践的人来说可能很有用。
UPD:这里要澄清的是最后一个问题:
由 Amazon Elastic MapReduce 提供支持的日志处理最佳实践有哪些?
相关文章:
将数据传入和传出 Elastic MapReduce HDFS https://stackoverflow.com/questions/7701678/getting-data-in-and-out-of-elastic-mapreduce-hdfs
这是一个非常非常广泛的问题,但您可以考虑以下一些想法:
- 使用 Amazon SQS:这是一个分布式队列,对于工作流管理非常有用,您可以有一个进程,一旦日志可用,就写入队列,而另一个进程则从中读取,处理队列中描述的日志消息,并在处理完成后将其删除。这将确保日志仅被处理一次。
- 正如您提到的,Apache Flume 对于日志聚合非常有用。即使您不需要实时,这是您应该考虑的事情,因为它至少为您提供了标准化的聚合过程。
- 亚马逊最近发布了 SimpleWorkFlow。我刚刚开始研究它,但这听起来很有希望管理数据管道的每一步。
希望能给你一些线索。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)