大数据计算生态之数据计算(一)

大数据计算生态之数据计算(一)_第1张图片

 

大数据计算生态之数据计算(一)_第2张图片

 

导读:大数据计算发展至今,已经形成了一个百花齐放的大数据生态,通用计算、定制开发,批量处理、实时计算,关系查询、图遍历以及机器学习等等,我们都可以找到各种对应的计算引擎来协助我们处理这些任务。本系列文章拟以大数据平台从低到高的层次为主线,梳理整个大数据计算生态组件及其功能。

在[大数据计算生态之数据存储]中介绍了存储层中的各个存储组件的分类及功能。有了数据之后,各个应用就可以利用这些数据进行不同维度或角度的分析,从而形成不同的数据价值产品。支撑这一过程最重要的就是计算引擎。计算层是整个大数据计算生态的核心,计算引擎为各个数据任务提供算力支持。本文将详细介绍计算层的各个计算引擎。

本文经授权转自公众号DLab数据实验室

作者 | 小舰

出品 | DLab数据实验室(ID:rucdlab)

 

 

 

 

大数据计算引擎大致可分为批处理、流处理和即席(Ad-Hoc)查询和图查询四类。批处理指的是大规模复杂的数据处理过程,通常的时间跨度在几分钟到数小时甚至数日;流处理指的是实时的数据处理和查询,通常的时间跨度在数百毫秒到数秒之间;即席(Ad-Hoc)查询指的是介于实时和批处理之间的一种查询处理,如一些交互式的数据探查任务,需要秒级或分钟级的较快的响应时间。图查询是基于图模型进行的数据查询,图查询涉及到更多的是迭代类的操作,常见的图算法如路径搜索算法、中心性算法以及社群发现算法等,这些算法在公安系统和银行金融领域中的打击犯罪团伙、金融欺诈、信用卡盗刷等领域有着重要的应用。

 

 

01

 

批处理计算

 

 

目前,在批处理领域,使用最多的计算引擎当属HadoopMR和Spark两者。HadoopMR是最早的批处理引擎,是根据Google的”三驾马车“实现的开源计算框架,主要是解决海量数据的计算问题。由于HadoopMR在处理效率上的一系列问题,Spark应运而生,Spark 针对Hadoop MR2.0存在的问题,对MapReduce做了大量优化。

1.MapReduce(Hadoop)

MapReduce就是指我们常说的Hadoop MapReduce,它是一个批处理计算引擎。每个MapReduce任务都包含两个过程:Map过程和Reduce过程。

 

大数据计算生态之数据计算(一)_第3张图片

 

MapReduce的计算模型:Map和Reduce两个计算过程(中间用Shuffle串联),MapReduce程序。

  - - Map阶段:多台机器同时读取一个文件的各个部分,分别统计词频,产生多个Map集合;

  - - Reduce阶段:接收所对应的Map集合结果,将相同键的集合汇总,进而得到整个文件的词频结果;

 MapReduce的缺点是每个map阶段结束时,都需要将中间结果写到磁盘,reduce阶段继续从磁盘读取数据进行下一步的处理。这个过程会产生大量的数据I/O,导致处理效率比较低。

 

2. Spark

与Hadoop MapReduce不同的是,Spark是基于内存的批处理计算引擎。SparkSpark及其组件已经形成了一个大数据生态,Spark基于这个引擎,提供了很多的高级应用模块解决不同场景中的业务需求。Spark分为Spark Core、SparkSQL、SparkStreaming、GraphX以及MLLib等,SparkCore为Spark的核心和基础,提供基本的批处理功能,其他的每个组件专注于不同的处理任务。

大数据计算生态之数据计算(一)_第4张图片

Spark Core:Spark Core包含Spark的基本功能,如内存计算、任务调度、部署模式、故障恢复、存储管理等。Spark建立在统一的抽象RDD之上,使其可以以基本一致的方式应对不同的大数据处理场景;通常所说的Apache Spark,就是指Spark Core;

