博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spark Streaming
阅读量:5275 次
发布时间:2019-06-14

本文共 1641 字,大约阅读时间需要 5 分钟。

一、梗概

即时处理流式数据;

Spark Streaming 使用 离散化流(discretized stream) DStream作为抽象表示;

DStream是随时间推移而收到的数据的序列。在内部,每个时间区间收到的数据都作为RDD存在,而DStream是由这些 RDD所组成的序列 (因此 得名“离散化”)。

DStream 可以从各种输入源创建,比如 Flume、Kafka 或者 HDFS。

创建出来的DStream支持两种操作,一种是转化操作(transformation),会生成一个新的DStream;另一种是输出操作(output operation),可以把数据写入外部系统中。

批处理程序不同,Spark Streaming 应用需要进行额外配置来保证 24/7 不间断工作。 

 

二、示例:

流计算的实现从创建 StreamingContext 开始。StreamingContext 会在底层创建出 SparkContext,用来处理数据。

//用 Scala 进行流式筛选,打印出包含“error”的行// 从SparkConf创建StreamingContext并指定1秒钟的批处理大小 val ssc = new StreamingContext(conf, Seconds(1))// 连接到本地机器7777端口上后,使用收到的数据创建DStream val lines = ssc.socketTextStream("localhost", 7777)// 从DStream中筛选出包含字符串"error"的行val errorLines = lines.filter(_.contains("error")) // 打印出有"error"的行errorLines.print()
//用 Scala 进行流式筛选,打印出包含“error”的行// 启动流计算环境StreamingContext并等待它"完成" ssc.start()// 等待作业完成ssc.awaitTermination()
//在 Linux/Mac 操作系统上运行流计算应用并提供数据$ spark-submit --class com.oreilly.learningsparkexamples.scala.StreamingLogInput \$ASSEMBLY_JAR local[4]$ nc localhost 7777 # 使你可以键入输入的行来发送给服务器 
<此处是你的输入>

 

三、架构与原理

Spark Streaming使用“微批次”的架构,把流式计算当作一系列 连续的小规模批处理 来对待。 

 

  Spark Streaming处理架构:

      

 

  DStream:一个持续的RDD序列:

      

 

除了转化操作以外,DStream 还支持输出操作,输出操作在每个时间区间中周期性执行,每个批次都生成输出;比如在示例中使用的print()。 

 

运作流程:

  

Spark Streaming 为每个输入源启动对应的 接收器,接收器以任务的形式运行在应用的执行器进程中;

从输入源收集数据并保存为RDD。它们收集到输入数据后会把数据复制到另一个执行器进程来保障容错性(默认行为)。数据保存在执行器进程的内存中,和缓存RDD的方式一样。

驱动器程序中的 StreamingContext 会周期性地运行Spark作业来处理这些数据,把数据与之前时间区间中的 RDD 进行整合。 

 

检查点(check point):可以把运算过程中的状态阶段性地存储到可靠文件系统中(例如 HDFS 或者 S3)。一般来说,你需要每处理 5-10 个批次 的数据就保存一次。在恢复数据时,Spark Streaming 只需要回溯到上一个检查点即可。 

 

 

后续待...

转载于:https://www.cnblogs.com/mzzcy/p/7108738.html

你可能感兴趣的文章
函数指针与指针函数
查看>>
非刚性人脸跟踪 —— 实用工具
查看>>
MS-SQL分页not in 方法改进之使用row_number
查看>>
sql2008 查询某个表被那些存储过程用到
查看>>
mybatis 获得一个map的返回集合
查看>>
web渗透漏洞实例讲解视频课程
查看>>
iOS 极光推送
查看>>
委托的前世今生
查看>>
EF 如何更新多对多关系的实体
查看>>
Silverlight Tips(1)
查看>>
linux把用户添加到组
查看>>
python学习(十八) 程序打包
查看>>
oracle函数 trunc(x[,y])
查看>>
oracle怎么捕获表上的DML语句(不包括select)语句)
查看>>
oracle自动选择索引
查看>>
GTK+ VS MFC
查看>>
BZOJ3916 [Baltic2014]friends
查看>>
AVL树平衡旋转详解
查看>>
RxJava2 源码解析(一)
查看>>
PHP面向对象设计模式
查看>>