运行数据流模板作业时出现 RuntimeValueProviderError

Posted

技术标签:

【中文标题】运行数据流模板作业时出现 RuntimeValueProviderError【英文标题】:RuntimeValueProviderError when Running Dataflow Template Job 【发布时间】:2021-05-08 06:24:26 【问题描述】:

试图找出我收到这些错误的原因。快速搜索仅导致提到损坏版本的答案,但这里似乎并非如此。创建模板工作正常,但是当我运行它(并且当我通过限制 arg 时)我得到下面的错误。这个想法是根据模板中提供的参数构建查询。如果有更好的替代方法,我愿意接受。

代码:

class Options(PipelineOptions):
    @classmethod
    def _add_argparse_args(cls, parser):
        parser.add_value_provider_argument(
            '--limit',
            default=0,
            type=int,
            help='Limit the amount of rows retrieved'
        )

...
    
def from_bq(options):
    with beam.Pipeline(options=options) as p:
        (p 
            | 'Read From BQ' >> beam.io.ReadFromBigQuery(query=NestedValueProvider(options.limit, create_query), use_standard_sql=True)
        ) 
    
def create_query(limit):
    query = """
        SELECT * FROM ...
    """

    if limit > 0:
        query = query + " LIMIT limit".format(limit=limit)

    return query

错误:

raise error.RuntimeValueProviderError('%s not accessible' % obj)
apache_beam.error.RuntimeValueProviderError: NestedValueProvider(value: RuntimeValueProvider(option: limit, type: int, default_value: 0), translator: create_query) not accessible [while running 'Read From BQ/Read/Split-ptransform-324']

运行 apache-beam 版本 2.27.0。

【问题讨论】:

澄清一下,我也尝试过使用 StaticValueProvider,只是为了进行实验。虽然它在 2.27.0 中不起作用,但在 2.26.0 中确实起作用,因此在以后的版本中 ValueProviders 似乎是半损坏的。不过,没有设法让常规的 ValueProvider 在任何版本中工作。 【参考方案1】:

我认为标准模板无法做到这一点。您应该考虑使用Flex Templates,它具有非模板管道的完全灵活性。

【讨论】:

什么是不可能的?他们在这里谈论官方文档中的ValueProvider:cloud.google.com/dataflow/docs/guides/templates/… 必须通过每个 Transform 手动连接对 ValueProviders 的支持(并且实际上不能在图形构建时检查,例如影响构建本身,甚至是“意外”,这可能是由于其他一些变化)。这种脆弱性是我们远离它的原因之一。如果旧的 SDK 可以工作,你可以坚持下去,但我会转向未来的 flex 模板。 如果在使用 Flex 模板时启动时间不接近 10 分钟,我会使用它们。有什么解决办法吗? 关于启动时间的要点。我只知道它正在开发中。

以上是关于运行数据流模板作业时出现 RuntimeValueProviderError的主要内容,如果未能解决你的问题,请参考以下文章

运行cron作业时出现网关超时错误

本地运行 spark 作业时出现“Scheme 没有文件系统:gs”

当我在 Eclipse 中运行 hadoop 作业时出现异常

使用 Testcontainers 执行运行集成测试的 Gitlab CI 管道作业时出现问题

打开经常模板时出现运行时错误

在 Docker 中运行 Azure DevOps 作业时出现“找不到具有给定版本的模块 Az.Accounts”错误