当前课程知识点:大数据平台核心技术 >  第七讲 流式计算的系统设计与实现 >  核心技术 >  核心技术(主讲人:强琦)

返回《大数据平台核心技术》慕课在线视频课程列表

核心技术(主讲人:强琦)在线视频

核心技术(主讲人:强琦)

下一节:消息机制(主讲人:强琦)

返回《大数据平台核心技术》慕课在线视频列表

核心技术(主讲人:强琦)课程教案、知识点、字幕

结合以上几个系统的实现

再加上我们在实践中

积累的一些经验

我后面将会介绍流式计算

和增量计算中

最核心的一些技术和难点

那么大家可以从这张图

可以看到

整个流计算

是由一个复杂的Topology

所构成

那么从输入到输出

其中比较重要的两个角色

一个是Jobmaster

一个是Coordinator

那么Jobmaster
是每个Job负责运行时的

一个master

而Coordinator

是刚才所说的消息跟踪的

一个角色

当然流计算会产生大量的消息

所以Coordinator

最好是完全可以做到线性扩展

无状态的线性扩展

Batch数据从源头进入后

进入Source结点

Source结点会从消息源

会去读取数据

然后蓝色的部分

代表着Worker结点

蓝色结点再向橙色结点

进行数据传输的时候

遵循着shuffer的方法

当然这个shuffer

可以是哈希的方法

可以是广播的方法

也可以是任何用户自定义的方法

那么output结点

会将输出结果向在线系统输出

或者像下一级MQ结点输出

那么输出的结果

也是按照Batch去对齐

从刚才那张图可以看到

整个的系统边界

从最开始分成数据的收集

和结果的输出

我们支持消息队列

例如Kafka Hbese

HDFS方式的streaming方式

读取数据

并且借助这些源头

已经持久的数据

来进行数据的系统的容错

这就有一个问题

就是这个队列系统

和这个存储系统

可能涉及到

第三方的服务系统授权

另外实现一种数据收集

支持用户去写入数据

这个和前面一个

我们从用户的消息队列

去拉数据不同的地方在于

我们支持insert数据

那么当然需要实现一个接入

Inpoint的处理模块

这里要解决系统故障的

情况下的数据容错的问题

对于输出来说

跟上面相类似

我们可以选择将结果数据

输入到用户的消息队列

让业务方进行订阅

进入到自己的一个存储系统

也可以直接提供在线数据服务

当然这里就要涉及到

第三方的服务授权

和结果数据的始终对齐

数据的输入和输出介绍完

那么数据

如何在处理结点之间流转

那么这就涉及到

我们整体的shuffle机制

在流计算的处置机制下

数据采用了push模式

因为Push模式相对pu模式来说

它整个数据不落地

对于数据的传输的时效性

是比较友好的

那么另外消息机制

是需要解决丢数据

和重数据的问题

框架也需要保证消息的有序性

介绍完结算结点

跟计算结点的shuffle机制

那么我们反过来再看计算结点

那么一开始我们就提到了

流计算的计算进程

它是longlive的

传统的离线计算

它的计算任务

这个partion计算完了以后

它这个进程是可以被回收

统一 再去调度的

所以可能达到整个计算的超卖

成本降低等等

而流计算

用Push模式这种情况下

这个进程的longlive

那即便没有数据

它这个进程也在

所以决定了我们的系统

在面向longlive的

这个进程情况下

如何调度

消息机制如何去设置

如果你让他去独占CPU的话

那我们整个的计算的超卖

是很难完成的

那么计算的容错

刚才我们简单地介绍了一下

它整个的数据的跟踪机制

那么最最重要的一点

就是流计算的计算

它是个有状态的计算

这个中间状态的存储 容错

关乎着我们整个计算的时效性

正确性 吞吐

也就是成本

离线计算系统

对整个编程模型进行了约束

所以他在计算规模

以及容错上面

已经有了非常成熟的研究

但是在流计算情况下

那么它在扩展能力上

集群规模的上线突破上

那么作为是否可以线性增加

那么线性增加我的作业的并发数

是不是可以线性提升它的吞吐

刚才我们也介绍到了数据倾斜

用户针对这个数据倾斜

可不可以动态地来调整DAG

来有效地避免数据倾斜

带来的性能损失

那么同时

因为倾斜会带来少数结点的超时

超时会进而导致我们整个系统

