什么是Spark Streaming

  1. Spark Streaming类似于Apache Storm,用于流式数据的处理
  2. Spark Streaming有高吞吐量和容错能力强等特点。Spark Streaming支持的数据输入源很多,例如:KafkaFlumeTwitterZeroMQ和简单的TCP套接字等等
  3. 数据输入后可以用Spark的高度抽象原语如:mapreducejoinwindow等进行运算。而结果也能保存在很多地方,如HDFS,数据库等
  4. Spark Streaming也能和MLlib(机器学习)以及Graphx完美融合
  5. Spark基于RDD的概念很相似,Spark Streaming使用离散化流(discretized stream)作为抽象表示,叫作DStreamDStream 是随时间推移而收到的数据的序列
  6. DStream 可以从各种输入源创建,比如 FlumeKafka 或者 HDFS。创建出来的DStream 支持两种操作,一种是转化操作(transformation),会生成一个新的DStream
    另一种是输出操作(output operation),可以把数据写入外部系统中。DStream 提供了许多与 RDD 所支持的操作相类似的操作支持,还增加了与时间相关的新操作,比如滑动窗口

目前流行的三种实时框架对比

Apache

Flink

SparkSteaming

Storm

架构

架构介于spark和storm之间,主从结构与sparkStreaming相似,DataFlow Grpah与storm相似,数据流可以被表示为一个有向图,每个顶点是一个定义的运算,每向边表示数据的流动

Native

架构依赖Spark,主从模式,每个batch批次处理都依赖driver主,可以理解为时间维度上的spark DAG

Micro-Batch

主从模式,且依赖ZK,处理过程中对主的依赖不大

Native

容错

基于Ghandy-Lamport distributed snapshots checkpoint机制

Medium

WAL及RDD血统机制

High(高)

Records Ack

Medium(一般)

处理模型与延时

单条时间处理

亚秒级低延时

一个事件窗口内的所有事件

秒级低延时

每次传入的一个事件

亚秒级低延时

吞吐量

High

High

Low(低)

数据处理保证

Exactly once

High

Exactly once(实现架用Chandy-Lamport算法,即marker-checkpoint)

High

At least once(实现架用record-level acknowledgments),Trident可以支持storm提供exactly once语义

Medium

高级API

Flink,栈中提供了很多高级API和满足不同场景的类库:机器学习、图分析、关系式数据处理

High

能够很容易的对接Spark生态圈里面的组件,同时额能够对接主流的消息传输组件及存储系统

High

应用需要按照特定的storm定义的规模编写

Low

易用性

支持SQL Streaming,Batch和Streaming采用统一编程框架

High

支持SQL Streaming,Batch和Streaming采用统一编程框架

High

不支持SQL Streaming

Medium

成熟性

新兴项目,处于发展阶段

Low

已经发展一段时间

Medium

相对较早的流系统,比较稳定

High

部署性

部署相对简单,只依赖JRE环境

Low

部署相对简单,只依赖JRE环境

Low

依赖JRE环境和ZK

High

     

Spark Streaming架构

  1. Spark Streaming的编程抽象是离散化流,也就是DStream。它是一个 RDD 序列,每个RDD代表数据流中一个时间片内的数据
  2. StreamingContext 会周期性地运行 Spark 作业来处理这些数据,把数据与之前时间区间中的 RDD 进行整合

什么是Dstream

  1. 就是将流式计算分解成为一系列确定并且较小的批处理作业
  2. 可以将失败或者执行较慢的任务在其他节点上并行执行
  3. 有较强的的容错能力,基于lineage
  4. Dstream内含high-level operations进行处理
  5. Dstream内部实现为一个RDD序列
  6.  
  7. 基本数据源:socketfileakka actoerSteaming中自带了该数据源的读取API
  8. 高级数据源:kafkaflume,kinesis,Twitter等其他的数据。必须单独导入集成的JAR
  9.  
  10. Receiver方式:接收器模式是使用Kafka高级Consumer API实现的。与所有接收器一样,从Kafka通过Receiver接收的数据存储在Spark Executor的内存中,然后由Spark Streaming启动的job来处理数据。
  11. Direct:直连模式,在spark1.3之后,引入了Direct方式。不同于Receiver的方式,Direct方式没有receiver这一层,
    其会周期性的获取Kafka中每个topic的每个partition中的最新offsets,并且相应的定义要在每个batch中处理偏移范围,
    当启动处理数据的作业时,kafka的简单的消费者api用于从kafka读取定义的偏移范围

