前段时间负责了公司一个新的项目,项目不属于直接面向用户的线上实时响应系统,要求做到尽快毫秒级或者秒级响应的准实时系统。结合以前学习的一些大数据理论方面和参与的准实时系统方面的经验,对准实时系统架构设计做个自我总结。

对我理解的准实时系统做个定义,一种区别线上实时响应系统,也不同于离线跑批系统时效滞后性,通常实时数据量还偏大,要求最快毫秒级或者秒级响应的系统形式。 一般准实时系统还要求,支持水平伸缩扩展,通过增加资源(机器、容器)线性提高并发量来保证高可用。

说准实时系统前,先要从开源批处理系统鼻祖Hadoop的MapReduce模型说起,MapReduce模型是谷歌在2004年在国际会议上发表的一篇关于分布式大数据编程模型。2004年,开源项目Lucene和Nutch的创始人Doug Cutting发现MapReduce正是其所需要的解决大规模Web数据处理的编程模型,基于Java设计开发了一个称为Hadoop的开源MapReduce并行计算框架和系统。MapReduce模型主要就是解决了大数据并行处理的技术难题,现在看来,MapReduce虽然也有不少局限性,但是其分布式并行处理的思想广泛影响了整个大数据世界的发展方向。下面通过一个典型的MapReduce模型的原理图开始说起:

忽略具体的技术细节,简化后看MapReduce模型,如下:

如图所示,Map过程对输入数据分而治之,每个Map的输出作为Reduce的输入,Reduce进一步把数据进行处理,得到输出结果。Map过程提供了大数据情况下经典的数据分而治之,把输入数据分散到多个Map进行数据拆分,处理完一起把数据输出到Reduce对应的实例(容器或者服务器),具体某个Map如果出现异常,其它机器能容错接过来该任务,MapReduce模型提供了大数据情况下高可用处理方案。

然后,MapReduce模型至少有以下几点自身的局限性,

  1. 不适合做准实时大数据系统:MapReduce模型Map过程都是偏向处理一次输入的批量大数据,Map和Reduce每一步的输入输出数据都是落在硬盘,Reduce过程必须要等Map过程处理完,才能执行Reduce过程,因此,Hadoop不适合做大数据情况下的实时或者准实时系统,目前业界对Hadoop的定位也都是大数据批处理系统。
  2. MapReduce模型不适合做复杂步骤的数据处理工作,经常业务场景需要对一批数据进行多个MapReduce操作才能达到业务上的处理效果。

针对MapReduce的以上问题,Spark都很好的解决了这些问题。首先应该说Spark怎么解决复杂多步骤任务计算,Spark提出了RDD DAG 的编程模型。

RDD 是一个只读的、分区的(partitioned)数据集合,RDD可以来源于HDFS这样的文件系统,也可以是上一部的RDD经过算子计算后的新RDD集合,问题2中的复杂多步骤计算任务,在Spark实际上可以表示成为一个或者多个RDD(上图的数据源是一个)通过算子连接的有向无环图,节点就是RDD,边就是算子,Spark支持大量的算子。

针对Hadoop存在的问题1,可以分为两部分来说:

第一部分,批处理过程的Map和Reduce过程为了分区容错都要落盘的情况,Spark通过分区一旦丢失就重新计算来解决,具体过程:另一个计算节点可以从它的前继节点出发、用同样的计算过程重算一次,然后,丢失的RDD就可以重新得到。

第二部分,Spark 支持Spark Streaming,Saprk Streaming通过将持续输入数据切分为一定大小的切片(mini-batch),用一系列的RDD + DAG的过程来处理每一个切片。如此一来,这多个RDD + DAG就变成了同一个批处理大任务被切割成多个在集群多个机器上小任务,Spark Streaming 就实现了变批量到流式处理了。哈哈,多年不学数学的我,第一次弄明白这一点的时候,马上想到了这不是微积分思想在大数据处理上的应用啊。

关于MapReduce模型不适合做复杂步骤的数据处理工作的劣势,因为复杂任务会是一个相对负责的MapReduce有向无环图,如果自己针对有向无环图每个节点去写Map和Reduce的话,成本会非常高。针对这种情况,Hadoop 生态专门有Pig语言和Hive框架分别针对不同的场景下复杂大数据处理工作,Pig语言简单概括就是对mapreduce算法实现了一套shell脚本;Hive框架主要做大数据数据仓库使用,数据仓库的各种数据纬度分析可以通过HSql语言来实现各种分析,原理也是把查询任务转换成一个复杂的有向无环图的MapReduce任务。

简单介绍了下Hadoop和Spark处理的编程模型,有没有发现Hadoop 和Spark 的长处都更是擅长大数据计算方面,Hadoop更实用做批处理任务,Spark不仅可以做批处理,还可以做流式大数据处理。基本上可以任务Spark继承了MapReduce所有优点,Spark在批处理上最大的优点是:不同于MapReduce的是Job中间输出和结果保存在HDFS中,Spark直接保存在内存中,同时RDD模型天然适合分布式数据处理模型理论。

流式处理系统除了使用Spark Streaming外,其实还可以使用Strom。通过上面的介绍,Spark Streaming 通过切片的方式来实现流式处理,而Strom 就是天生为流式处理而生。按照Storm设计者的说法,Storm对于实时计算的意义类似于Hadoop对于批处理的意义,在实时性上Strom优于Spark。