更大规模的重发重做

进而产生雪崩的可能性

如何避免这些问题

数据的动态变化

我整个Topology

整个并发的动态调整如何做到

那么数据如何高可靠地存储

中间状态如何高可靠地存储

那么整个系统的可用性

但我进行版本升级 系统扩容

是不是可以支持热升级

单点的故障

任意结点的故障

不会导致我整个服务的不可用性

因为我们是在做一个服务

那么我们不可避免地

面临着多租户管理的问题

也就是说授权鉴权 资源隔离

当然有超卖

那么计量计费安全体系

运维体系怎么保证

等等这都是我们在做流计算系统

面临的一些核心问题

那么正如我们刚才所介绍到的

增量的一个delta的语意

我们提出了新的模型MRM

它分为三个主要阶段

Local阶段

是指Batch的Local操作

这个语意完全等同于MapReduce

大家可以认为离线计算

或者全量计算

是一个只有一个Batch的

增量计算

所以这时候的Map语意

是完全一样的

那么Reduce阶段

是一个Aggregate的阶段

那么相当于说

我在Batch内的数据

做一次重新的组合

做数据的聚合操作

也就是说Batch内的Reduce操作

但是增量的语意告诉我们

我们一定要做跨Batch的

数据的结果的合并

也就是上面这个公式

delta计算出来

要进行跟原来那个f(x)

要进行一个合并操作

这个g

所以我们以一个简单的

wordcount来做举例

那么上面这些是

我举例的一些案例

按照这样的Batch去分

那么可以看到Map阶段

每个Batch的输入 输出

然后Reduce输出

第一个Batch输出7

第二个Batch输入5

依此类推

那么初始化情况下

OldValue为0

那么Merge很简单

就进行0和7的合并操作

那在这个case下面

它是count

进行一个count操作

就是7+0

在Batch2

它就把本次的Reduce结果5

和上一次Merge的全局结果

再进行一次Merge12

依此类推

所以大家可以看到

这个对角线的这个颜色

这个就是

这一轮的Merge的结果

会成为下一轮的OldValue

那么有状态的计算

核心的问题是

如何高效地保证这种状态

并且保证系统的扩展性

和系统的可容错性

也就是可用性

那么可以看到

贯穿始终的

是一个很重要的Batch的概念

那么它是整个系统跟踪数据

和处理时效性的最小单位

其实Batch

是一个可以scale的概念

就是它就可以蜕化成

一个全量计算

就是你可以认为

传统的批量计算 全量计算

它是一个只有一批数据

就是所有数据放在一批的

一个增量计算

它是一个特殊的增量计算

也可以把一条数据

就放在一个Batch里头

它可以做到时效性非常高

当然这两者系统的吞吐

系统的时效性

会有截然不同的表现

那么这里头作为一个约束

就是增量计算必须有三个约束

三个要素

就是第一

确定性

因为只有确定性

才有所谓的容错

另外可加性

就是你这个操作

必须是可以增量的

那么第三个要素

叫做可逆性 inverse

那么后面这个例子

会详细地介绍到

那么这个case的意思是说

假设我在双十一有两行sql

那么首先按照卖家ID去Groupby

也就是说

我要统计卖家的实时成交情况

是按照sellerid为11卖家

假设我刚开始没卖

还没做生意

那么第二行是什么意思呢

就是按照每10块钱分制方图

就是说做成0到9块钱生意的

卖家有多少

实时 实时有多少

然后做成10块钱

到19块钱生意的卖家

实时有多少

依此类推

所以可以看到

就像大家看到

双十一的阿里巴巴的大屏一样

它是个实时滚动的

所以举例是说

sellerid为11的这个卖家

刚开始我没卖东西

这个第0档现在没卖家

那么第一档当前时刻

已经有10个卖家了

第七档有53位卖家

卖家为11

做成了一个5块钱的生意

这个数据来了

那么整个的计算是说

11这个0会变成5

那么很明显我现在属于第一档

那么我就把第一档的这个值

由0变成了1

加到了1

因为我现在属于第一档了

也就是第一档的卖家

现在有1个了

就是卖家为11的

但是紧接着

11号卖家

他又做成了16块钱的生意

很明显

他的这个状态

someMoney它就会变成21

那么这里头

发生一个

非常有意思的事情就是说

你21了

到第二个sql语句的时候

