Google cloud dataflow 并行运行相同的DF模板会产生奇怪的结果
我有一个数据流作业,它从云SQL中提取数据并将其加载到云存储中。我们已将作业配置为接受参数,以便可以使用相同的代码提取多个表。数据流作业被编译为模板 当我们以串行方式创建/运行模板实例时,我们会得到预期的结果。但是,如果我们并行创建/运行实例,云存储上只会出现一些文件。在这两种情况下,我们都可以看到DF作业被创建并成功终止 例如,我们有11个实例,它们生成11个输出文件。在串行模式下,我们得到所有11个文件,在并行模式下,我们只得到大约3个文件。在并行运行期间,所有11个实例同时运行 有人能就为什么会发生这种情况提供一些建议吗?我假设DF模板创建的临时文件在并行运行期间会被覆盖 并行运行的主要动机是更快地提取数据 编辑 管道非常简单:Google cloud dataflow 并行运行相同的DF模板会产生奇怪的结果,google-cloud-dataflow,Google Cloud Dataflow,我有一个数据流作业,它从云SQL中提取数据并将其加载到云存储中。我们已将作业配置为接受参数,以便可以使用相同的代码提取多个表。数据流作业被编译为模板 当我们以串行方式创建/运行模板实例时,我们会得到预期的结果。但是,如果我们并行创建/运行实例,云存储上只会出现一些文件。在这两种情况下,我们都可以看到DF作业被创建并成功终止 例如,我们有11个实例,它们生成11个输出文件。在串行模式下,我们得到所有11个文件,在并行模式下,我们只得到大约3个文件。在并行运行期间,所有11个实例同时运行 有人能就为
PCollection<String> results = p
.apply("Read from Cloud SQL", JdbcIO.<String>read()
.withDataSourceConfiguration(JdbcIO.DataSourceConfiguration
.create(dsDriver, dsConnection)
.withUsername(options.getCloudSqlUsername())
.withPassword(options.getCloudSqlPassword())
)
.withQuery(options.getCloudSqlExtractSql())
.withRowMapper(new JdbcIO.RowMapper<String>() {
@Override
public String mapRow(ResultSet resultSet) throws Exception {
return mapRowToJson(resultSet);
}
})
.withCoder(StringUtf8Coder.of()));
当我调用模板时,我还提供了“tempLocation”。我可以看到正在使用动态临时位置。尽管如此,我并没有看到并行运行时的所有输出文件
谢谢解决方案
您是否有可能提供一些代码来显示您正在执行的操作?是否可以至少显示管道的IO输入源和接收器步骤。以及命令行或创建作业UI屏幕截图,以便我们可以看到您传递的参数。我怀疑问题可能在于,不知何故,这两条管道正在写入同一个地面军事系统位置,并可能清除彼此上方的地面军事系统位置。我还将尝试确保这两个作业使用单独的--tempLocation和--stagingLocation值,看看这是否解决了问题。谢谢你的建议,我已经为每个实例生成了一个动态模板,但是我仍然看到了这个问题——尽管可能不是很糟糕。所有作业的目标都是相同的CS位置,因此我可能会尝试为每个作业生成一个唯一的输出位置,然后在最后将它们移回中心位置……请也尝试一下,并让我知道这是否有帮助。如果您使用相同的地面军事系统输出位置,我相信它们会相互覆盖。我可以确认,添加唯一的输出位置解决了问题。您可以观察日志中的行为-DF首先将临时文件写入输出CS位置,然后重命名它。这会导致文件被覆盖
mvn compile exec:java \
-Dexec.mainClass=com.xxxx.batch_ingestion.LoadCloudSql \
-Dexec.args="--project=myproject \
--region=europe-west1 \
--stagingLocation=gs://bucket/dataflow/staging/ \
--cloudStorageLocation=gs://bucket/data/ \
--cloudSqlInstanceId=yyyy \
--cloudSqlSchema=dev \
--runner=DataflowRunner \
--templateLocation=gs://bucket/dataflow/template/BatchIngestion"