简单Spark Streaming实现

  1. object WorldCount {
  2. def main(args: Array[String]) {
  3. val conf = new SparkConf().setMaster("local[2]").setAppName("NetworkWordCount")
  4. val ssc = new StreamingContext(conf, Seconds())
  5. val lines = ssc.socketTextStream("master01", )
  6. val words = lines.flatMap(_.split(" "))
  7. val pairs = words.map(word => (word, ))
  8. val wordCounts = pairs.reduceByKey(_ + _)
  9. wordCounts.print()
  10. ssc.start()
  11. ssc.awaitTermination()
  12. }
  13. }

Kafka对接Stream实现

  1. object KafkaDirectorDemo {
  2. def main(args: Array[String]): Unit = {
  3. //构建conf ssc 对象 初始化Streamingcontext
  4. val conf = new SparkConf().setAppName("Kafka_director").setMaster("local")
  5. val ssc = new StreamingContext(conf,Seconds())
  6. //设置数据检查点进行累计计算 没有的话抛无方法异常
  7. ssc.checkpoint("hdfs://192.168.25.101:9000/checkpoint")
  8.  
  9. //设置kfaka相关信息
  10. val kafkaParams = Map[String, Object](
  11. "bootstrap.servers" -> "CentOS1:9092,CentOS2:9092,CentOS3:9092",//用于初始化链接到集群的地址
  12. "key.deserializer" -> classOf[StringDeserializer],//key序列化
  13. "value.deserializer" -> classOf[StringDeserializer],//value序列化
  14. "group.id" -> "group1",//用于标识这个消费者属于哪个消费团体
  15. "auto.offset.reset" -> "latest",//偏移量 latest自动重置偏移量为最新的偏移量
  16. "enable.auto.commit" -> (false: java.lang.Boolean)//如果是true,则这个消费者的偏移量会在后台自动提交
  17. )
  18. //kafka 设置kafka读取topic
  19. val topics = Array("first", "second")
  20. // 获得DStream
  21. val dStreaming = KafkaUtils.createDirectStream(ssc,LocationStrategies.PreferConsistent,Subscribe[String, String](topics, kafkaParams))
  22. val rdd = dStreaming.map(record => (record.key, record.value))
  23.  
  24. rdd.print()
  25. rdd.count().print()
  26. rdd.countByValue().print()
  27. dStreaming.foreachRDD(rdd=>rdd.foreach(println(_)))
  28.  
  29. ssc.start()
  30. ssc.awaitTermination()
  31. }
  32. }

