Map Reduce - 如何规划数据文件

Map Reduce - How to plan the data files

我想使用 AWS EMR 查询我将写入 S3 的大型日志文件。我可以按照自己喜欢的方式设计文件。数据以 10K entries/minute.

的速率创建

日志由几十个数据点组成,我想收集很长一段时间(几年)的数据来比较趋势等

创建将存储在 S3 上并由 AWS EMR 集群查询的此类文件的最佳实践是什么?

最佳文件大小是多少?我是否应该按小时创建单独的文件?

命名文件的最佳方式是什么?

我应该将它们放在 daily/hourly 个桶中还是全部放在同一个桶中?

处理一段时间后添加一些数据或更改我使用的数据结构等事情的最佳方法是什么?

我应该压缩一些东西,例如通过在 url 中省略域名或保留尽可能多的数据吗?

是否有分区之类的概念(数据基于 100 个网站,因此我可以使用网站 ID 作为示例)。我必须能够一起查询所有数据,或者按分区查询。

谢谢!

在我看来,您应该使用按小时计算的存储桶在 s3 中存储数据,然后使用管道安排您的 mr 作业来清理数据。
一旦你清理了数据,你就可以将它保存到 s3 中的某个位置,然后你可以 运行 每小时数据管道,相对于你的 MR 管道延迟 1 小时,将这个过程数据放入 redshift。

因此,在一天凌晨 3 点,您将在 s3 中处理 3 小时的数据,并将 2 小时处理为红移 dB。

为此,您可以拥有 1 台专用于 运行ning 管道的机器,在该机器上您可以定义 shell script/perl/python 左右的脚本来将数据加载到您的 dB。 您可以对年、月、日、小时等使用 AWS 存储桶格式化程序。例如

{format(minusHours(@scheduledStartTime,2),'YYYY')}/mm=#{format(minusHours(@scheduledStartTime,2),'MM')}/dd=#{format(minusHours(@scheduledStartTime,2),'dd')}/hh=#{format(minusHours(@scheduledStartTime,2),'HH')}/*