2015-04-14 111 views
0

我的团队目前正在寻找一个相当昂贵的ETL工具的替代品,目前我们正在使用这个工具作为一个美化的调度器。我们使用自己的Python代码改进了ETL工具提供的任何集成,所以我真的只需要它的调度能力。我们正在考虑的一个选项是数据管道,目前我正在试用。从亚马逊数据管道中的管道调用管道

我的问题是:想象一下,我们有两个数据集加载 - 产品和销售。这些数据集中的每一个都需要一些加载步骤(获取源数据,调用python脚本进行转换,加载到Redshift)。然而,产品需要在销售运行之前加载,因为我们需要产品成本等来计算保证金。数据管道中是否有可能首先调用产品,等待其成功完成,然后调用销售的“主”管道?如果是这样,怎么样?如果Data Pipeline不适合这种类型的工作流,我也会接受其他产品建议。感谢帮助

+0

您的主题讨论了如何定义不同管道之间的依赖关系。今天不可能直接使用前提条件(间接使用前提条件)。但是你可以在一个管道中拥有你想要的东西,也就是你在问题描述中所谓的“主”管道。 – panther

+0

@panther我有更多的数据集加载,所以这会变得非常混乱,我认为。它也使得重新运行某些数据集有问题 - 管道中间的故障将需要完整的重新运行 – jpavs

+0

在这种情况下,在数据管道有更好的解决方案之前,可以在S3中使用标记文件来触发其他管道。对于单一管道模型,您可以使用[cascade failure and rerun](http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-manage- cascade-failandrerun.html) – panther

回答

1

我想我可以涉及到这个用例。无论如何,Data Pipeline本身不会执行这种依赖关系管理。然而,它可以使用文件前提条件进行模拟。

在这个例子中,你的子流水线可能依赖于一个文件存在(作为先决条件)在开始之前。主管道将根据其活动中执行的某些逻辑创建触发文件。子流水线可能会创建其他触发文件,从而启动下游的后续管道。

另一种解决方案是使用Simple Workflow product。这具有您正在寻找的功能 - 但需要使用Flow SDK进行自定义编码。

0

这是datapipeline的基本用例,应该是可以的。你可以使用他们的图形管道编辑器来创建这个管道。打破问题:

有两个数据集:

  1. 产品
  2. 销售

步骤来加载这些数据集

  1. 获取源数据:从S3开始说。为此,请使用S3DataNode
  2. 调用python脚本进行转换:使用ShellCommandActivity进行登台。 Data Pipeline会为连接到ShellCommandActivity的S3DataNodes隐式执行数据分段。 Details
  3. 负载输出到红移:您可以通过提供特殊的env变量使用它们使用RedshiftDatabase

您需要做的上方添加成分为每个需要使用的数据集(产品和在这种情况下销售)。为了便于管理,您可以在EC2 Instance上运行这些。

条件: '产品' 之前需要 '销售' 运行,以加载

  • 添加dependsOn关系。在销售产品的ShellCommandActivity的ShellCommandActivity上添加此字段。请参阅documentation中的dependsOn字段。它表示:“在此活动开始之前,对其他活动的一个或多个参考必须达到完成状态”。

提示:在大多数情况下,你不希望第二天的执行开始,而前一天的执行仍然是活跃又名RUNNING。为避免出现这种情况,请使用'maxActiveInstances'字段并将其设置为'1'。