Spark SQL:Spark SQL允许开发人员直接处理RDD,同时也可查询Hive、HBase等外部数据源。Spark SQL的一个重要特点是其能够统一处理关系表和RDD,使得开发人员可以轻松地使用SQL命令进行查询,并进行更复杂的数据分析;

Spark Streaming:Spark Streaming支持高吞吐量、可容错处理的实时流数据处理,其核心思路是将流式计算分解成一系列短小的批处理作业。Spark Streaming支持多种数据输入源,如Kafka、Flume和TCP套接字等;

MLlib(机器学习):MLlib提供了常用机器学习算法的实现,包括聚类、分类、回归、协同过滤等,降低了机器学习的门槛,开发人员只要具备一定的理论知识就能进行机器学习的工作;

GraphX(图计算):GraphX是Spark中用于图计算的API,可认为是Pregel在Spark上的重写及优化,Graphx性能良好,拥有丰富的功能和运算符,能在海量数据上自如地运行复杂的图算法。

Spark与Hadoop相比主要有且不限于以下几个优势:

(1)减少磁盘I/O

Hadoop的的map和reduce过程每此处理都要涉及读写磁盘,map端的中间结果也要排序并写入磁盘,reduce从磁盘中进行读取;这样整个处理过程中磁盘I/O就成了处理瓶颈;Spark允许将map端的中间结果放入内存,reduce直接从内存中拉取数据,避免了大量的磁盘I/O。

(2)提高并行度

MapReduce的并行度是进程级别,Spark是线程级别;MapReduce需要进行磁盘的map写入,reduce读取,属于串行执行;spark把不同环节抽象为stage,允许多个stage串行执行或并行执行。

(3)避免重复计算

Spark中通过DAG(有向无环图)来串起数据处理的各个Stage阶段,如果某个阶段发生故障或者数据丢失,可以利用血缘机制来回溯某个RDD,从而减少数据的重新计算,提高效率。

从以上我们看到Spark对Hadoop MR存在的问题都进行了优化,从而提升了数据处理的效率。根据Spark官方提供的性能对比数据,Spark性能比Hadoop高出120倍。

大数据计算生态之数据计算(一)_第5张图片

通过上图简单的一个wordCount统计的例子,可以大致了解Spark进行数据处理的流程,体会Spark的pipeline管道计算模式的优势。

 

 

 

02

 

流处理计算

 

Spark的Spark Streaming和Storm是比较早的流计算框架,随着流计算技术的发展,Storm逐渐被遗弃,Flink作为一匹流计算的黑马得到了业界的广泛应用。Spark Streaming也依靠Spark生态生存了下来。但是面对Spark Streaming对于Flink表现出的不足,从Spark 2.3开始,Structured Streaming引入了低延迟的持续流处理模式,这时候已经不再采用批处理引擎,而是一种类似Flink机制的持续处理引擎,可以达到端到端最低1ms的延迟。

 

1.Storm

 Storm是Twitter开源的分布式实时大数据处理框架,被业界称为实时版Hadoop。Apache Storm从一端读取实时数据的原始流,并将其传递通过一系列小处理单元,并在另一端输出处理/有用的信息。

在Storm中,需要先设计一个实时计算结构,也就是拓扑(topology)。这个拓扑结构会被提交给集群,其中主节点(master node)负责给工作节点(worker node)分配代码,工作节点负责执行代码。在一个拓扑结构中,包含spout和bolt两种角色。数据在spouts之间传递,这些spouts将数据流以tuple元组的形式发送;而bolt则负责转换数据流。

 

大数据计算生态之数据计算(一)_第6张图片

 

下图描述了Apache Storm的核心概念。

大数据计算生态之数据计算(一)_第7张图片

 

2.Spark Streaming

Spark Streaming属于Spark的一个组件,是基于批的流式计算框架,支持Kafka、Flume及简单的TCP套接字等多种数据输入源,输入流接收器(Reciever)负责接入数据。DStream是SparkStreaming中的数据流抽象,它也可以被组织为DStreamGraph。Dstream本质上由一系列连续的RDD组成。

