代码之家  ›  专栏  ›  技术社区  ›  Ken

使用withTemplateCompatibility的BigQueryIO读取性能

  •  4
  • Ken  · 技术社区  · 8 年前

    Apache Beam 2.1.0有一个从BigQuery读取的模板管道错误,这意味着它们只能执行一次。此处提供更多详细信息 https://issues.apache.org/jira/browse/BEAM-2058

    这在Beam 2.2.0版本中已得到修复,您现在可以使用 与模板兼容性 选项,现在可以多次运行模板管道。

      pipeline
        .apply("Read rows from table."
             , BigQueryIO.readTableRows()
                         .withTemplateCompatibility()
                         .from("<your-table>")
                         .withoutValidation())
    

    这个实现似乎给BigQueryIO读取操作带来了巨大的性能成本,我现在有了运行的批处理管道 8-11分钟 现在持续服用 45-50分钟 完成。两条管道之间的唯一区别是 .withTemplateCompatibility() .

    我正在努力理解性能大幅下降的原因,以及是否有任何方法可以改进它们。

    谢谢

    解决方案: 基于jkff的输入。

      pipeline
        .apply("Read rows from table."
             , BigQueryIO.readTableRows()
                         .withTemplateCompatibility()
                         .from("<your-table>")
                         .withoutValidation())
        .apply("Reshuffle",  Reshuffle.viaRandomKey())
    
    1 回复  |  直到 8 年前
        1
  •  5
  •   jkff    8 年前

    我怀疑这是因为 withTemplateCompatibility 以禁用为代价 dynamic rebalancing 请阅读此步骤。

    我认为只有当您读取少量或中等数量的数据,但对其执行非常繁重的处理时,它才会产生重大影响。在这种情况下,请尝试添加 Reshuffle.viaRandomKey() 在您的 BigQueryIO.read() . 它将实现数据的临时拷贝,但将更好地并行化下游处理。

    推荐文章