数据流写入数据存储区:“消息:数据存储区事务或写入太大。”

时间:2017-11-15 09:13:18

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

我刚开始使用Dataflow / Apache Beam。 我在Python中编写了一个Dataflow管道,用于将大型产品目录(> 50K产品,存储在JSON文件中)导入数据存储区。 管道在我的本地计算机(DirectRunner)上运行良好,但在DataflowRunner上失败,并显示以下错误消息:

RPCError: datastore call commit [while running 'write to datastore/Write Mutation to Datastore'] failed: Error code: INVALID_ARGUMENT. Message: datastore transaction or write too big.

我的猜测是数据存储无法处理管道的写入速率,但我不确定如何减少数据流管道中的写入。

我正在使用WriteToDatastore转换来写入DataStore:

from apache_beam.io.gcp.datastore.v1.datastoreio import WriteToDatastore

我的管道看起来像这样:

with beam.Pipeline(options=pipeline_options) as p:
(p  # pylint: disable=expression-not-assigned
 | 'read from json' >> ReadFromText(known_args.input, coder=JsonCoder())
 | 'create entity' >> beam.Map(
     EntityWrapper(known_args.namespace, known_args.kind,
                   known_args.ancestor).make_entity)
 | 'write to datastore' >> WriteToDatastore(known_args.dataset))

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

看起来不像写入率问题。该错误消息表示突变超出系统限制。原因可能包括:

  • 单个交易中超过500个实体
  • 单次交易中超过10MiB
  • 在单个实体中超过1MiB
  • 超过实体的2MiB总复合索引大小

您可以在Limits documentation中了解有关Cloud Datastore系统限制的更多信息。