在我的 apache 梁和数据流管道中,我做了一些需要全局组合操作的转换,例如 min 、 max 、自定义全局组合函数。pcollection 中要处理的项目数量为 2-40 亿。
我读到大多数组合操作都是建立在 groupBykey 之上的,这会导致 shuffle ,我相信这会使我当前的管道变慢,或者从 UI 中观察到,这是全局组合操作中最高的挂壁时间。我查看了代码, groupByKey 尝试为所有元素添加一个静态 void 键,然后执行 groupby ,这是否意味着我们正在改组数据(特别是当我们只有一个键时)?有没有办法有效地做到这一点
我自己理解的另一个问题:梁/数据流文档说密钥的所有元素都由单个工作线程/线程处理。以在整数的 pcollection 中查找最大值为例,此全局操作是完全可并行化的,其中我的组合器/累加器在数据的部分/子集上工作以找到最大值,然后在树中合并部分结果(合并两个最大值以获得最大值)像这样的结构,叶子的结果可以合并得到父节点,每个节点基本上可以以分布式的方式进行评估。那么究竟是什么操作强制一个键必须由一个工作线程/线程处理。似乎任何具有可交换和关联组合器的全局操作都可以轻松并行化。全局组合的哪一部分需要通过单个工作线程?