针对以上情况,如果让你设计一个准实时流式系统的话,我的建议是,如果你们公司已经有Spark集群,可以基于Spark Streaming 作为准实时系统的计算框架;如果没有的话,可以直接上Storm。

如果你们团队不熟悉常用的大数据框架,如果你们有kafka的使用经验的话,也可以使用kafka搭建准实时流式系统,后面会专门一篇写基于kafka设计准实时流式大数据系统。

大数据准实时流式系统设计(一)——基于大数据框架设计相关推荐

  1. 狼厂项目实践:通用检索框架准实时流的设计与实现

    背景 检索对实时性的要求很高,不仅是对索引建立.结果召回.策略干扰等核心部分,也包括数据录入的部分.检索的数据流主要包括全量数据与增量数据,其中全量数据是在运行前就已经生成好的,在检索进程运行开始时就 ...

  2. 读自动驾驶激光雷达物体检测技术(Lidar Obstacle Detection)(1):Stream PCD流式载入激光点云数据

    首先贴一下大佬的github链接:https://github.com/williamhyin/SFND_Lidar_Obstacle_Detection 知乎专栏:https://www.zhihu ...

  3. 什么是大数据「实时流计算」?深度解析它的4大应用及4个特点

    导读:火灾已经爆发后才知道救火,交通已经阻塞后才知道疏通,羊毛已经被"羊毛党"薅光后才知道堵上漏洞,股价已经拉升后才知道后悔--为什么我们不能在这些事情发生之前,或者至少是刚刚发生 ...

  4. 利用Flume将MySQL表数据准实时抽取到HDFS

    转自:http://blog.csdn.net/wzy0623/article/details/73650053 一.为什么要用到Flume 在以前搭建HAWQ数据仓库实验环境时,我使用Sqoop抽取 ...

  5. 高大上的介绍实时流式计算!

    实时流式计算,也就是RealTime,Streaming,Analyse,在不同的领域有不同的定义,这里我们说的是大数据领域的实时流式计算. 实时流式计算,或者是实时计算,流式计算,在大数据领域都是差 ...

  6. flume mysql hdfs_利用Flume将MySQL表数据准实时抽取到HDFS

    一.为什么要用到Flume 在以前搭建HAWQ数据仓库实验环境时,我使用Sqoop抽取从MySQL数据库增量抽取数据到HDFS,然后用HAWQ的外部表进行访问.这种方式只需要很少量的配置即可完成数据抽 ...

  7. Oceanus的实时流式计算实践与优化

    导语 | 随着互联网场景的不断深化发展,业务实时化趋势越来越强,要求也越来越高.特别是在广告推荐.实时大屏监控.实时风控.实时数仓等各业务领域,实时计算已经成为了不可或缺的一环.在大数据技术的不断发展 ...

  8. kafkaStream处理实时流式计算

    目录 1 实时流式计算 1.1 概念 1.2 应用场景 1.3 技术方案选型 2 Kafka Stream 2.1 概述 2.2 Kafka Streams的关键概念 2.3 KStream& ...

  9. 实时流式处理平台功能介绍

    作者:赵平 导读:在上一篇Wormhole系列文章中,我们介绍了Wormhole的设计思想,并给出了Stream.UMS.Flow.Namespace等相关概念的具体定义,从文章中我们得知,Wormh ...

最新文章

  1. 029# Adempiere采购模组-从采购申请创建采购订单
  2. 低版本系统兼容的ActionBar(四)添加Tab+添加自定义的Tab视图+Fragment
  3. VTK:Utilities之ShepardMethod
  4. 信用卡消费退款,商家让客户付手续费,合理吗?
  5. 需求文档:没有标准,只有沟通
  6. 如何快速的入门git实现版本控制
  7. 《Algorithms》Comparable 实现排序大全
  8. STM32L562开发板开箱记 STM32L562E-DK Discovery kit电路功能分析
  9. android的oomkiller_[Android Memory] Linux下malloc函数和OOM Killer
  10. 寻找大富翁(堆排序)
  11. GeekTool使用备忘
  12. java实现微信企业号API服务端调用封装
  13. 广义相对论基础【2】广义相对论中的张量+张量代数
  14. Combo Box Control
  15. 2022-05-08 Unity核心5——Tilemap
  16. 随笔随想-2022-06-07
  17. 英特尔的指令集体系结构_新指令集将上线:Intel 新版指令集手册确认 Alder Lake 架构的存在...
  18. 电路-电源模块汇总(充电器)
  19. MTFCSGO准心设置
  20. Ardunio开发实例-旋转角度传感器

热门文章

  1. 逻辑思维训练题(共75道)
  2. vb.net 教程 3-7 窗体编程 菜单和工具栏 1 MenuStrip
  3. 井松智能通过注册:年营收5.39亿 姚志坚夫妇为实控人
  4. 量子隐形传态在城市光纤网络中实现
  5. 数字化转型有捷径?不妨尝试一下全面云化网络
  6. 马化腾成功创业:在不确定中等待未来
  7. 资产监测设备助力大棚种植甜椒
  8. 华硕windows10怎么安装c语言,华硕x441sc笔记本u盘安装win10系统教程
  9. Intel超低功耗CPU的一些信息
  10. Java经典编程30题(上)