当前课程知识点:大数据系统基础 > 7. 流计算 > 授课视屏 > Video
我们现在来介绍
流计算的技术挑战
那么流计算的目标是什么
首先我们从刚才的这样一个
流计算的模式介绍中
我们可以看到
流计算首先它具有一种实时性
也就是说
这个我们可以想想
Twitter的这样的一个模型
也就是说
这些用户一直在以
一个非常高的速度
在发这个twitter
那么我们希望能够每一条到来
这个系统里面的时候
都可以以一个非常短的时间
能够处理完毕
也就是说所谓的实时性
那么另外一个问题
是所谓它的可扩展性
也就是说
这个消息到达的速度
可能是变化得很快的
那么你后面这个系统
能不能做有效的这个扩展
能够在消息到达速度的
变化中仍然能够达到这个
很好的性能
第二个问题是容错性
容错又包括所谓数据的错误
和系统的故障这两类
也就说
首先到达的这些数据里面
可能就某些就是错的
那么其次
还有我们可能在这样的一个
通过一些机器来处理
这样的一个流处理
那么如果有一台机器坏掉了
这个时候怎么样去处理
那么需要注意的是
流计算要求的是在
系统故障的前提下
还能够达到这个实时性
所以这是一个
实际上是一个非常困难的问题
第三是一个可编程性
我们希望写这样
一个处理程序的时候
程序是很好写的
而不能够要很困难的去
处理很多细节的问题
那么当系统的配置变化的时候
或者当应用需求变化的时候
我们的这个程序应该很简单地
就可以处理
而不需要去变化非常多的地方
这样子编程性就会比较差
好那我们来首先来看一下
实时性和可扩展性
那么相对于批处理任务来说
它一般是对固定规模的数据
做处理
也就是说我这个数据处理系统
它的输入的这个规模是固定的
那么执行时间
它也可以长达几十个小时
所以从这个角度来讲
对这个批处理任务来讲
它的实时性要求
是相对来说是非常弱的
那么对于流处理来说
这个数据到达的
速率变化可以很大
那比如说我们以twitter为例
它白天的这个twitter的
发布的速率
就要比它夜晚要大很多
所以它有一个这样的一种模式
就是说这个是rate的话
如果是
这个是时间的话
那么尽量会体现出这样的
一类的特点
那么在这样的一种情况下
就要求系统能够迎合这个速率
处理速率所带来的变化
那么叫有两种策略
一种策略是说
我的系统上能够扩展
比如说
我晚上的时候用一台机器来做
那当我知道负载增加时候
我就会扩展一些机器来做
当然当这个晚上到这个时候
这个负载流下降的时候
可以把这些机器去掉
我只用这一台机器来做
这样更加地经济
那这样就需要对这个流处理的
这样的整个系统的架构
就有比较好的
框架要能支撑比较好的伸缩性
那么另外还有一种方法
比如说即使在这种情况下
我们可能说
这个峰可能会非常高
这个峰可能会非常高
那么在这种情况下
即使我装了这些机器
又加了机器可能还是不够
可能实际上还需要几台机器
但是这些机器你实际上没有了
那么所以这种情况下
需要预先定义好降级处理的方法
也就是说
实在是处理不过来的话
那么我应该怎样去处理
这样的一个任务
当然最简单的策略
大家可以想象
就是直接把这个丢掉
就是说你上面这些我不处理了
那对应到twitter这个
刚才我们举的这个例子里面
那么实际上相当于
中间有些数据我们就
没有去处理
我们就它丢弃掉了
那也是一种方式
当然这种方式必然造成
我们最后的那个统计结果
是不准确的
当然我们知道它一定是偏低的
当然这个是需要和这个
实际应用领域
密切相关
也就是说这个领域管允许你用
这种降级处理的方法来做 对吧
那么第二个重要的问题
重要的挑战 是容错
在容错
我们传统的这个批处理任务
我们都学过这个Mapreduce的
容错是怎么做的
那么他基本上是
采用重算的方式
也是类似的
Mapreduce会把所有的
中间结果都存储到HDFS上
来保证这个系统的这个
在计算失败的时候
可以补充中间的结果
进行后面的计算
那么像Graphlab
这样的图计算引擎
它实际上是提供的一种
checkpoint的一种方式
也就是说
把整个系统的一个中间状态
把它保存起来保存到硬盘上
所以是重算
或者是检查点设置的
这样的一类来处理系统故障
那么在数据错误的情况底下
一般来说
批处理任务会有
一个数据清洗的这样一个阶段
它预先地来完成这个
数据错误的处理
那么在流计算的时候
我们可以想象这个
没有时间来做预先的这个批处理
数据清洗
所以数据的错误
必须也是采用实时处理的
这样一个方式
另外 系统故障时候的容错机制
必须是一个低开销的
因为我们知道流计算
它有这种时时低延迟的要求
所以这个可以想像
它的处理难度会是非常大的
我们在后面会介绍S4和Storm的
这样一个容错的机制
那么第三个挑战
实际上是可编程性
那么在可编程性方面
我们需要说
它达到下面这样几个特点
第一个是描述自然
也就是说
写这个程序的时候
和人的思维方式
是比较接近的
第二个是表达能力强
那这讲的是说
它可以表达很多类型的
流处理的任务
第三个实际上是非常重要的
就是无需关注
或者说比较少来关注
这个容错机制和负载平衡
也就是这个编程接口
最好让用户集中在
他们所关注的这个业务
也就是怎么去处理这个数据上
而容错机制和负载平衡
最好是由系统自动地完成
而不需要由用户进行过多的
编程的人员进行过多的干预
-授课视频
--什么是大数据
--大数据典型应用
--大数据的特点
--大数据技术体系
--大数据生态系统
--大数据技术挑战
--课程内容
-1. 绪论--Quiz 1
-授课视频
--2.2并行化理念
--2.9计算虚拟化
-2.云计算--Quiz 2
-授课视频
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
-3.文件存储--Quiz3
-授课视频
--4.13类似框架
--4.14章节总结
-4. 处理框架--Quiz4
-授课视频
-5.内存计算--Quiz5
-授课视频
--数据副本及一致性
--节点本地数据存储
-6. NoSQL--Quiz6
-授课视屏
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
-7. 流计算--Quiz7