我正在将当前运行的google云数据流作业从v1.8 Java Dataflow SDK更新为v2.4 Java Dataflow SDK,并根据1.x - >的发行说明更新该过程的一部分。 2.x move(https://cloud.google.com/dataflow/release-notes/release-notes-java-2#changed_pubsubio_api)我正在更改PubsubIO.Read函数,如下所示:
PCollection<String> streamData =
pipeline
.apply(PubsubIO.Read
.timestampLabel(PUBSUB_TIMESTAMP_LABEL_KEY)
.topic(options.getPubsubTopic()));
改为PubsubIO.readStrings(),如下所示:
PCollection<String> streamData =
pipeline
.apply(PubsubIO.readStrings()
.withTimestampAttribute(PUBSUB_TIMESTAMP_LABEL_KEY)
.fromTopic(options.getPubsubTopic()));
然后,我需要使用变换映射命令行参数,如此
'--transformNameMapping={\"PubsubIO.Read\": \"PubsubIO.Read/PubsubUnboundedSource\"}'
但是我得到了相应的检查失败:
工作流程失败。原因:新作业与之不兼容 2016-12-13_15_23_40 -....。原来的工作还没有中止 编码器或类型为步骤PubsubIO.Read/PubsubUnboundedSource有 改变。
这让我感到困惑,因为看起来旧代码正在处理字符串并且新代码仍在使用字符串,任何人都可以帮助我理解此错误消息告诉我的内容吗?有没有办法让我添加一个日志声明,告诉我我正在使用的编码器,以便我可以使用旧代码和新代码运行我的测试,看看有什么区别?
答案 0 :(得分:0)
我认为问题在于您正在尝试更新现有作业。由于2.x版本引入了重大更改,因此无法更新流式作业。用户从documentation page顶部的1.x升级时会发出警告:
- 更新不兼容性:Dataflow SDK 2.x for Java与Dataflow 1.x更新不兼容。使用Dataflow流式传输作业 1.x SDK无法更新为使用Dataflow 2.x SDK。 Dataflow 2.x管道只能在以SDK开头的版本中更新 版本2.0.0。
关于编码器的更改,BEAM-1415有一些解释:
不再有办法读/写通用类型T.相反, 有
PubsubIO. {read,write} {Strings,Protos,PubsubMessages}
。 字符串和protos是一种非常常见的情况,因此它们有短缺。对于 其他一切,使用PubsubMessage
并自己解析。的情况下 阅读,您可以使用或不使用属性来阅读它们。这摆脱了 难以使用Coder解码消息的有效载荷(禁止使用 样式指南),因为PubsubMessage很容易编码 样式指南也要求明确地使用它作为 输入/返回类型的转换
在测试中,您可以使用CoderRegistry.getCoder()
中的let params = (new URL(document.location)).searchParams;
let values = params.getAll("param-name");
。