【问题标题】:Data integrity errors in google cloud dataflow jobs谷歌云数据流作业中的数据完整性错误
【发布时间】:2015-03-07 02:44:56
【问题描述】:

我注意到我的一项数据流作业产生了输出,我可以将其描述为太多随机位翻转。例如,年份“2014”(作为文本)写为“0007”或“2016”或“0052”或其他文本值。在某些情况下,输出行格式是有效的(这表明在处理过程中发生了一些事情),但似乎也有几行格式错误(例如,“20141215-04-25”而不是“2014-12-25”之类的东西)。

我偶尔会使用相同的代码和不同的日期范围参数重新运行作业,并且对于这个特定的日期范围,该作业直到大约一周前才成功完成。我一直在尝试不同的机器配置(4 cpu 和 1-cpu 实例),但问题似乎更多地发生在 4-cpu 实例上。

有人知道是什么原因导致的吗?

谢谢, G

【问题讨论】:

  • 嗨,GB,让我跟进这个行为。这显然不是预期的行为。
  • 我们已私下要求提供更多信息,并将尽快发布答案。谢谢,GB!

标签: google-cloud-dataflow


【解决方案1】:

使用 4-cpu 实例时,Dataflow 在单个 Java 进程中运行多个线程。如果其中一种转换是线程敌对的,则可能会发生数据损坏,也就是说,即使是单独的类实例也不能被多个线程安全地访问。这通常发生在类使用静态非线程安全成员变量时。

【讨论】:

  • 我的代码确实存在错误 :( 感谢 Marian 指出问题。
  • 更多关于 Dataflow 的并发模型的信息可以在这个堆栈溢出thread
【解决方案2】:

用户代码中的线程安全问题导致了这种类型的损坏。使用多核实例进行计算时,可能会出现此类错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多