山东大学大数据管理与分析知识点总结
大数据概述
- 大数据(big data),或称巨量资料,指的是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产
- 大数据指不用随机分析法(抽样调查)这样的捷径,而采用所有数据进行分析处理
大数据四个本质特征
-
大量化(volume),快速化(velocity),多样化(variety),价值化(value);四个V
-
Volume—数量大:数据每两年就增长一倍(大数据摩尔定律)
-
Velocity—速度快:
- 从数据的生成到消耗,时间窗口非常小,可用于生成决策的时间非常少
- 1秒定律(在秒级时间范围内给出分析结果):这一点和传统的数据挖掘技术有本质的不同
-
Variety—多样化:大数据是由结构化和非结构化数据组成的
-
–10%的结构化数据,存储在数据库中
–90%的非结构化数据,与人类信息密切相关
-
非结构化数据类型多样(邮件、视频、微博、位置信息、链接信息、网页点击)
-
-
Value—价值:价值密度低,商业价值高
大数据分析的三个特征
-
全样而非抽样
-
效率而非精确
-
相关而非因果
池塘捕鱼(数据库)vs.大海捕鱼(大数据)
-
数据规模(MB vs GB,TB,PB),
-
数据类型(结构化 vs 非结构化,半结构化,结构化),
-
模式与数据关系(数据库是先有模式,大数据是先有数据,后有模式,模式随着数据量增长改变),
-
处理对象(数据本身 vs 数据作为一种资源来辅助解决其他诸多领域的问题),
-
处理工具,
大数据与云计算
- 密切相关、相辅相成的,二者的关键技术是共享的,海量数据存储技术、海量数据管理技术、MapReduce编程模型
- 利用云计算强大的计算能力,可以更快处理大数据信息
- 通过大数据的业务需求,推进云计算的实际运用
- 区别:最大区别是应用目标不同,云计算更侧重“计算模式”,大数据更侧重“数据资源”[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B2u6csa0-1656911923907)(C:Users27562AppDataRoamingTyporatypora-user-imagesimage-20220625174450484.png)]
大数据面临的挑战
-
大数据集成:
- 散布于不同的数据管理系统;
- 数据类型转向结构,半结构和非结构融合;
- 数据质量不一,垃圾信息泛滥;
-
大数据分析:
- 数据处理实时性
- 动态变化环境中索引设计
- 先验知识缺乏
-
大数据隐私问题:数据更多以数字化的形式存储在电脑中,互联网的发展则使数据更加容易产生和传播。
-
隐性的数据暴露,–面临技术和人力(众包)的双重考验
-
数据公开与隐私保护的矛盾,–隐私保护数据挖掘
-
数据动态性,–现有隐私保护技术基于静态数据
-
-
大数据能耗问题:能源价格上涨、数据中心存储规模不断扩大
- 解决方面:采用新型低功耗硬件,引入可再生的新能源
-
大数据处理与硬件协同:硬件的快速升级换代照成大量不同架构硬件共存的局面
- 硬件异构性带来的大数据处理难题
- 新硬件给大数据处理带来的变革
-
大数据管理易用性问题:
-
易用性的挑战突出体现在两个方面:
- 分析复杂,结果形式更加的多样化
- 很多行业都有大数据分析需求
-
达到易用性,关注三个准则:可视化原则,匹配原则,反馈原则
-
-
性能测试基准:目前尚未有针对大数据管理的测试基准
-
构建大数据测试基准面临的主要挑战:
-
系统复杂度高
用户案例的多样性
数据规模庞大
系统的快速演变
重新构建还是复用现有的测试基准
-
-
大数据处理基本流程
- 数据抽取与集成,数据分析,数据解释
- 数据抽取与集成:
- 数据来源广泛,数据类型繁杂,所以需要从中提取出关系和实体,经过关联和聚合之后采用统一定义的结构来存储这些数据;
- 集成提取的时候需要进行数据清洗,保证数据质量和可信性。
- 数据抽取和集成的方式分为四个类型:数据整合,数据联邦,数据传播,混合方法
- 数据分析:
- 数据量大,同时意味着数据噪声大,大数据时代算法需要调整
- 数据分析是大数据处理的核心,但是用户最关注结果的展示
- 数据解释:
- 引入可视化技术
- 让用户在一定程度上了解参与具体的分析过程
大数据的快
-
大数据为什么强调快?
-
数据的价值像商品一样会折旧
-
数据跟新闻和金融行情一样,具有时效性
-
时间在分母上,越小,单位价值越大
-
-
大数据的快体现在两个方面:动态数据来的快,正使用数据处理的快
-
如何实现快的数据处理:
- 考虑目前的架构是不是有潜力改进
- 采用通用技术思路:
- 前端采用流处理,即时处理过滤非重要数据
- 数据预处理成适合快速分析的格式
- 增量计算:先新后旧
- 原始数据和中间数据存储到内存而不是硬盘
- 降低对于精确度要求
批处理与流处理
-
大数据三种状态:静止数据,正使用数据,动态数据
-
批处理:数据不动,处理逻辑进来,算完后出去
-
流处理:处理逻辑不动,动态数据进来,计算完后价值留下,原始数据加入静止数据,或者丢弃
- 源源不断的数据当成流;新数据到来时立刻处理并返回结果。
-
流处理与批处理的组合:
- 流处理作为批处理的前端:
- 流处理与批处理肩并肩:动态智能+历史智能=全时智能
大数据关键技术和工具
-
Hadoop
-
Spark
-
文件系统:HDFS,GFS,TFS
-
数据库系统
-
NoSQL技术:
- NoSQL数据库应该具有的特点:模式自由,支持简单备份,程序接口简单,最终一致性(支持BASE特性),支持海量数据
-
索引和 查询技术
-
数据分析技术:MapReduce计算模型,实时数据处理
Hadoop
Hadoop的作用和功能
- 采用分布式存储方式,提高读写速度,扩大存储容量
- 采用MapReduce整合分布式文件系统的数据,保证分析和处理数据的高效
- 采用存储冗余数据方式保证数据安全性
- HDFS的高容错特性,基于Java语言,使得Hadoop可以部署在低廉的计算机集群
- 开源特性,还有HDFS的数据管理能力,MapReduce的高效率处理任务
Hadoop优点
- Hadoop 是可靠的:因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布
- Hadoop 是高效的:因为它以并行的方式工作,通过并行处理加快处理速度。
- Hadoop 还是可伸缩的,能够处理PB 级数据
- Hadoop成本低:依赖于廉价服务器:因此它的成本比较低,任何人都可以使用
- 运行在Linux平台上:Hadoop带有用Java 语言编写的框架,因此运行在Linux 生产平台上是非常理想的
- 支持多种编程语言:Hadoop 上的应用程序也可以使用其他语言编写,比如C++
RDBMS与MapReduce比较
- RDBMS适合查询与更新,MR适合批处理
- RDBMS适合持续更新数据集,MR适合一次性写入多次读取的应用
- RDBMS只能处理结构化数据,MR对于非结构化和半结构化的数据也非常有效
- 二者融合时一种趋势
Hadoop体系结构
- 核心元素:HDFS,MapReduce计算框架
- HDFS时最底层的,它存储在Hadoop集群中存储节点上的文件,在集群上实现了分布式文件系统
- HDFS上一层是MapReduce引擎,在集群上实现了分布式计算和任务处理
- HDFS在MapReduce任务处理过程中提供了文件操作和存储等支持,MapReduce在HDFS的基础上实现了任务的分发、跟踪、执行等工作,并收集结果。二者相互作用,完成了Hadoop分布式集群的主要任务
HDFS体系结构
- hdfs集群由一个NameNode和若干DataNode组成
- HDFS可以用文件名去存储和访问文件,实际上文件是被分成不同的数据块,这些数据块就是存储在数据节点上面
-
NameNode:主服务器,管理文件系统命名空间和客户端对文件的访问操作。目录节点负责Hadoop文件系统里面所有元数据的管理,这样的设计使数据不会脱离目录节点的控制。
- NameNode内存储的是命名空间,数据块与文件名的映射表,每个数据块副本的位置信息
- DataNode:集群中管理存储的数据,文件分成若干数据块,这些数据块存放在一组DataNode上
MR体系结构
- MapReduce是一种并行编程模式
- MapReduce是一个简单易用的软件框架,实现Hadoop的并行任务处理功能
- MapReduce框架是由一个单独运行在主节点上的JobTracker 和运行在每个集群从节点上的TaskTracker共同组成的
- 主节点负责调度构成一个作业的所有任务,这些任务分布在不同的从节点上;主节点监控它们的执行情况,并且重新执行之前失败的任务。从节点仅负责由主节点指派的任务
- 当一个Job 被提交时,JobTracker接收到提交作业和配置信息之后,就会将配置信息等分发给从节点,同时调度任务并监控TaskTracker的执行
Hadoop与分布式开发
- 将大数据集分解为成百上千个小数据集,每个(或若干个)数据集分别由集群中的一个节点进行处理并生成中间结果,然后这些中间结果又由大量的节点合并,形成最终结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eKJUXYAQ-1656911923910)(C:Users27562AppDataRoamingTyporatypora-user-imagesimage-20220625233212479.png)]
- MapReduce 编程模型的原理是:利用一个输入的key/value 对集合,来产生一个输出的key/value 对集合。这个过程基于Map 和Reduce这两个用户自定义函数实现。
- 用户自定义的map函数接收一个输入的key/value 对,然后产生一个中间key/value 对的集
- MapReduce(shuffle)把所有具有相同key值的value集合在一起,然后传递给reduce 函数
- 用户自定义的**reduce 函数接收key和相关的value集合,合并这些value 值,形成一个较小的value 集合。**一般来说,每次reduce 函数调用只产生0 或1 个输出的value值
- 通常通过一个迭代器把中间的value 值提供给reduce 函数,这样就可以处理无法全部放入内存中的大量的value 值集合
HDFS分布式文件系统
HDFS是基于流数据模式访问和处理超大文件的需求而开发的,它可以运行于廉价商用服务器上
HDFS在设计时的假设和目标
- 透明性
并发控制
文件复制功能
硬件和操作系统的异构性
容错能力
安全性问题
HDFS的基本特征
- 大规模数据存储能力
- 高并发访问能力
- 强大容错能力
- 顺序式文件访问
- 简单一致性模型
- 数据库存储模式
HDFS的局限性
- 不适合低延迟数据访问,HDFS 是为高数据吞吐量应用而优化的,这可能会以高时间延迟为代价。
- 无法高效存储大量小文件,所能存储的文件总量受限于 NameNode 的内存总容量。过多的小文件存储会大量消耗 NameNode 的存储量。
- 不支持多用户写入及任意修改文件,写操作总是将数据添加在文件的末尾
块
- HDFS分布式文件系统中的文件也被分成块进行存储,“块”是文件存储处理的逻辑单元
- 使用抽象的块可以带来很多好处:
- 可以存储任意大的文件,而又不会受到网络中任一单个节点磁盘大小的限制
- 使用抽象块作为操作的单元,可以简化存储系统
- 块更有利于分布式文件系统中复制容错的实现
- 一个文件被划分成一连串的数据块,除了文件的最后一块以外其它所有的数据块都是固定大小的,为了数据容错性,每一个数据块都会被冗余存储起来
目录节点
- 集群里面的主节点,负责管理整个HDFS系统的命名空间和元数据,也是客户端访问HDFS系统的入口
- 数据节点会定期发送一个心跳信号(Heartbeat)和数据块列表给目录节点,心跳信号使目录节点知道该数据节点还是有效的,而数据块列表包括了该数据节点上面的所有数据块编号
- 命名空间,即整个系统的目录结构;命名空间的维护操作包括文件和目录的创建、删除、重命名等,所有对命名空间的改动,不包括文件打开读取写入数据),都会被HDFS记录下来
- 客户端需要访问目录节点才能知道一个文件的所有数据块都保存在哪些数据节点上
- 每个数据块默认有3个副本,副本位置信息也保存在目录节点里面
数据节点
- 一般就是集群里面的一台机器,负责数据的存储和读取
- 在写入时,由目录节点分配数据块的保存,然后客户端直接写到对应的数据节点
- 在读取时,当客户端从目录节点获得数据块的映射关系后,就会直接到对应的数据节点读取数据
- 数据节点也要根据目录节点的命令创建、删除数据块和进行副本复制
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HbXU7yXI-1656911923911)(C:Users27562AppDataRoamingTyporatypora-user-imagesimage-20220626001853944.png)]
HDFS可靠性设计
-
HDFS的主要目标之一就是在硬件出错的时候保证数据的完整性,它把磁盘错误作为肯定会出现的情况来对待,而不是异常。
-
常见的数据存储中出现的错误:
–目录节点错误
–数据节点错误
–网络传输异常
HBase
HBase的设计目标、
- 解决HDFS缺少结构化半结构化数据存储访问能力的缺陷
- 提供基于列存储的大数据表管理能力
- 试图提供随时和实时的数据访问能力
- 具备高可扩展性,高可用性,容错处理能力,负载平衡能力,实时数据查询能力
HBase数据模型
- 表中的数据式通过一个行关键字(row key),一个列关键字(column family + column name),一个时间戳(time stamp)进行索引和查询定位的
Hbase存储管理结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-62byNtiH-1656911923911)(C:Users27562AppDataRoamingTyporatypora-user-imagesimage-20220626233632720.png)]
- table->region->-store->{memstor,storeFile}
Hbase数据访问与更新
-
需要查询数据时,子表先查memStore。如果没有,则再查磁盘上的StoreFile。
-
开始数据更新时,先查子表服务器,然后向子表提交数据更新请求。提交的数据并不直接存储到磁盘上的数据文件中,而是添加到一个基于内存的子表数据对象memStore中,当memStore中的数据达到一定大小时,系统将自动将数据写入到文件数据块StoreFile中
-
元数据子表采用三级索引结构:
根子表->用户表的元数据表->用户表
Hive数据仓库
数据仓库是一个面向主题,集成的,时变的,非易失性的数据集合,用来支持管理决策过程
Hive提供一个统一的查询分析层,支撑连接、分组、聚集等类SQL语句,可以看作是用户编程接口
Hive的应用案例
- 日志分析
- 数据挖掘
- 文档索引
- 商业智能信息处理
- 即时查询以及数据验证
spark
MapReduce的缺陷
- 适合高吞吐量批处理数据,不擅长低延时
- 迭代计算,数据共享率太低
- 系统设计没有充分利用内存,难以实现高性能
- 不表达复杂计算问题,例如图形计算,迭代计算
spark集群
- Master node,是整个集群的控制器,负责整个集群的运行,管理work node
- Worker node,计算节点,接受主节点命令,进行状态汇报
- Executors:每个Worker都有一个Executor,负责Task程序的执行,每个worknode可能有多个worker
spark系统
-
driver是任务的起点,负责任务调度
-
Worker管理计算节点worknode,创建并处理并行任务
-
cache存储中间结果
spark程序执行
-
Job:包含多个Task的并行计算,由Spark action催生
Stage:Job拆分成多组Task,每组任务被称为Stage,也可称为TaskSet
Task:基本程序执行单元,在一个executor上执行
-
每个线程可以执行一个task。同一个Executor进程内,多个task之间可以共享内存资源。
-
Driver向Cluster Manager申请资源,并构建Application的运行环境,即启动SparkContext
-
sparkcontext:spark运行的核心模块,对是spark程序进行必要的初始化
-
Cluster manager:集群当中的资源调度服务选取。Standalone模式下,ClusterManager即为Master。在YARN下,ClusterManager为资源管理器
-
application->job->stage->task
基于内存计算思想提高计算性能
- 弹性分布式数据集RDD,spark通过对于RDD的一系列操作完成计算任务
- Spark系统通过世系关系(lineage)来记录一个RDD是如何通过其他一个或者多个父类RDD转变过来的,当这个RDD的数据丢失时,Spark可以通过它父类的RDD重新计算
- Spark是一种基于内存的迭代式分布式计算框架,适合于完成多种计算模式的大数据处理任务
RDD的创建
- 通过从存储器中读取
- val rdd=sc.textFile("……“)
- 其他RDD的数据上的确定性操作来创建(即Transformation)
- val fiilterRdd=rdd.filter(……)
RDD的操作
-
转换transformation:这是一种惰性计算,只是定义了一个新的RDD,并不马上计算新的RDD的值
-
动作action:立即计算RDD的值,并返回结果给程序,或者把结果写入外存
-
val filterRDD=file.filter(line=>line.contains(“ERROR”))
这个操作对于Spark来说仅仅记录从file这个RDD通过filter操作变换到filterRDD这个RDD的变换,现在并不实际计算filterRDD的结果
val result = filterRDD.count()
计算最终的result是多少,操作包括前边transformation时的变换
wordcount的spark编程
-
val file = spark.textFile(“hdfs://…”)
val counts = file.flatMap(line => line.split(“ ”)) //分词
.map(word => (word, 1)) //对应mapper的工作
.reduceByKey(_ + _) //相同key的不同value之间进行”+”运算
counts.saveAsTextFile(“hdfs://…”)
K-means的MapReduce实现
- Map阶段:对于接受的每个数据点p,计算p与聚类中心的距离,归类,输出《cluster,(p,1)》
- combiner阶段:接受的《cluster,(p,1)》,求出这些点的均值
- Reduce阶段:经过Map和Combine后从Map节点输出的所有ClusterID相同的中间结果<ClusterID, [(pm1, n1), (pm2, n3)…]>,计算新的均值pm,输出<ClusterID, pm>
- 输出的(cluster,(pm,n))得到新的聚类中心
K-means的MapReduce不足
- 每次迭代操作需要作为独立作业,需要重复初始化和磁盘读写
- 迭代过程存在大量不变数据,但是每次重新载入处理
- 上一次迭代终止,才能开始下一次迭代
K-means的Spark实现
-
从HDFS上读取数据转化为RDD,将RDD中的每个数据对象转化为向量形成新的RDD存入缓存,随机抽样K个向量作为全局初始聚类中心
-
计算RDD中的每个向量p到聚类中心cluster centers的距离,将向量划分给最近的聚类中心,生成以<ClusterID, (p, 1)>为元素的新的RDD
-
聚合新生成的RDD中Key相同的<ClusterID, (p, 1)>键值对,将相同ClusterID下的所有向量相加并求取向量个数n,生成新的RDD
-
对生成的RDD中每一个元素<ClusterID, (pm, n)>, 计算ClusterID聚类的新的聚类中心,生成以<ClusterID, pm/n>为元素的新的RDD
-
判断是否达到最大迭代次数或者迭代是否收敛,不满足条件则重复步骤2到步骤5,满足则结束,输出最后的聚类中心
-
读取数据和初始化聚类中心
val lines = sc.textFile(“data/mllib/kmeans_data.txt” )
val data = lines.map(s =>
s.split(" ").map(_.toDouble)).cache()
val kPoints = data.takeSample(false, K, 42)
.map(s => spark.util.Vector(s))
//takeSample(Boolean, Int, Long)采样函数,false表示不使用替换方法采样,K表示样本数,42表示随机种子
划分数据给聚类中心
val closest = data.map // 产生<ClusterID, (p, 1)>键值对
(p =>
( closestPoint(spark.util.Vector§, kPoints), // closestPoint计算最近的聚类中心,
// 产生<ClusterID, (spark.util.Vector§, 1)>
) )
聚合生成新的聚类中心
//同一个聚类下所有向量相加并统计向量个数
val pointStats = closest.reduceByKey {
case ((x1, y1), (x2, y2)) => (x1 + x2, y1 + y2) //产生(pm, n)
} //将同一clusterID的所有(p, 1)的两个分量分别相加,得到<ClusterID, (pm, n)>
//计算生成新的聚类中心
val newPoints = pointStats.map {
pair => (pair._1, pair._2._1 / pair._2._2)}.collectAsMap()
//由<ClusterID, (pm, n)>产生(ClusterID, pm/n)。其中,pair._1表示聚类的ClusterID,pair._2._1表示聚类中所有向量之和pm ,pair._2._2表示聚类中所有向量的个数n
PageRank
PR思想
-
Rank leak : 没有连接的网页产生排名泄漏
解决办法:
1.将无出度的节点递归地从图中去掉,待其他节点计算完毕后再加上
2.对无出度的节点添加一条边,指向那些指向它的顶点 -
Rank Sink :整个网页图中若有网页没有入度链接,如节点A所示,其所产生的贡献会被由节点B、C、D构成的强联通分量“吞噬”掉,就会产生排名下沉,节点A的PR值在迭代后会趋向于0
数据挖掘
- 数据挖掘的特征之一:海量数据
kmeans算法描述
- 选出K个点作为初始的cluster center
Loop:
对输入中的每一个点p:
{
计算p到各个cluster的距离;
将p归入最近的cluster;
}
重新计算各个cluster的中心
如果不满足停止条件,goto Loop; 否则,停止
kmeans的局限性
- 初始簇中心的选择影响最终的聚类结果
- 计算量大
knn的mapreduce思路
-
计算测试样本到各训练样本的距离,取其中距离最小的K个,并根据这K个训练样本的标记进行投票得到测试样本的标记
-
//Mapper伪代码
class Mapper
setup(…)
{
读取全局训练样本数据文件,转入本地内存的数据表TR中
}
map(key, ts) // ts为一个测试样本
{ Φ ->MaxS (k)
ts -> tsid, A’, y’
for i=0 to TR.lenghth()
{ TR[i] -> trid, A, y
S = Sim(A, A’);//计算相似度
若S属于k个最大者, (S, y) -> MaxS;
}
根据MaxS和带加权投票表决模型计算出y’ =∑Si*yi/∑Si
emit(tsid, y’)
}
朴素贝叶斯
- 训练数据集Yi频度统计Mapper伪代码
class Mapper
map(key, tr) // tr为一个训练样本
{
tr -> tr_id, A, y
emit(y, 1)
for i=0 to A.lenghth()
{ A[i] -> 属性名xni和属性值xvi
emit(<y, xni, xvi>, 1)
}
} - 训练数据集频度统计Reducer伪代码
class Reducer
reduce(key, value_list) // key 或为分类标记y,或为<y, xni, xvi>
{
sum =0
while(value_list.hasNext())
sum += value_list.next().get();
emit(key, sum)
} - 测试样本分类预测Mapper伪代码
class Mapper
setup(…)
{ 读取从训练数据集得到的频度数据
分类频度表 FY = { (Yi, 每个Yi的频度FYi) }
属性频度表 FxY = { (<Yi, xnj, xvj>, 出现频度FxYij ) }
}
map(key, ts) // ts为一个测试样本
{ ts -> ts_id, A
MaxF = MIN_VALUE; idx = -1;
for (i=0 to FY.length)
{ FXYi = 1.0;Yi = FY[i].Yi; FYi = FY[i].FYi
for (j=0 to A.length)
{ xnj = A[j].xnj; xvj = A[j].xvj
根据<Yi, xnj, xvj>扫描FxY表, 取得FxYij
FXYi = FXYi * FxYij;
}
if(FXYi* FYi >MaxF) { MaxF = FXYi*FYi; idx = i; }
}
emit(ts_id, FY[idx].Yi)
}
流计算
流计算的概念
-
流计算是针对流式数据的实时计算
-
流式数据:是指将数据看作数据流的形式来处理。数据流是在时间分布和数量上无限的一系列动态数据集合体;数据记录是数据流的最小组成单元
-
流数据具有实时持续不断到达,到达次序独立,数据来源众多,格式复杂,数据规模大且不关注存储,注重数据的整体价值而不是个别数据点的特点
-
流计算应用:
处理金融服务如股票交易、银行交易等产生的大量实时数据
各种实时Web服务中,广告推荐,个性化推荐
-
流计算系统需求
- 高性能,海量式,实时性,分布性,易用性,可靠性
流计算的处理流程
- 数据实时采集
- 数据实时计算
- 实时查询服务
Storm对于实时计算的意义类似于Hadoop对于批处理的意义
-
storm特点:简单编程模型,支持各种语言,容错性,水平扩展,可靠的消息处理,快速,容易部署
-
Storm对于流Stream的抽象:流是一个不间断的无界的连续Tuple(元组,是元素有序列表)
- stream的源头抽象为spouts
- stream的中间状态抽象为Bolts,Bolts可以处理Tuples,同时可以发送新的流给其他Bolts
-
使用storm的公司:淘宝,亚马逊
-
流计算是针对流式数据的实时计算
-
流式数据:是指将数据看作数据流的形式来处理。数据流是在时间分布和数量上无限的一系列动态数据集合体;数据记录是数据流的最小组成单元
-
流数据具有实时持续不断到达,到达次序独立,数据来源众多,格式复杂,数据规模大且不关注存储,注重数据的整体价值而不是个别数据点的特点
-
流计算应用:
处理金融服务如股票交易、银行交易等产生的大量实时数据
各种实时Web服务中,广告推荐,个性化推荐
-
流计算系统需求
- 高性能,海量式,实时性,分布性,易用性,可靠性
流计算的处理流程
- 数据实时采集
- 数据实时计算
- 实时查询服务