复杂数据管道迁移计划问题

时间:2018-09-20 21:41:02

标签: pyspark airflow amazon-emr luigi

我的计划:

  1. 将所有数据处理移至Spark(最好是PySpark),而最终输出(面向消费者)的数据仅移至Redshift。 Spark似乎可以很好地连接到所有各种来源(Dynamo DB,S3,Redshift)。根据客户需求输出到Redshift / S3等。这样可以避免拥有多个Redshift集群,避免损坏/过度使用内部不受支持的ETL工具,跨集群,视图和表等复制相同数据(这是当前设置)。
  2. 使用Luigi构建Web UI,以每日监控管道并可视化依赖关系树,并计划ETL。电子邮件通知也应该是失败的一种选择。一种替代方法是AWS数据管道,但是Luigi似乎对于涉及许多依赖项的情况具有更好的UI(某些树的深度为5级,但也许可以通过使用更好的Spark代码来避免这种情况)。

问题:

  1. Luigi是否与Spark集成(我以前只使用过PySpark,而没有使用Luigi,所以这对我来说是一个学习曲线)。该计划是计划“应用程序”,我相信Spark实际上也具有ETL,所以不确定Luigi如何在这里集成吗?
  2. 如何解释某些管道可能是“实时”这一事实-例如,我是否需要每小时每小时启动一次Spark / EMR作业?

我也乐于接受想法/建议/更好的方法!

2 个答案:

答案 0 :(得分:0)

代替Luigi,使用Apache Airflow进行工作流程编排(代码用Python编写)。它内置了许多运算符和挂钩,您可以在其中调用DAG(工作流)。例如,创建任务以调用操作员来启动EMR集群,另一个任务是运行位于集群s3中的PySpark脚本,另一个任务是监视运行状态。您也可以使用任务来设置依赖项等。

答案 1 :(得分:0)

要直接回答您的问题,

1)是的,与其他任何库一样,Luigi在PySpark上的表现也不错。我们当然可以毫无问题地运行它-唯一的警告是,您必须对import稍加注意,并将它们包含在Luigi类的函数中,因为在后台,它正在开发新的Python实例。

2)有多种方法可以使Luigi吞入数据流,但这很难完成。实际上,您将回到运行一个小时的cron周期来仅调用管道和流程以及新数据的过程。这种情况反映了Spotify在Luigi上的用例,在该用例中,他们每天执行工作来计算顶级艺术家等。

正如@RonD所建议的那样,如果我现在正在构建新的管道,我将跳过Luigi并直接进入AirFlow。如果没有其他问题,请查看发布历史记录。很长一段时间以来,Luigi并没有做过很多工作(因为它适用于主要开发人员)。而AirFlow正在积极地被Apache孵化。