Spark学习(4) Spark Streaming的更多相关文章

  1. Spark学习之Spark Streaming(9)

    Spark学习之Spark Streaming(9) 1. Spark Streaming允许用户使用一套和批处理非常接近的API来编写流式计算应用,这就可以大量重用批处理应用的技术甚至代码. 2. ...

  2. Spark学习之Spark SQL(8)

    Spark学习之Spark SQL(8) 1. Spark用来操作结构化和半结构化数据的接口--Spark SQL. 2. Spark SQL的三大功能 2.1 Spark SQL可以从各种结构化数据 ...

  3. Spark学习之Spark调优与调试(7)

    Spark学习之Spark调优与调试(7) 1. 对Spark进行调优与调试通常需要修改Spark应用运行时配置的选项. 当创建一个SparkContext时就会创建一个SparkConf实例. 2. ...

  4. Spark学习一:Spark概述

    1.1 什么是Spark ​ Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎. ​ 一站式管理大数据的所有场景(批处理,流处理,sql) ​ spark不涉及到数据的存储,只 ...

  5. Spark学习之Spark安装

    Spark安装 spark运行环境 spark是Scala写的,运行在jvm上,运行环境为java7+ 如果使用Python的API ,需要使用Python2.6+或者Python3.4+ Spark ...

  6. Spark学习(一) Spark初识

    一.官网介绍 1.什么是Spark 官网地址:http://spark.apache.org/ Apache Spark™是用于大规模数据处理的统一分析引擎. 从右侧最后一条新闻看,Spark也用于A ...

  7. Spark学习之Spark调优与调试(二)

    下面来看看更复杂的情况,比如,当调度器进行流水线执行(pipelining),或把多个 RDD 合并到一个步骤中时.当RDD 不需要混洗数据就可以从父节点计算出来时,调度器就会自动进行流水线执行.上一 ...

  8. Spark学习之Spark调优与调试(一)

    一.使用SparkConf配置Spark 对 Spark 进行性能调优,通常就是修改 Spark 应用的运行时配置选项.Spark 中最主要的配置机制是通过 SparkConf 类对 Spark 进行 ...

  9. Spark学习笔记--Spark在Windows下的环境搭建

    本文主要是讲解Spark在Windows环境是如何搭建的 一.JDK的安装 1.1 下载JDK 首先需要安装JDK,并且将环境变量配置好,如果已经安装了的老司机可以忽略.JDK(全称是JavaTM P ...

  10. Spark学习笔记--Spark在Windows下的环境搭建(转)

    本文主要是讲解Spark在Windows环境是如何搭建的 一.JDK的安装 1.1 下载JDK 首先需要安装JDK,并且将环境变量配置好,如果已经安装了的老司机可以忽略.JDK(全称是JavaTM P ...

随机推荐

  1. redisql 试用

    redisql 是一个redis 模块,可以让redis 支持sql 查询,基于rust编写 具有以下特性 快速,每秒130k的插入 使用标准sql 容易操作,基于redis,使用标准的redis 二 ...

  2. 20181107 模拟赛T1:快乐传递政治正确版

    问题描述 David 有很多好朋友.有些期末季刚结束,有些人很快乐,但有些不太快乐,David 想把快乐传递给每个人,作为心理学大师,他准备了如下计划:David 的朋友中有 n 个男生和 m 个女生 ...

  3. modis数据处理的坑(MOD02,mod03,mod04,MCD19A2)

    一直以来处理modis产品都是用的 modis conversion toolkit(MCTK),用 IDL 来跑感觉好像也没什么问题,好像并没有去验证结果到底对不对,因为用的气溶胶数据 MOD04_ ...

  4. CSS样式的引入方式

    test.css div{ color:yellow; } 在html中引入 <link href="test.css" type="text/css" ...

  5. Mongoose 数据校验

    什么是mongoose数据校验 用户通过mongoose给mongodb数据库增加数据的时候,对数据的合法性进行的验证 mongoose里面定义Schema:字段类型,修饰符.默认参数 .数据校验都是 ...

  6. create-react-app项目暴露webpack配置文件

    create-react-app创建的react项目,webapck配置,默认情况下是在node_modules里面的,我们需要把它暴露到根目录上来. 执行 npm run eject 命令即可,一般 ...

  7. android中SELINUX规则分析和语法简介

    1. SELINUX是可以理解为一种android上面的安全机制,是有美国国家安全局和一些公司设计的一个针对linux的安全加强系统我们可以通过配置SELINUX的相关policy,来定制自己的手机的 ...

  8. 【重庆师范大学】PHP博客训练-Thinkphp

    设计数据库 CREATE TABLE `user` ( `user_id` int unsigned NOT NULL AUTO_INCREMENT, `username` varchar() COM ...

  9. MLflow系列3:MLflow项目

    英文链接:https://mlflow.org/docs/latest/projects.html 本文链接:https://www.cnblogs.com/CheeseZH/p/11945432.h ...

  10. python-- python threadpool 的前世今生

    引出 首先需要了解的是threadpool 的用途,他更适合于用到一些大量的短任务合集,而非一些时间长的任务,换句话说,适合大量的CPU密集型短任务,那些消耗时间较长的IO密集型长任务适合用协程去解决 ...