当前版本的Apache Beam不支持google spanner的类型代码11(json),因为它使用的google-cloud-spanner版本落后于当前版本的两个主要版本。因此,我更新了自己的版本来这样做——还没有完全弄清楚如何在Github上进行适当的PR或运行测试。
无论哪种方式,这都需要一段时间。我听说有一种方法可以在DataFlow上指定自定义的Apache光束SDK,但那是3年前的事了,并不具体。它仍然可能吗?我需要什么样的文件来保存SDK在-zip, tar,tar.gz中?该存档中需要哪些文件夹?apache_beam,apache_beam-2.34.0.dist-info?只是apache_beam中的文件?我只是在PipelineOptions中的sdk-place="gs://bucket"中设置选项吗?
谢谢。
构建容器后,您需要确保您使用的是运行器V2,并且您还需要像这样设置sdk_container_image
标志(其他标志与wordcount
相关,可能与您的管道无关):
python -m apache_beam.examples.wordcount \
--input=INPUT_FILE \
--output=OUTPUT_FILE \
--project=PROJECT_ID \
--region=REGION \
--temp_location=TEMP_LOCATION \
--runner=DataflowRunner \
--disk_size_gb=DISK_SIZE_GB \
--experiments=use_runner_v2 \
--sdk_container_image=$IMAGE_URI
在Dataflow上运行管道之前,您应该通过在本地运行一个小型作业来确保容器正常工作,如下所示:
python path/to/my/pipeline.py \
--runner=PortableRunner \
--job_endpoint=embed \
--environment_type=DOCKER \
--environment_config=IMAGE_URI \
--input=INPUT_FILE \
--output=OUTPUT_FILE
详情请看https://cloud.google.com/dataflow/docs/guides/using-custom-containers。