第二个计算的时候

你21应该属于20到29这个区间

这个档

也就是说它会把这个档位

原来有10个卖家

现在变成11个卖家

但是重要的是说

你应该还把你原来第0档

也就是做了成了0笔交易

和9笔交易的那个1要减掉

你现在是21块钱了

20到29这个档

你第一要把这个档位要加上去

另外一个

要把你原来对其他档位的贡献

要撤销掉

这个就是我们说的可逆性

我们就需要把这样子的UDEF

不仅要做它的一个正像操作

同时也要它去实现一个负向操作

也就是额外的操作

意思就是说

把你原来之前的那个值

对系统状态的影响

让用户有机会撤销掉

所以可以看到

用户又

这个卖家又做了一个

65块钱的生意

那么变成86

那它其实会变到80到89档

53会加成54

但是同时

刚才那个20到29那个计数

它就会减回到10

然后对外面输出回去

所以可以看到

我们整个的增量计算

这样子的一个

增量语意的一个rollback

相当于对数据库领域的乌化视图

两个乌化视图实时更新

那么一个乌化视图

嵌套一个乌化视图

那么必须要对之前的计算

有一个回稳操作

那么我们认为

这是增量计算的一个

非常本质的一个要求

大数据平台核心技术课程列表:

第一讲 大数据和ODPS

-主讲人:武永卫

--大数据处理平台概述(主讲人:武永卫)

-主讲人:程永

--大数据平台ODPS(主讲人:程永)

-QUIZ--作业

第二讲 分布式存储

-大纲

--大纲(主讲人:姚文辉)

-初步认识大数据对分布式存储系统的需求

--初步认识大数据对分布式存储系统的需求

-理解大数据对分布式存储系统的需求

--理解大数据对分布式存储系统的需求(主讲人:姚文辉)

-具体说明大数据对分布式存储系统的需求

--具体说明大数据对分布式存储系统的需求(主讲人:姚文辉)

-大规模分布式存储的挑战

--大规模分布式存储的挑战(主讲人:姚文辉)

-小概率事件-Raid卡故障

--小概率事件-Raid卡故障(主讲人:姚文辉)

-分布式存储系统举例

--分布式存储系统举例(主讲人:姚文辉)

-分布式存储系统重要功能设计要点剖析

--分布式存储系统重要功能设计要点剖析(主讲人:姚文辉)

-链式写正常流程

--链式写正常流程(主讲人:姚文辉)

-写流程的另一种常见方式:主从模式

--写流程的另一种常见方式:主从模式(主讲人:姚文辉)

-链式写异常流程

--链式写异常流程(主讲人:姚文辉)

-写异常处理的另一种方法-Seal and New

--写异常处理的另一种方法-Seal and New(主讲人:姚文辉)

-读正常流程

--读正常流程(主讲人:姚文辉)

-读流程优化-BackupRead

--读流程优化-BackupRead(主讲人:姚文辉)

-IO QoS

--IO QoS(主讲人:姚文辉)

-数据正确性:checksum

--数据正确性:checksum(主讲人:姚文辉)

-数据可靠性-Replication

--数据可靠性-Replication(主讲人:姚文辉)

-数据均衡-Rebalance

--数据均衡-Rebalance(主讲人:姚文辉)

-垃圾回收-Garbage collection

--垃圾回收-Garbage collection(主讲人:姚文辉)

-Erasure coding

--Erasure coding(主讲人:姚文辉)

-Erasure coding(3,2)写入和读取过程

--Erasure coding(3,2)写入和读取过程(主讲人:姚文辉)

-元数据管理的高可用性和可扩展性

--元数据管理的高可用性和可扩展性(主讲人:姚文辉)

-元数据管理的高可用性

--元数据管理的高可用性(主讲人:姚文辉)

-Paxos概要

--Paxos概要(主讲人:姚文辉)

-Raft

--Raft(主讲人:姚文辉)

-元数据管理的可扩展性

--元数据管理的可扩展性(主讲人:姚文辉)

-不同存储介质的特性

--不同存储介质的特性(主讲人:姚文辉)

-盘古混合存储

--盘古混合存储(主讲人:姚文辉)

-QUIZ--作业

第三讲 资源管理与任务调度

-阿里云飞天分布式调度

--阿里云飞天分布式调度(主讲人:陶阳宇)

-任务调度

