将不同s3文件夹中的文件作为输入传递给mapreduce

66bbxpm5  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(425)

我们的日志文件存储在s3上的年/月/日/小时存储桶中。结构见下文。
如何将day=20上的所有日志作为输入传递给map reduce程序?
如:
bucket=logs/年=2014/月=8/日=20/小时=1/log1\u 1.txt
bucket=logs/年=2014/月=8/天=20/小时=2/log2\u 1.txt
bucket=logs/年=2014/月=8/日=20/小时=2/log2\u 2.txt
bucket=logs/年=2014/月=8/日=20/小时=2/log2\u 3.txt
bucket=logs/年=2014/月=8/天=20/小时=3/log3\u 1.txt
bucket=logs/年=2014/月=8/日=20/小时=4/log4\u 1.txt

vmjh9lq9

vmjh9lq91#

当你说“bucket”时,你实际上是指不同的s3 bucket,还是指bucket中的文件夹/目录?创建这么多的bucket最终会达到s3帐户对您可以创建的bucket数量的限制。
假设您的意思是bucket中的文件夹/目录,那么使用s3distcp作为emr集群中的一个步骤,将要复制到hdfs的日志,然后使用hdfs目录作为mr程序的输入
s3distcp使用src目录和srcpattern来过滤在src中找到的项。在您的示例中,您可以:

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

路径中包含day=20的所有日志文件将被复制到具有jobflowid的emr集群的hdfs上的输入目录。

相关问题