cloudnativecube / octopus

14 stars 2 forks source link

MPP架构与批处理架构 #94

Open mdianjun opened 3 years ago

mdianjun commented 3 years ago
mdianjun commented 3 years ago
批处理架构(shared storage) MPP架构(shared nothing)
参与计算的节点 部分节点 全部节点
单个节点的数据视角 可看到全部数据 只能看到自己节点对应的数据
task调度
容错性 高(推测执行:避免把task调度到慢节点) 低(木桶效应)
中间结果集 落盘(发给下一个stage) 不落盘(pipeline包括一个完整的数据处理流程)

MPP将mapper和reducer同时运行,而MapReduce将它们分成有依赖关系的tasks(DAG),这些task是异步执行的,因此必须通过写入中间数据共享内存来解决数据的依赖。

参考:

mdianjun commented 3 years ago

即使使用s3,ck的计算与存储也不是彻底解耦:ck的每个shard节点看到都是各自的数据,一个query必须发给所有shard才能完成全部数据的查询;而不能像spark那样,可以把task调度到任意节点。

关于计算节点与任务彻底解耦的想法: 重新定义shard的概念:shard不与计算节点耦合,shard表示s3上一组data parts的集合。每次执行一个query时,动态生成n个shard以及每个shard与一组data parts的映射关系;然后把每个shard分给一个对应的计算节点,该计算节点只负责处理这个shard对应的这些data parts。shard的数量就是所需的计算节点的数量。由于shard数量是动态的且与计算节点是解耦的,所以可以调度到任意计算节点。 这种方式会增加一个shard调度的过程,类似spark的task调度。

mdianjun commented 3 years ago

关于shared nothing的两篇资料:

godliness commented 3 years ago

https://toutiao.io/posts/2a9ayg/preview MPP + 批处理(DAG) 融合

http://hawq.apache.org/