--任务调度(主讲人:陶阳宇)

-资源调度

--资源调度(主讲人:陶阳宇)

-容错机制

--容错机制(主讲人:陶阳宇)

-规模挑战

--规模挑战 (主讲人:陶阳宇)

-安全域性能隔离

--安全域性能隔离(主讲人:陶阳宇)

-分布式调度的发展方向

--分布式调度的发展方向(主讲人:陶阳宇)

-QUIZ--作业

第四讲 分布式编程模型的设计与演化

-数据格式和抽象

--数据格式和抽象(主讲人:吴威)

-分布式编程模型

--分布式编程模型(主讲人:吴威)

-MapReuduce编程模型

--MapReuduce编程模型(主讲人:吴威)

-关系型数据编程模型

--关系型数据编程模型(主讲人:吴威)

-分布式图计算模型

--分布式图计算模型(主讲人:吴威)

-分布式编程未来展望

--分布式编程未来展望(主讲人:吴威)

-QUIZ--作业

实践1:通过两阶段提交协议完成数据上传

-分布式事务

--分布式事务 (主讲人:冯骁)

-分布式一致性算法

--分布式一致性算法(主讲人:冯骁)

-两阶段提交与三阶段提交

--两阶段提交与三阶段提交(主讲人:冯骁)

-实践--介绍

--实践--介绍(主讲人:冯骁)

第五讲 离线分布式关系型计算

-关系型计算基本原理_1

--离线分布式关系型计算_1(主讲人:王鹏飞)

-关系型计算基本原理_2

--关系型计算基本原理_2(主讲人:王鹏飞)

-分布式环境中的连接计算和聚合计算

--分布式环境中的连接计算和聚合计算(主讲人:王鹏飞)

-其他计算和物理优化

--其他计算和物理优化(主讲人:王鹏飞)

-QUIZ--作业

第六讲 全局数据管理与调度

-提纲

--提纲(主讲人:罗李)

-课程背景介绍

--课程背景介绍(主讲人:罗李)

-前序知识

--前序知识(主讲人:罗李)

-分布式节点距离计算法则

--分布式节点距离计算法则(主讲人:罗李)

-数据分布策略

--数据分布策略(主讲人:罗李)

-分布式计算调度

--分布式计算调度(主讲人:罗李)

-数据就近原则计算如何容错

--数据就近原则计算如何容错(主讲人:罗李)

-ODPS跨集群数据依赖

--ODPS跨集群数据依赖(主讲人:罗李)

-QUIZ--作业

实践2:编写MR完成Group By+Join操作

-主讲人:谢德军

--实践2:编写MR完成Group By+Join操作(主讲人:谢德军)

第七讲 流式计算的系统设计与实现

-增量计算和流式计算

--流式计算的系统设计与实现(主讲人:强琦)

-与批量计算的区别

--与批量计算的区别(主讲人:强琦)

-业界典型系统技术概要分析

--业界典型系统技术概要分析(主讲人:强琦)

-核心技术

--核心技术(主讲人:强琦)

-消息机制

--消息机制(主讲人:强琦)

-有状态计算、并行DAG、抢占式调度和资源隔离、Failover机制

--有状态计算、并行DAG、抢占式调度和资源隔离、Failover机制(主讲人:强琦)

-StreamSQL

--StreamSQL(主讲人:强琦)

-QUIZ--作业

第八讲 内存计算

-软硬件趋势、分布式计算简史与内存计算

--软硬件趋势、分布式计算简史与内存计算(主讲人:强琦)

-分布式计算

--分布式计算(主讲人:强琦)

-内存计算

--内存计算(主讲人:强琦)

-统一的计算框架

--统一的计算框架(主讲人:强琦)

-业界经典系统技术分析-spark&flink

--业界经典系统技术分析-spark&flink(主讲人:强琦)

-QUIZ--作业

第九讲 大规模数据的分布式机器学习平台

-主讲人:褚葳

--大规模数据的分布式机器学习平台(主讲人:褚葳)

-QUIZ--作业

实践3:实现MapReduce编程运行时库

-分布式环境下的新问题

--分布式环境下的新问题(主讲人:徐冬)

-工程实现范例

--工程实现范例(主讲人:徐冬)

-课程设计相关问题

--课程设计相关问题(主讲人:徐冬)

核心技术(主讲人:强琦)笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。