当前课程知识点:高级大数据系统 > Streaming Data Processing > Storm > Video
我们首先介绍Storm
Storm基于Hadoop生态环境
进行了这样一个流式数据
处理系统的一个设计
那么在Storm中
它最开始想实现的一个目标
就是当数据能够进入系统之后
需要立即触发整个系统
进行这样一个数据源的一个处理
那么在Storm里面
它定义了一系列的这个数据的模型
编程的模型以及它的
这样一个任务的组织方式
实际上是一套全新的
这样一个系统来进行流式数据的一个处理
那我们介绍Storm
会从以下几个概念来进行介绍
一个呢 就是它的数据模型
我们看看流式数据
我们到底怎么去刻画它
因为我们之前对数据的刻画
都是基于文件
基于我们看得到的这个数据块
当数据现在流动起来之后
我们到底以什么样的方式
去刻画这样的数据
第二 我们介绍一个
叫做Topology的概念
那么流式数据处理
是怎么样把不同的数据
处理模块串联到一块
那么它里面的
这样一个东西叫做Topology
我们会介绍它
那么会介绍Topology中的
两个这个模块
一个叫做Spout像水龙头
就数据的一个一个的数据源
一个叫做Bolts
就像处理数据的
这样一个一个的处理单元
然后我们会介绍Spout和Bolts之间
它的这种数据的并行
以及数据的这样一个分配机制
这是我们要介绍的Storm的这些概念
那我们首先来看数据的
模型在Storm中是什么样子的
在Storm中
实际上把能够进入系统的这个数据流
把它进行了一定的抽象
那么把数据流中的每个数据元素
叫做一个元组 Tuple
每个元组实际上
可以包含很多很多的数据域
数据域可能是
由简单的数据类型组成
比如说有字符串 有这个数字
或者说还有一些其他的这种数据类型
那么这些数据类型不限制它的个数
把它们排在一起之后就形成了一个数据的元组
那这边我们给了一个例子
这个例子是在入侵检测中
我们可能会用得到的
有一个IP Address
IP地址 当然有它对应的这样一个url
我们可以看到一个Tuple
实际上就是这么一个小括号
括起来的这样一个元组
那么一系列的元组
依照时间的先后顺序进入系统之后
就形成了一个数据流
这是我们能看得到的
那数据流
你可以看
它没有一个头
也没有一个尾
那么中间我们可以
看到某一个窗口里面
出现了若干的Tuple
这就形成了Storm
能够处理的数据流的一个模式
那么我们来看
有了数据流的概念之后
这个数据在里面
到底是在什么样的
这样一个实体上得到真正的处理的呢
第一个概念 叫做Spout
Spout的原意是水龙头
那么在我们这里面
大家很容易对应的上
它就是产生数据流的
数据的水龙头
那我们可以看
一个Spout实际上
可以生成一个数据流
然后这个数据流
可以被其他的
这个数据处理单元去接收
那么这样的一个数据的水龙头
数据的这样一个源呢
实际上它有自己的
这样一个定义的模式
比如说它会定义
自己能够产生什么样的数据
然后它会告诉
后续处理数据的这些单元
自己到底是不是稳定的
所谓稳定
比如说我的数据
如果你没有及时的处理
我还会不会再给你重放等等
这样的一些属性
是Spout里面会带有的
那么真正处理数据的这些单元呢
我们就要在Spout中把它叫做Bolt
Bolt实际上是处理数据的一些单元
它定义用户会在里面去定义自己
处理数据的一个模式
比如说我给统计
我看到了多少个Tuple
多少个数据源
这就实现了最简单的一个Bolt
同时Bolt还有一个特征
它可以进一步产生数据流
也就是说在Storm中
我们可以一个复杂的这种Tuple结构
图的结构
来把各种处理数据的
这种元素给串联起来
举个例子
比如说
我们看到了刚刚的
那种IP和URL的数据
实际上我们可以在第一个数据流
把其中的IP给提取出来
也就是说
把它的Tuple中的IP Address给提取出来
然后形成一个新的流
那么我们原始的流是
IP Address和URL
那么新的流就变成了IP Address
独立的这样一个数据流
那么第二个Bolt
假设我们串联接在一起的话
它就可以去统计这些IP
比如说出现的次数
就变成了一个IP次数的
一个统计器
那这是我举的一个例子
但是在实际的系统当中
这种组合可以变得异常的复杂
比如说我们可以产生很多的支流
产生很多的这种组合的模式
那么这是Storm中
Spout一个形象的描述
那么数据就像水一样
从Spout中流取出来
然后可以被后续的程序去处理
那么处理这些数据的单元叫做Bolt
那么Bolt可以接收用户自定义的代码
然后对数据进行处理
大家要注意的是
这些模块
这些Spout和Bolt单元
在整个Storm系统中
实际上都是可以得到并行的运行的
多个进程去执行他们的这些代码
那么最终达到扩展到整个系统
达到一个Simpleness Scale
Scalability的能力
那么我们看当我们有了数据的模式
我们有了Spout和Bolt的概念之后
到底这些模块
是怎么样去形成一个处理数据的
一个模式呢
那么我们刚刚多多少少
也模糊地提到了
实际上它是通过一种
图的结构来组织的
在Storm里面
把它叫做Topology
实际上Topology呢
是Storm里面任务的核心概念
它把Bolt和Spout从逻辑上组织到一起
然后形成了一个有向无环图
那么这个有向无环图里面串联了各种各样的功能
实际上它和这种函数式的这个编程语言是等价的
那么一个Topology
实际上和我们在之前的MapReduce里面
所讲的这种一个任务
Hadoop里面的一个任务
实际上是能够对应的起来的
那么我们来看一个Topology
它的一个形象化的描述是什么样子
那么在这张图里面
一个方形实际上是一个Spout
可以产生数据
那我们这个系统中
我们这个Topology中
包含了两个数据源
上面和下面
那么它们产生数据之后
实际上可以被后面的
处理数据的这个单元接收
这样可以看得到
后面会有若干的这个Bolt来接收这些数据流
那么接收了数据流之后
可能还会产生新的数据流
进一步被其他的这个Bolt去接收
那么 我们看到有的data
我们有了这些functions
有了这些函数 有这些功能
然后串联起了这样一个Topology
那么整个串联的过程中
在Storm里面定义了这个串联
你只能把它连成一个有向无环图的一个样子
那么这当然也是有一定的这个道理
希望它的可扩展性
以及它对数据并行化的管理变得比较简单
但是不管怎么样
我们有了这样一个有向无环图之后
实际上我们实现了
从Storm处理数据的功能
到这个DAG的一个变化
以及从DAG到函数式编程语言的过度
函数式编程语言
大家可以看得到
我们在这张图里面
有f h g三个处理数据的单元 Bolt
那么它们分别可以把数据经过f和g两种处理
形成一个新的数据流
然后在h里面得到处理
那么这两个模式是能够对应起来的
所以大家如果有这种函数式编程语言的
一个算法或者是功能
那我们在Storm里面就可以实现相应的对应
我们来看
有了数据源
处理数据的单元
Topology和我们对它DAG的分解之后
实际上我们已经可以用
Storm来处理一些简单的事情
比如说在这个例子中
我们实现了一个类似于MapReduce中
WordCount的这样一个功能
我们想统计刚刚说到的
出现的域名最多的这个请求
那么我们的Stream是一个IP和域名的
一个Tuple进来之后
实际上我们会把Tuple提出来
然后在每一个Bolt上
去统计不同的域名出现的次数
比如说第一个Bolt
我们会让它统计foo.com它出现的次数
那么在当前这个流的状态下
得到了三次
那么另外一个Bolt
接了相同的流
但是我们让它去统计bar.net它出现的次数
那我们发现它是两次
有了这样一个基本概念之后
实际上我们已经可以做出
这个Storm中任意复杂的
这样一个数据处理的程序
那它简单的概念就是这样的
-What is big data and what is big data system?
--Video
-Problems in big data systems?
--Video
-Overview of the course
--Video
-Principles of big data system design
--Video
-Manipulating Data on Linux
--Video
--Video
--Video
-Basics of Linux Data Processing--Manipulating Data
-Running Commands on a Single Machine
--Video
-Running Commands on a Single Machine--作业
-Using a Linux Cluster
--Video
-Using a Linux Cluster--作业
-Storage for Big Data Computing: Distributed file system
--Video
-Storage for Big Data Computing: Distributed file system--作业
-File system and GFS
--Video
-File system and GFS--作业
-Understanding HDFS using Legos
--Video
-Understanding HDFS using Legos--作业
-File System Implementation and DFS
--Video
--Video
-File System Implementation and DFS--作业
-What is MapReduce and why
--Video
-What is MapReduce and why
-Learn MapReduce by playing with cards
--Video
-Processing pattern
--Video
-Processing pattern--作业
-Hadoop
--Video
-Hadoop--作业
-Algorithms in MapReduce
--Video
-Algorithms in MapReduce--作业
-Tutorial
--Video
-Background
--Video
-Background--作业
-Spark
--Video
-Spark--作业
-Use Spark for data mining
--Video
-Use Spark for data mining--作业
-Spark data processing
--Video
-Spark data processing--作业
-Experiment in Spark
--Video
-Experiment in Spark--作业
-Introduction to streaming data processing
--Video
-Introduction to streaming data processing--作业
-Storm
--Video
--Video
--Video
-Storm--作业
-Spark streaming
--Video
--Video
-Spark streaming--作业
-NoSQL introduction
--Video
-NoSQL introduction--作业
-Common Advantages
--Video
-Common Advantages--作业
-Bigtable
--Video
-Bigtable--作业
-Master Startup
--Video
-Master Startup--作业
-HBase
--Video
-HBase--作业
-What is GraphDB and Graph data processing
--Video
-What is GraphDB and Graph data processing--作业
-Graph systems
--Video
-Graph systems
-Example of a GraphDB
--Video
-Example of a GraphDB--作业
-Mahout
--Video
-Mahout--作业
-Case Study: Recommendation
--Video
-Case Study: Recommendatio作业
-Recommendation in Mahout
--Video
-Recommendation in Mahout--作业