Open mdianjun opened 3 years ago
批处理架构(shared storage) | MPP架构(shared nothing) | |
---|---|---|
参与计算的节点 | 部分节点 | 全部节点 |
单个节点的数据视角 | 可看到全部数据 | 只能看到自己节点对应的数据 |
task调度 | 有 | 无 |
容错性 | 高(推测执行:避免把task调度到慢节点) | 低(木桶效应) |
中间结果集 | 落盘(发给下一个stage) | 不落盘(pipeline包括一个完整的数据处理流程) |
MPP将mapper和reducer同时运行,而MapReduce将它们分成有依赖关系的tasks(DAG),这些task是异步执行的,因此必须通过写入中间数据共享内存来解决数据的依赖。
参考:
即使使用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调度。
关于shared nothing的两篇资料:
https://toutiao.io/posts/2a9ayg/preview MPP + 批处理(DAG) 融合