Bigquery apache beam pipeline" hanging"使用DirectRunner时

时间:2018-02-13 20:37:01

标签: python google-cloud-dataflow apache-beam

如果其他人遇到类似python apache beam dataflow runner的问题,我很好奇,如下所述。 (我还没有能够发送到CloudRunner)

正在执行的查询返回的行数不到1800万行。如果我添加一个LIMIT来查询(例如:10000),那么datafow按预期工作。 WriteToBleve接收器中不包含WriteToBleve接收器,它是一个支持写入bleve索引的自定义接收器。

正在使用的python sdk是2.2.0,但我已准备好引发一些java ....

运行管道时看到的最后一条日志消息是:

  

警告:根:数据集   我的项目:temp_dataset_7708fbe7e7694cd49b8b0de07af2470b没有   存在,所以我们将它创建为临时的location = None

数据集是正确创建并填充的,当我调试到管道时,我可以看到结果被迭代,但这个管道本身似乎永远不会到达写阶段。

    options = {
        "project": "my-project",
        "staging_location": "gs://my-project/staging",
        "temp_location": "gs://my-project/temp",
        "runner": "DirectRunner"
    }
    pipeline_options = beam.pipeline.PipelineOptions(flags=[], **options)
    p = beam.Pipeline(options=pipeline_options)
    p | 'Read From Bigquery' >> beam.io.Read(beam.io.BigQuerySource(
        query=self.build_query(),
        use_standard_sql=True,
        validate=True,
        flatten_results=False,
    )) | 'Write to Bleve' >> WriteToBleve()

    result = p.run()
    result.wait_until_finish()

1 个答案:

答案 0 :(得分:3)

直接转轮用于本地调试和测试少量数据的管道。它没有特别针对性能进行优化,也不适用于大量数据 - 这适用于Python和Java。

也就是说,目前对Python直接跑步者are in progress进行了一些非常严肃的改进。

我建议您尝试在Dataflow上运行,看看性能是否仍不理想。

另外,如果您可以用Java编写 - 我建议这样做:它通常比Python更好地执行数量级,特别是在从BigQuery读取的情况下:阅读BigQuery通过BigQuery导出到Avro文件,以及性能用于阅读Avro文件的标准Python库是notoriously horrible,但不幸的是,目前没有表现良好且维护良好的替代品。