【问题标题】:Complex Data Pipeline Migration Plan Question复杂数据管道迁移计划问题
【发布时间】:2018-09-20 21:41:01
【问题描述】:

我的计划:

  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 作业?

我也愿意接受想法/建议/更好的方法!

【问题讨论】:

    标签: pyspark airflow amazon-emr luigi


    【解决方案1】:

    直接回答您的问题,

    1) 是的,Luigi 确实可以很好地与 PySpark 配合使用,就像任何其他库一样。我们当然可以毫无问题地运行它——唯一需要注意的是,您必须对imports 小心一点,并将它们放在 Luigi 类的函数中,因为它在后台启动了新的 Python 实例。

    2) 有一些方法可以让 Luigi 啜饮数据流,但很难做到。实际上,您会退回到每小时运行一个 cron 周期来调用管道和进程以及新数据。这反映了 Spotify 对 Luigi 的用例,他们在其中运行日常工作以计算顶级艺术家等。

    正如@RonD 建议的那样,如果我现在正在构建新管道,我会跳过 Luigi 并直接使用 AirFlow。如果不出意外,请查看发布历史记录。 Luigi 很长一段时间都没有真正进行过重要的工作(因为它适用于主要开发人员)。而 AirFlow 正在被 Apache 积极孵化。

    【讨论】:

    • 您对改用 AWS Glue 有何看法?
    • 编辑:AWS Glue 不允许您连接到其他 DynamoDB。我按照推荐使用 AirFlow 和 Spark。
    • 此外,AWS Glue 会严重限制您的代码,并且不允许任何可移植性在本地/本地/其他云提供商运行
    【解决方案2】:

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

    【讨论】:

    • 不错!看起来像我正在寻找的东西。 1. 它处理实时提要还是我应该使用其他工具来处理? 2. 它是否处理并发/优化并发作业(以防止同时打开数十个 EMR 集群,假设我们有一个限制)? 3. 我猜您需要始终打开一个小型 EC2 以保持 Airflow 运行/UI 可见?我们有一个 AWS 帐户 - 尝试在那里获取所有内容,而不是在“本地”完成任何事情。
    • 今天进行了一些挖掘 - 显然您无法通过 Spark 连接到其他团队 DynamoDB。我的目标是使用来自其他团队的服务/数据,在我们端对其进行处理,并向下游客户提供聚合/简化的视图。对于这个用例,我可以探索另一个更简单的过程吗?
    • 编辑:弄清楚如何连接到 DynamoDB。现在将尝试使用 Airflow。
    猜你喜欢
    • 2013-10-27
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多