Spark Streaming作为Spark上的四大子框架之一,肩负着实时流计算的重大责任

而相对于另外一个当下十分流行的实时流计算处理框架Storm,Spark Streaming有何优点?又有何不足呢?

首先,对于Storm实时流处理惊人的低延迟性,Spark Streaming的不足很明显

Storm官方说的最低延迟可以使多少毫秒级别的

而Spark Streaming只能做到压秒,也就是零点几秒

相对于Storm的实时性来说,Spark Streaming甚至只能说是准实时的

But,Spark Streaming虽然在延迟性方面比不过Storm,但是Spark Streaming有太多太多的优点,以至于能够让人的注意力从Storm转移到Spark Streaming身上

第一,Spark Streaming是Spark的核心子框架之一。

说到Spark核心,那就不得不说RDD了。

Spark Streaming作为核心的子框架,对RDD的操作支持肯定是杠杠的,这又说明了什么?

Spark Streaming可以通过RDD和Spark上的任何框架进行数据共享和交流,这就是Spark的野心,一个堆栈搞定所有场景

第二,虽然Spark Streaming的延迟性比不过Storm,但是Spark Streaming也有自己的优势,那就是巨大的吞吐量,这点是Storm所比不上的

第三,由于Spark上子框架的编程模型基本都是一个套路,所以Spark Streaming的API也是十分易于掌握的

第四,Spark Streaming支持多语言编程,并且各个语言之间的编程模型也是类似的

第五,Spark Streaming的容错机制。Spark Streaming在读取流数据进入内存的时候会保存两个副本,计算只用一个,当出现问题的时候可以快速的切换到另外一个副本;在规定的时间内进行数据的固化;由于支持RDD操作,所以RDD本身的容错处理机制也被继承

Spark Streaming的处理过程:

  1. 以时间片为单位划分形成数据流形成RDD(DStream)
  2. 对每个划分数来的RDD以批处理的方式处理数据
  3. 每个划分出来的RDD地处理都会提交成Job

比较适用的场景:

  • 历史数据和实时数据结合进行分析
  • 对实时性要求不是很苛刻的场景

重要的组件:

  1. Job Scheduler:周期性查询DStream生成的DAG图,将其转换为Job提交到Job Manager
  2. Job Manager:维护Job队列,将Job提交到Spark运行

一些调优方式:

1、运行时间调优

  • 并行度优化,确保任务使用集群所有资源,防止数据倾斜
  • 减少数据序列化、反序列化的次数
  • 合理调整批处理窗口

2、空间占用调优

  • 定时清理不用的数据
  • 控制批处理量,确保当前节点Spark的可用内存能够容纳这个batch窗口的所有数据

下面给出一个Spark Streaming的简单实例代码:

//根据sparkConf(spark配置信息)和Seconds(多少秒处理一次流数据)创建一个StreamingContext对象
val ssc = StreamingContext(sparkConf,Seconds(1))
//调用ssc的socketTextStream根据参数接收指定地址的数据,根据ssc的Seconds参数配置决定多长时间处理一次。这里的socketTextStream是专门处理socket数据的方法,对于其他数据来源,例如Flume,Kafka,Twitter等都有专门的方法来处理
val lines = ssc.socketTextStream(servIp,servPort)
//对每一行数据进行分割
val words = lines.flatMap(_.Split(" "))
//统计word的数量
val pairs = words.map(word => (word,1))
val wordCounts = pairs.reduceByKey(_ + _)
//输出结果
wordCounts.print()
//开始
ssc.start()
//计算完毕退出
ssc.waitTermination()

从以上代码中就很明显的可以看出Spark Streaming的编程模型和Spark上的其他子框架是差不多的,只不过针对实时流处理多了一些自身的操作而已

在执行这行代码的时候

val lines = ssc.socketTextStream(servIp,servPort)

lines其实是一个DStream的RDD对象

每一秒流进来的数据都会被处理成DStream对象,也就是一个个lines

在处理流进来的数据时,Spark Streaming是串行处理的,也就是说,当前面这个DStream在一秒之内还没有被处理完毕时,新的数据来了,那么此时的新数据会被阻塞住,直至当前的DStream处理完毕之后才处理下一个数据

如同上图所示,interval[0,1)和interval[1,2)是串行执行的,当interval1执行完毕(经过reduce操作到达第三个阶段时),才会处理interval2

但是我们可以看到每一行的产生的结果,也就是第三个阶段之间也会进行一些操作运算,这时是交给Spark内核引擎来并行处理的

对于串行引起的阻塞问题就涉及到Spark Streaming的一些优化了,如,Batch Size,每个数据分块的大小应该分为多少才会在规定的时间内处理完毕而不会引起阻塞?

答案是没有最好的Size,只有最合适的Size。

一切都是根据当前系统的状况来进行决定的,以系统反馈的数据说话

