创建保存点并从Apache Beam中的特定节点开始

时间:2018-06-25 09:56:16

标签: python apache-beam

创建保存点

当前,保存点是通过在每次转换后将管道保存到csv文件中来创建的。 设置通常如下所示:

savepoint pipeline

我通过拥有一个包装器转换对象来做到这一点,我可以向其提供转换功能和可选的保存点参数。 如果提供了保存点,则转换对象可以创建保存点:

class SavePointNode(beam.PTransform):
    def __init__(self, transform, savepoint=None, **kwargs):
        super(beam.PTransform, self).__init__(**kwargs)
        self.transform = transform
        self.savepoint = savepoint

    def expand(self, p):

        # transform data
        result = p | beam.ParDo(self.transform)

        # load to savepoint if available
        if self.savepoint:
            return result | beam.io.WriteToText(self.savepoint)

        return result

我的第一个问题如下:

  • 是否已有默认方法在Apache Beam中创建保存点?

加载保存点

通过创建保存点,我希望能够通过不将每个步骤都追溯到保存点来在特定节点上重新启动管道以节省时间。 例如:如果在第三转换步骤中发生错误:

error in third transform step

我希望能够从第二个转换步骤创建的保存点重新启动管道:

restart at second savepoint

我对此有以下疑问:

  • Apache Beam中当前是否有默认方法?
  • 如果没有其他好的方法可以实现这种行为?
  • 我是否一直使用错误的方法,如果Apache Beam提供错误,是否还有其他解决方案可以减少重新加载时间?

0 个答案:

没有答案