一、流式计算

1.什么是流?

Streaming:是一种数据传送技术,它把客户机收到的数据变成一个稳定连续的 
流,源源不断地送出,使用户听到的声音或看到的图象十分平稳,而且用户在 
整个文件送完之前就可以开始在屏幕上浏览文件。

2.常见的流式计算框架

  • Apache Storm
  • Spark Streaming
  • Apache Samza

上述三种实时计算系统都是开源的分布式系统,具有低延迟、可扩展和容错性 
诸多优点,它们的共同特色在于:允许你在运行数据流代码时,将任务分配到 
一系列具有容错能力的计算机上并行运行。此外,它们都提供了简单的API来 
简化底层实现的复杂程度。

对于上面的三种流使计算框架的比较可以参考这篇文章流式大数据处理的三种框架:Storm,Spark和Samza

二、Spark Streaming

1.Spark Streaming介绍

Spark Streaming是Spark生态系统当中一个重要的框架,它建立在Spark Core之上,下面这幅图也可以看出Sparking Streaming在Spark生态系统中地位。 

官方对于Spark Streaming的解释如下:

Spark Streaming is an extension of the core Spark API that enables scalable, high-throughput, fault-tolerant stream processing of live data streams. Data can be ingested from many sources like Kafka, Flume, Twitter, ZeroMQ, Kinesis or TCP sockets can be processed using complex algorithms expressed with high-level functions like map, reduce, join and window. Finally, processed data can be pushed out to filesystems, databases, and live dashboards. In fact, you can apply Spark’s machine learning and graph processing algorithms on data streams.

Spark Streaming是Spark Core的扩展应用,它具有可扩展,高吞吐量,对于流数据的可容错性等特点。可以监控来自Kafka,Flumn,HDFS。Kinesis,Twitter,ZeroMQ或者Scoket套接字的数据通过复杂的算法以及一系列的计算分析数据,并且可以将分析结果存入到HDFS文件系统,数据库以及前端页面中。


Spark Streaming有以下特点

  • 高可扩展性,可以运行在上百台机器上(Scales to hundreds of nodes)
  • 低延迟,可以在秒级别上对数据进行处理(www.qinlinyule.cn Achieves low latency)
  • 高可容错性(Efficiently recover from failures)
  • 能够集成并行计算程序,比如Spark Core(Integrates with batch and interactive processing)

2.Spark Streaming工作原理 
对于Spark Core它的核心就是RDD,对于www.ysgj1688.com Spark Streaming来说,它的核心是DStream,DStream类似于RDD,它实质上一系列的RDD的集合,DStream可以按照秒数将数据流进行批量的划分。首先从接收到流数据之后,将其划分为多个batch,然后提交给Spark集群进行计算,最后将结果批量输出到HDFS或者数据库以及前端页面展示等等。可以参考下面这幅图来帮助理解: 

对于DStream如何理解呢?它是一系列连续的RDD,它是建立在Spark之上的不可变的,分布式数据集,在DStream中的每一个RDD包含着一定时间间隔的数据,如下图所示: 

那么,Spark Streaming的工作原理是什么呢?它是怎么运行在集群上的呢?其原理架构图如下所示: 

我们都知道Spark Core在初始化时会生成一个SparkContext对象来对数据进行后续的处理,相对应的Spark Streaming会创建一个Streaming Context,它的底层是SparkContext,也就是说它会将任务提交给SparkContext来执行,这也很好的解释了DStream是一系列的RDD。当启动Spark Streaming应用的时候,首先会在一个节点的Executor上启动一个Receiver接受者,然后当从数据源写入数据的时候会被Receiver接收,接收到数据之后Receiver会将数据Split成很多个block,然后备份到各个节点(Replicate Blocks 容灾恢复),然后Receiver向Streamin www.leyouzxgw.com  Context进行块报告,说明数据在那几个节点的Executor上,接着在一定间隔时间内StreamingContext会将数据处理为RDD并且交给SparkContext划分到各个节点进行并行计算。

3.Spark Streaming Demo

介绍完Spark Streaming的基本原理之后,下面来看看如何运行Spark Streaming,官方给出了一个例子,从Socket源端监控收集数据运行wordcount的案例,案例很简单,这里不再说明,读者可参考官方文档【http://spark.www.120xh.cn apache.org/docs/1.3.www.taohuayuangw.com 0/streaming-programming-guide.html】

对于Spark Streaming的编程模型有两种方式

