hadoop - Map Reduce - 如何规划数据文件

标签 hadoop amazon-s3 emr hue

我想使用 AWS EMR 查询我将写入 S3 的大型日志文件。我可以按照自己喜欢的方式设计文件。数据以 10K 条目/分钟的速率创建。

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

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

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

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

我应该将它们放在每天/每小时的桶中还是都放在同一个桶中?

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

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

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

谢谢!

最佳答案

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

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

要做到这一点,您可以拥有一台专用于运行管道的机器,您可以在该机器上定义 shell 脚本/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')}/*

关于hadoop - Map Reduce - 如何规划数据文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27776450/

相关文章:

hadoop - 编译Pig Bank UDF错误

hadoop - 在hadoop中以多种输出格式使用part-m-00000

Hadoop Streaming Job 与 Hadoop 管道作业

ios - 如何在 iOS 中压缩图像?

python - 使用 boto3 客户端提交时,spark-submit EMR 步骤失败

mysql - 使用 '--direct' 选项的 Sqoop 失败,mysqldump 退出代码为 2 和 3

hadoop - 用于在给定分隔符后提取文本的 impala 字符串函数

java - 如何通过 aws SDK Android 公开 S3 对象?

amazon-web-services - 如何使用 AWS CLI 删除 S3 存储桶中的多个文件

hadoop - 清洁 AWS EMR 以允许重用