在多步骤AWS数据管道中的EC2实例之间传递变量

时间:2016-07-15 20:40:00

标签: amazon-web-services amazon-ec2 amazon-data-pipeline

我有一个管道设置,其中我有3个主要阶段:

1)从压缩文件中获取输入,在s3中解压缩该文件。对每个文件运行一些基本验证以保证其完整性,转到第2步

2)在单独的EC2实例上启动2个同时处理任务(此步骤的并行化为我们节省了大量时间,因此我们需要它以提高效率)。每个EC2实例将对s3中的某些文件执行数据处理步骤,这些文件在步骤1中解压缩,每个实例所需的文件都不同。

3)在完成2个同时进程之后,启动另一个EC2实例以进行最终数据处理。完成此操作后,运行清理作业以从s3中删除解压缩的文件,只保留原始zip文件。

因此,我们遇到的一个问题是我们有4个运行此管道流程的EC2实例,但我们希望每个EC2实例都可以访问一些全局参数。如果我们在单个实例上运行,我们当然可以使用shell变量来完成此任务,但实际上需要单独的实例来提高效率。目前我们最好的想法是在s3存储桶中存储一个平面文件,该文件可以访问这些全局变量,只需在初始化时读取它们并在需要更改时写回它们。这很糟糕,似乎应该有一个更好的方法,但我们还不能解决问题。我看到有一种方法可以设置可以在管道的任何部分访问的参数,但看起来你只能在每个管道级别设置它,而不是在每次管道运行的粒度上。有没有人有任何可以帮助的资源?非常感谢。

1 个答案:

答案 0 :(得分:0)

我们能够通过使用DynamoDB来跟踪变量/状态来解决这个问题。除了参数值之外,管道本身没有任何机制来执行此操作,遗憾的是,这些机制仅适用于每个管道,而不是每个作业。您需要设置DynamoDB实例,然后使用管道作业ID来跟踪状态,通过CLI工具或某些SDK进行连接。