第一种:通过SparkConf来创建SparkStreaming

import org.apache.spark._
import org.apache.spark.streaming._ import org.apache.spark.streaming.StreamingContext._ val conf=new SparkConf().setAppName("SparkStreamingDemo").setMaster("master") val scc=new StreamingContext(conf,Seconds(1)) www.baohuayule.net //每个1秒钟检测一次数据

第二种:通过SparkContext来创建,也就是在Spark-Shell命令行运行:

import org.apache.spark.streaming._
val scc=new StreamingContext(sc,Seconds(1))
  • 1
  • 2

当然,我们也可以收集来自HDFS文件系统中数据,查阅Spark的源码,可以发现如下方法: 

这个方法会监控指定HDFS文件目录下的数据,不过忽略以“.”开头的文件,也就是不会收集以“.”开头的文件进行数据的处理。

下面介绍一下如何从HDFS文件系统上监控数据运行wordcount案例统计单词数并且将结果打印出来的案例:

import org.apache.spark._
import org.apache.spark.streaming._ import org.apache.spark.streaming.StreamingContext._ val ssc = new StreamingContext(sc, Seconds(5)) // read data val lines = ssc.textFileStream("hdfs://hadoop-senior.shinelon.com:8020/user/shinelon/spark/streaming/") // process val words = lines.flatMap(_.split(" ")) val pairs = words.map(word => (word, 1)) val wordCounts = pairs.reduceByKey(_ + _) wordCounts.print() ssc.start() // Start the computation ssc.awaitTermination() // Wait for the computation to terminate
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

上面程序会每个5秒钟检测一下HDFS文件系统下的hdfs://hadoop-senior.shinelon.com:8020/user/shinelon/spark/streaming/目录是否有新的数据,如果有就进行统计,然后将结果打印在控制台。运行上面代码有两种方式,可以运行Spark-shell客户端后将上述命令一条条粘贴到命令行执行,显然这样很麻烦;第二种就是将上面的程序写入到一个脚本文件中加载到Spark-shell命令行中执行,这里采用第二种方式: 
在一个目录下创建SparkStreamingDemo.scala文件,内容如上面的代码所示。然后启动Spark-shell客户端。

$ bin/spark-shell --master local[2]
  • 1

然后加载Spark Streaming应用:

scala>:load /opt/cdh-5.3.6/spark-1.3.0-bin-2.5.0-cdh5.3.6/SparkStreamingDemo.scala
  • 1

然后上传数据到上述HDFS文件目录下:

$ bin/hdfs dfs -put /opt/datas/wc.input /user/shinelon/spark/streaming/input7
  • 1

该文件内容如下所示:

hadoop hive
hadoop hbase
hadoop yarn
hadoop hdfs
hdfs spark
  • 1
  • 2
  • 3
  • 4
  • 5

运行结果如下所示: 

通常对于一个Spark Streaming的应用程序的编写分下面几步:

  1. 定义一个输入流源,比如获取socket端的数据,HDFS,kafka中数据等等
  2. 定义一系列的处理转换操作,比如上面的map,reduce操作等等,Spark Streaming也有类似于SparkCore的transformation操作
  3. 启动程序收集数据(start())
  4. 等待程序停止(遇到错误终止或者手动停止awaitTermination())
  5. 手动终止应用程序(stop())

可以使用saveAsTextFiles()方法将结果输出到HDFS文件系统上,读者可以自行试验将结果存入HDFS文件系统中。

最后,介绍一下Spark Streaming应用程序开发的几种常见方式:

  1. Spark Shell Code:开发、测试(上面提到过,将代码一条条粘贴到命令行执行,这种方式只适用于测试)
  2. Spark Shell Load Scripts:开发、测试(编写scala脚本到spark-shell中执行)
  3. IDE Develop App:开发、测试、打包JAR(生产环境),spark-submit提交应用程序

