[英]debug apache beam / dataflow in a debugger?
这首先与这篇文章高度相关 -> 如何在 Dataflow 中进行此类测试(在 twitter 上称为功能测试)?
我们在生产中有一些这样的代码
@Override
public PDone expand(PCollectionTuple in) {
final RosterPipelineOptions options = (RosterPipelineOptions) in.getPipeline().getOptions();
try {
final Schema schema = new Schema.Parser().parse(PractitionerStandardAvroWriter.class.getResourceAsStream("/standardFormat.avsc"));
final String schemaStr = new BufferedReader(new InputStreamReader(PractitionerStandardAvroWriter.class.getResourceAsStream("/standardFormat.avsc")))
.lines().collect(Collectors.joining("\n"));
final PCollection<Validated<PractitionerStandardOutputDto>> validOutputs = in.get(PractitionerStandardOutputConverter.VALID_OUTPUTS_TAG);
final PCollection<Validated<PractitionerStandardOutputDto>> invalidOutputs = in.get(PractitionerStandardOutputConverter.INVALID_OUTPUTS_TAG);
final PCollection<GenericRecord> validRecords = validOutputs.apply(
"Transform Valid Standard Output into Generic Rows", ParDo.of(new GenericRecordConverter(schemaStr)));
final PCollection<GenericRecord> invalidRecords = invalidOutputs.apply(
"Transform Invalid Standard Output into Generic Rows", ParDo.of(new GenericRecordConverter(schemaStr)));
validRecords
.setCoder(AvroCoder.of(GenericRecord.class, schema))
.apply("Write Records", AvroIO.writeGenericRecords(schema)
.to(options.getValidOutput())
.withoutSharding());
final PCollection<String> invalidRows = invalidRecords
.setCoder(AvroCoder.of(GenericRecord.class, schema))
.apply("Convert Error Avro to Csv", ParDo.of(new AvroToCsvConvertFn(schemaStr, ",")));
invalidRows.apply("Write Error Records to Csv",
TextIO.write().to(options.getInvalidOutput()).withoutSharding());
return PDone.in(in.getPipeline());
}
catch (IOException e) {
SneakyThrow.sneak(e); return null;
}
}
但是当我们在测试中调试它时,我们无法看到错误。 很难通过这段代码来查看发生了什么,因为我认为它是在这段代码之后运行以变形数据,而这段代码只是如何处理传入数据的定义。 如果我在这里错了,请纠正我?
两个问题
谢谢,院长
一般来说,就像你的其他问题一样,我的建议如下:
您可以在expand
中设置断点,这些断点将在管道构建时被命中。 您可以在 DoFn 的process
中设置断点,或者split
, read
for Sources - 这些将在管道执行时被命中。
一些最有价值的测试工具是PAssert
、 TestStream
和TestPipeline
。 我建议您查看我共享的页面,看看这些实用程序是否有帮助。
对于您的特定管道,我可能认为您可以将 PTransform 分成更小的部分,并为每个部分编写简单的单元测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.