大数据学习

Spark Streaming学习(一)流处理框架,Spark运

2020-09-02  本文已影响0人  xiaogp

流处理框架

Spark Streaming和其他流处理框架的对比


Spark Streaming简介

Spark Streaming是一个高吞吐高容错实时流处理系统,可以从KafkaFlume等获取数据,然后利用复杂操作(如mapreducewindow等)进行操作,最终处理后的数据输出到文件系统数据库或者控制台

Spark Streaming输入和输出过程.png

实际上Spark Streaming在接受到实时数据时,会将其按照批数据(Batch)来处理,再对批数据进行处理得到最后的结果数据流。


Spark批数据处理过程.png

Spark Streming将批处理数据抽象为离散数据流(DStream),DStream有两种产生方式,一种是从Kafka,Flume等输入流上直接创建,一种是对其他DStream采用高阶API操作得到(transform),DStream的本质是由RDD数据结构的序列来表示的。


Spark的运行模式

Spark提供了4种模式,分别是本地模式Standalone模式Spark On Yarn模式以及Spark On Mesos模式,本地模式包含单机模式和伪集群模式,用于调试实验,其他三种集群配置。Spark运行的相关概念如下:

Spark运作模式.png

Spark Streaming UI监控界面

从Spark运行日志中跟踪url地址


日志中的Spark UI地址.png

Spark主界面记录应用详情


应用详情页-Jobs.png
应用详请页-Stages.png
应用详情页-Executors.png

一共三个executors,每个executor4个core,一共12cores


应用详情页-Streaming.png
运行环境.png
包括Java,Scala版本,Spark配置参数,系统配置参数,Jar包明细

RDD编程模型

1.RDD概述

RDD的核心为内存计算适合计算机集群有容错方式,RDD的容错是通过记录RDD之间的转换从而刻画集成关系,最终形成一个DAG有向无环图,这种结构当发生RDD丢失时,能够利用上下文的信息从祖辈RDD中重新计算得到
RDD并行计算的核心是分区,数据在RDD内部被划分为多个子集合,每个子集合是一个分区,每个分区又一个单独的任务Task来运行,分区数越多并行度越高。

2.RDD操作

RDD操作可以分为TransformationAction两种,Transformation不会触发计算,只会建立RDD之间的关系图
mapmapPartitions的区别

3.RDD间的依赖方式

从一个RDD生成新的RDD称为子RDD,子RDD的向上依赖就是父RDD,两个RDD之间的依赖关系分为宽依赖(Shuffle依赖)和窄依赖

RDD持久化

如果对一个RDD进行持久化,那么每个节点的每个Partition都会将计算记过保存在内存中,下次调用的时候无需重新计算。可以使用rdd.persist()或者rdd.cache()方法将一个RDD持久化,默认是作为非序列化对象在内存中持久化(MEMORY_ONLY)。Spark会自动把Shuffle操作的一些中间数据进行持久化,防止Shuffle时一个节点失败导致全局重新计算。

共享变量

广播变量的好处:如果算子函数中,使用到了特别大的数据,那么推荐将该数据进行广播,就不至于将一个大数据拷贝到每一个task上去,而是给每个节点拷贝一份,然后节点上的task共享该数据。这样的话,就可以减少大数据在节点上的内存消耗,并且可以减少数据到节点的网络传输消耗。例如把配置文件添加到广播变量:

import java.util.Properties
val prop = new Properties()
val configProperties = ssc.sparkContext.broadcast(prop)
// 使用value获得值
configProperties.value.getProperty("", "")

scala中一切可序列化的对象都是可以广播的,可以利用广播变量将一些经常访问的大变量进行广播。

上一篇下一篇

猜你喜欢

热点阅读