Spark Streaming初步使用以及工作原理详解相关推荐

  1. nginx配置文件及工作原理详解

    nginx配置文件及工作原理详解 1 nginx配置文件的结构 2 nginx工作原理 1 nginx配置文件的结构 1)以下是nginx配置文件默认的主要内容: #user nobody; #配置用 ...

  2. sync.Map低层工作原理详解

    sync.Map低层工作原理详解 目录 为什么需要sync.Map?适合什么场景? sync.Map内部实现基本原理及结构体分析 sync.Map低层工作原理 1. 为什么需要sync.Map?适合什 ...

  3. ASP.NET页面与IIS底层交互和工作原理详解 (二)

    第三回: 引言 Http 请求处理流程 和 Http Handler 介绍 这两篇文章里,我们首先了解了Http请求在服务器端的处理流程,随后我们知道Http请求最终会由实现了IHttpHandler ...

  4. camera (13)---智能手机双摄像头工作原理详解:RBG +RGB, RGB + Mono

    智能手机双摄像头工作原理详解:RBG +RGB, RGB + Mono 由于双摄技术的快速发展,目前已经衍生出了几种不同的双摄硬件和算法配置解决方案.不同手机厂商可能有不同的双摄配置,比如华为荣耀P9 ...

  5. ASP.NET页面与IIS底层交互和工作原理详解(一)

    第一回: 引言 我查阅过不少Asp.Net的书籍,发现大多数作者都是站在一个比较高的层次上讲解Asp.Net.他们耐心.细致地告诉你如何一步步拖放控件.设置控件属性.编写CodeBehind代码,以实 ...

  6. 有刷直流电机工作原理详解

    有刷直流电机工作原理详解 来源:网络整理• 2018-05-10 09:00 • 56380次阅读 有刷直流电机被广泛用于从玩具到按钮调节式汽车坐椅的应用中.有刷直流 (Brushed DC,BDC) ...

  7. 晶体三极管结构及其工作原理详解

    晶体三极管基本概述 晶体管是一种与其他电路元件结合使用时可产生电流增益.电压增益和信号功率增益的多结半导体器件.因此,晶体管称为有源器件,而二极管称为无源器件.晶体管的基本工作方式是在其两端施加电压时 ...

  8. FTP协议及工作原理详解

    FTP协议及工作原理详解 1. FTP协议 什么是FTP呢?FTP 是 TCP/IP 协议组中的协议之一,是英文File Transfer Protocol的缩写. 该协议是Internet文件传送的 ...

  9. 卡尔曼滤波工作原理详解

    卡尔曼滤波工作原理详解 网上看到有不少的博客翻译 How a Kalman filter works, in pictures, 这篇文章中非常有趣的解释了卡尔曼滤波,. 但是目前很多翻译的文章中公式 ...

最新文章

  1. Can't create table... error150
  2. XML学习总结(1)——XML入门
  3. micropython会商用吗_NSF商用食品设备认证解析
  4. elasticsearch文档-modules
  5. php重复点击按钮无效,完美解决UIButton按钮重复点击、多次响应的问题
  6. Python把docx文档中的题库导入SQLite数据库
  7. linux tintin 中文,GitHub - oiuv/tt: TinTin++ on Termux for pkuxkx,(全平台 Mud 客户端)。
  8. [内核内存] [arm64] 内存初始化4---bootm_init
  9. python梦幻西游辅助_GitHub - woshiliushan/mhxy_fz: 一个基于计算机视觉开发的梦幻西游辅助脚本...
  10. AT32F407/437 LWIP FreeRTOS Multicast
  11. 什么是贪婪型人格?如何改变贪婪的性格?
  12. wps无法连接到计算机,WPS无法连接网络怎么解决-解决wps不能连接网络的方法 - 河东软件园...
  13. rasp 系统_一类PHP RASP实现
  14. 从字符串中提取IP子串(C语言)
  15. 【新知实验室】腾讯云TRTC实时音视频体验
  16. 《TiDB 6.x in Action》发布,凝聚社区集体智慧的 6.x 实践汇总!
  17. 入门数据分析,需要会什么
  18. 普元 EOS Platform 7.6 开发版安装时没装coframe,后续再部署coframe源码的操作步骤
  19. 如何做个网站-纯小白
  20. 网件R7800刷OpenWrt固件单臂路由设置经历

热门文章

  1. kettle 使用java版本_Kettle最新版本8.X详解
  2. 时间序列交叉验证TimeSeriesSplit
  3. vim之格式化代码功能——gg=G
  4. mardown文件图片技巧
  5. php对象的三大特征,关于php中面向对象的三大特征(封装/继承/多态)
  6. cycle函数python_Python执行函数的周期实现
  7. java最长公共子序列_技术分享 | 最长公共子序列在比对工具的应用
  8. python 粒子滤波目标追踪_Python实现基于相关滤波的单目标跟踪算法
  9. 2021年软考考试时间公布
  10. 常见问题--项目管理的整体过程是什么?核心的是什么?