大数据计算生态之数据计算(一)_第8张图片

Spark Streaming,即核心Spark API的扩展,不像Storm那样一次处理一个数据流。相反,它在处理数据流之前,会按照时间间隔对数据流进行分段切分。Spark针对连续数据流的抽象,我们称为DStream(Discretized Stream)。

大数据计算生态之数据计算(一)_第9张图片

DStream是小批处理的RDD(弹性分布式数据集), RDD则是分布式数据集,可以通过任意函数和滑动数据窗口(窗口计算)进行转换,实现并行操作。

大数据计算生态之数据计算(一)_第10张图片

 

3.Flink

Flink是一个面向数据流处理和批量数据处理的可分布式的开源计算框架,它基于同一个Flink流式执行模型(streaming execution model),能够支持流处理和批处理两种应用类型。大数据计算生态之数据计算(一)_第11张图片

Flink最核心的数据结构是Stream,它代表一个运行在多分区上的并行流。

大数据计算生态之数据计算(一)_第12张图片

在 Stream 上同样可以进行各种转换操作(Transformation)。与 Spark 的 RDD 不同的是,Stream 代表一个数据流而不是静态数据的集合。所以,它包含的数据是随着时间增长而变化的。而且 Stream 上的转换操作都是逐条进行的,即每当有新的数据进来,整个流程都会被执行并更新结果。这样的基本处理模式决定了 Flink 会比 Spark Streaming 有更低的流处理延迟性。当一个 Flink 程序被执行的时候,它会被映射为 Streaming Dataflow,上图就是一个Streaming Dataflow。

 

4.Structured Streaming

 

Spark 2.0 引入了Structured Streaming, 将微批次处理从高级 API 中解耦出去。它简化了 API 的使用,API 不再负责进行微批次处理;开发者可以将流看成是一个没有边界的表,并基于这些“表”运行查询。Structured Streaming的默认引擎基于微批处理引擎,并且可以达到最低100ms的延迟和数据处理的exactly-once保证。采用何种处理模式只需要进行简单的模式配置即可。

Structured Streaming定义了无界表的概念,即每个流的数据源从逻辑上来说看做一个不断增长的动态表(无界表),从数据源不断流入的每个数据项可以看作为新的一行数据追加到动态表中。用户可以通过静态结构化数据的批处理查询方式(SQL查询),对数据进行实时查询。

大数据计算生态之数据计算(一)_第13张图片

Structured Streaming通过不同的触发模式来实现不同的延迟级别和一致性语义。主要提供了以下四种触发模式:

  • 单次触发:顾名思义就是只触发一次执行,类似于Flink的批处理;

  • 周期性触发:查询以微批处理模式执行,微批执行将以用户指定的时间间隔来进行;

  • 默认触发:一个批次执行结束立即执行下个批次;

  • 连续处理:是Structured Streaming从2.3开始提出的新的模式,对标的就是Flink的流处理模式,该模式支持传入一个参数,传入参数为checkpoint间隔,也就是连续处理引擎每隔多久记录查询的进度;

 

总结

批处理和流处理涵盖了大部分的应用场景,由于篇幅有限,本期就讲到这里,下期将会继续介绍大数据计算的另外两种场景:即席(Ad-Hoc)查询和图查询。

 

●大数据计算生态之数据存储

●Spark训练营(一)-- 开发环境搭建及wordCount实战

●Spark训练营(二)-- SparkStreaming流计算组件wordCount实战

●Spark训练营(三)-- GraphX图计算组件最短路算法实战

●一文纵览大数据计算生态

●原创|带你厘清分布式、数据库的那些一致性

●深入浅出大数据组件之Kafka消息队列

●一个故事让你理解什么是区块链

●实时数据流计算引擎Flink和Spark剖析

●自定义Hadoop的输入格式

 

 

你可能感兴趣的:(大数据原理与应用,大数据,hadoop,spark)