Spark(五) -- Spark Streaming介绍与基本执行过程的更多相关文章

  1. 大数据技术之_27_电商平台数据分析项目_02_预备知识 + Scala + Spark Core + Spark SQL + Spark Streaming + Java 对象池

    第0章 预备知识0.1 Scala0.1.1 Scala 操作符0.1.2 拉链操作0.2 Spark Core0.2.1 Spark RDD 持久化0.2.2 Spark 共享变量0.3 Spark ...

  2. Spark源码剖析 - 任务提交与执行

    1. 任务概述 任务提交与执行过程: 1) build operator DAG:此阶段主要完成RDD的转换及DAG的构建: 2) split graph into stages of tasks:此 ...

  3. Spark 以及 spark streaming 核心原理及实践

    收录待用,修改转载已取得腾讯云授权 作者 | 蒋专 蒋专,现CDG事业群社交与效果广告部微信广告中心业务逻辑组员工,负责广告系统后台开发,2012年上海同济大学软件学院本科毕业,曾在百度凤巢工作三年, ...

  4. spark教程(16)-Streaming 之 DStream 详解

    DStream 其实是 RDD 的序列,它的语法与 RDD 类似,分为 transformation(转换) 和 output(输出) 两种操作: DStream 的转换操作分为 无状态转换 和 有状 ...

  5. 大数据技术之_19_Spark学习_01_Spark 基础解析 + Spark 概述 + Spark 集群安装 + 执行 Spark 程序

    第1章 Spark 概述1.1 什么是 Spark1.2 Spark 特点1.3 Spark 的用户和用途第2章 Spark 集群安装2.1 集群角色2.2 机器准备2.3 下载 Spark 安装包2 ...

  6. Spark SQL在100TB上的自适应执行实践(转载)

    Spark SQL是Apache Spark最广泛使用的一个组件,它提供了非常友好的接口来分布式处理结构化数据,在很多应用领域都有成功的生产实践,但是在超大规模集群和数据集上,Spark SQL仍然遇 ...

  7. [Spark Streaming_1] Spark Streaming 概述

    0. 说明 Spark Streaming 介绍 && 在 IDEA 中编写 Spark Streaming 程序 1. Spark Streaming 介绍 Spark Stream ...

  8. Spark记录-spark介绍

    Apache Spark是一个集群计算设计的快速计算.它是建立在Hadoop MapReduce之上,它扩展了 MapReduce 模式,有效地使用更多类型的计算,其中包括交互式查询和流处理.这是一个 ...

  9. spark教程(13)-shuffle介绍

    shuffle 简介 shuffle 描述了数据从 map task 输出到 reduce task 输入的过程,shuffle 是连接 map 和 reduce 的桥梁: shuffle 性能的高低 ...

随机推荐

  1. OpenWRT介绍

    1. 介绍 OpenWRT是一款第三方路由器固件, 其特别在于开放性, 如它的文件系统可写, 用户可在路由器上安装需要的第三方软件.通过刷入OpenWRT, 我们可以完成如下事情 - DLNA共享 - ...

  2. malloc和new的区别 begin

    http://blog.csdn.net/miss_acha/article/details/7279915#comments 1.综述 1,malloc与free是C++/C语言的标准库函数,new ...

  3. 1.flume概述

    我们的web服务器等等每天会产生大量的日志,我们要把这些日志收集起来,移动到hadoop平台上进行分析. 那么如何移动这些数据呢?一种方法是通过shell cp到hadoop集群上,然后通过hdfs ...

  4. python日志模块笔记

    前言 在应用中记录日志是程序开发的重要一环,也是调试的重要工具.但却很容易让人忽略.之前用flask写的一个服务就因为没有处理好日志的问题导致线上的错误难以察觉,修复错误的定位也很困难.最近恰好有时间 ...

  5. resin + eclipse 遇到的问题

    1. 编译jsp报错: com.caucho.jsp.JspParseException: javac compiler is not available in Java(TM) SE Runtime ...

  6. 关于iBatis-selectKey的一点笔记

    技术前提:我们使用iBatis作为持久层方案 技术场景:     假设我们有两张表,一张主表Main,一张子表Sub,并且主表的主键是由数据库维护的自增长的主键,子表中有一个字段引用这个主键,那么当我 ...

  7. centos7当中的systemd及systemctl(节选)

    全面进入centos7时代,这个东东是需要系统了解的. http://blog.jobbole.com/85070/?utm_source=blog.jobbole.com&utm_mediu ...

  8. 文件的上传(TCP)

    问题描述:将本地文件上传(需将文件名一起上传)至指定服务器,服务器将上传的文件保存至指定路径下并文件名添加前缀 "Downlod_原文件名". 思路: 客户端需要一个输入流来读取本 ...

  9. centos6.5 中文输入法图标和提示都不见了【解决】

    原因python升级引起的 两步解决: # vi /usr/bin/ibus-setup # vi /usr/libexec/ibus-ui-gtk 把这两个文件中的exec python 修改为 e ...

  10. luogu P2134 百日旅行

    题目链接 luogu P2134 百日旅行 题解 dp方程好想吧 优化有些玄学惹 不会证.... 不过我会三分和贪心 \滑稽 但还是写dp吧 代码 #include<cstdio> #in ...