Google cloud dataflow 云数据流批处理在公共密钥上连接两个PCollection需要数小时

Google cloud dataflow 云数据流批处理在公共密钥上连接两个PCollection需要数小时,google-cloud-dataflow,Google Cloud Dataflow,我正在运行一个数据流批处理作业,以在一个公共密钥上连接两个PCollection。这两个PCollection每个都有数百万行:一个是800万行,另一个是200万行。我的工作需要4个多小时才能完成!因此,我查看了以下相关主题的So帖子: 但是没有发现任何关于如何在数据流中处理这种大型连接的问题。我有以下问题: 对于大型数据集(每个数据集有数百万行),数据流是否能够在一个公共键上连接两个PCollection BQ是否更适合这种加入 使用GCP大数据堆栈处理此类用例的可能解决方案是什么

我正在运行一个数据流批处理作业,以在一个公共密钥上连接两个PCollection。这两个PCollection每个都有数百万行:一个是800万行,另一个是200万行。我的工作需要4个多小时才能完成!因此,我查看了以下相关主题的So帖子:

但是没有发现任何关于如何在数据流中处理这种大型连接的问题。我有以下问题:

  • 对于大型数据集(每个数据集有数百万行),数据流是否能够在一个公共键上连接两个PCollection
  • BQ是否更适合这种加入
  • 使用GCP大数据堆栈处理此类用例的可能解决方案是什么
  • 提前谢谢


    编辑:提及数据流、GroupByKey和CoGroupByKey

    集合中的值是如何跨键分布的?您能否共享一个工作ID,以便我们可以查找可能发生的任何其他问题?感谢Ben的及时行动。我想知道我们是否有热点问题。这是供您审阅的作业ID:2017-08-23_12_04_24-3505646281616846076似乎此作业运行大约需要1小时,但计划需要3小时。也许您同时运行了太多的数据流作业,并且超出了配额?1小时的时间也值得关注,但似乎是因为热键:例如,您的单键处理时间长达40分钟。你能分享你如何在CoGbkResult上执行连接的伪代码吗?在每个集合中,每个键通常有多少个值?@jkff,调度信息在控制台的某个地方可用吗?我所发现的只是在查看作业执行时经过了4个小时的时间。以下是伪代码:``PCollection inp1=。。。;PCollection inp2=。。。;final TupleTag t1=新TupleTag();final TupleTag t2=新TupleTag();PCollection coGbkResultCollection=KeyedPCollectionTuple.of(t1,inp1)。和(t2,inp2)。apply(CoGroupByKey.create());`很快将共享键值分布信息。抱歉,我误解了日志-它实际上运行了4个小时。但我看到第一个系列似乎有190M行,而不是2M行,但它仍然不会花这么长时间。我更感兴趣的是如何处理CoGroupByKeyResult的伪代码(例如,您是否在每个分组的标记迭代器上都有一个嵌套循环?或者您是否将其中一个保存到列表或映射中?等等)。集合中的值是如何跨键分布的?您能否共享一个工作ID,以便我们可以查找可能发生的任何其他问题?感谢Ben的及时行动。我想知道我们是否有热点问题。这是供您审阅的作业ID:2017-08-23_12_04_24-3505646281616846076似乎此作业运行大约需要1小时,但计划需要3小时。也许您同时运行了太多的数据流作业,并且超出了配额?1小时的时间也值得关注,但似乎是因为热键:例如,您的单键处理时间长达40分钟。你能分享你如何在CoGbkResult上执行连接的伪代码吗?在每个集合中,每个键通常有多少个值?@jkff,调度信息在控制台的某个地方可用吗?我所发现的只是在查看作业执行时经过了4个小时的时间。以下是伪代码:``PCollection inp1=。。。;PCollection inp2=。。。;final TupleTag t1=新TupleTag();final TupleTag t2=新TupleTag();PCollection coGbkResultCollection=KeyedPCollectionTuple.of(t1,inp1)。和(t2,inp2)。apply(CoGroupByKey.create());`很快将共享键值分布信息。抱歉,我误解了日志-它实际上运行了4个小时。但我看到第一个系列似乎有190M行,而不是2M行,但它仍然不会花这么长时间。我更感兴趣的是如何处理CoGroupByKeyResult的伪代码(例如,在分组的每个标记迭代器上是否有嵌套循环?或者是否将其中一个保存到列表或映射中?等等)。