我刚开始使用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))
提前感谢您的帮助。
答案 0 :(得分:0)
看起来不像写入率问题。该错误消息表示突变超出系统限制。原因可能包括:
您可以在Limits documentation中了解有关Cloud Datastore系统限制的更多信息。