【问题标题】:Passing files in different S3 folders as input to mapreduce将不同 S3 文件夹中的文件作为输入传递给 mapreduce
【发布时间】:2014-08-25 19:17:27
【问题描述】:

我们的日志文件存储在 S3 上的年/月/日/小时存储桶中。结构见下文。

如何将 day=20 的所有日志作为输入传递给我的 map reduce 程序?

例如:

bucket = logs/year=2014/month=8/day=20/hour=1/log1_1.txt

bucket = logs/year=2014/month=8/day=20/hour=2/log2_1.txt

bucket = logs/year=2014/month=8/day=20/hour=2/log2_2.txt

bucket = logs/year=2014/month=8/day=20/hour=2/log2_3.txt

bucket = logs/year=2014/month=8/day=20/hour=3/log3_1.txt

bucket = logs/year=2014/month=8/day=20/hour=4/log4_1.txt

【问题讨论】:

标签: hadoop amazon-web-services amazon-s3 mapreduce


【解决方案1】:

当您说“存储桶”时,您实际上是指不同的 S3 存储桶,还是指存储桶中的文件夹/目录?创建这么多存储桶最终会达到您可以创建的存储桶数量的 S3 帐户限制。

假设您指的是存储桶中的文件夹/目录,请使用s3distcp 作为 EMR 集群中的一个步骤,将您想要的日志复制到 HDFS,然后使用 HDFS 目录作为 MR 程序的输入

s3distcp 采用 src 目录和 srcPattern 来过滤在 src 中找到的项目。在您的示例中,您可以这样做:

./elastic-mapreduce --jobflow JobFlowID --jar \
/home/hadoop/lib/emr-s3distcp-1.0.jar \
--arg --src --arg s3://logs/ \
--arg --srcPattern --arg '.*day-20.*'
--arg --dest --arg hdfs://input/

路径中 day=20 的所有日志文件都将复制到具有 JobFlowID 的 EMR 集群的 HDFS 上的输入目录。

【讨论】:

  • 感谢@Chris Parrinello。你说得对,我的意思是文件夹。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
  • 2020-05-17
  • 1970-01-01
相关资源
最近更新 更多