文档章节

第8课:Spark Streaming源码解读之RDD生成全生命周期彻底研究和思考

 大家风范
发布于 2016/05/15 23:50
字数 579
阅读 14
收藏 0

spark stream中的Dstream是对RDD的更高层次抽象,Dstream其实就是RDD的模板,在spark stream中对Dstream的操作最终都会转换为对RDD的操作!

我们来看看Dstream的继承结构,是不是感觉跟RDD的继承结构有些类似呢?

<其中值得我们研究的有ForEachDStream,InputDStream 这是所有Dgraph依赖关系的开始和结尾>

 

 

下面通过简单的wordCount 程序来研究Dstream之间的关系

1    val lines = ssc.socketTextStream("localhost", 9999)

2  val words = lines.flatMap(_.split(" "))                     

3    val pairs = words.map(word => (word, 1))          

4    val wordCounts = pairs.reduceByKey(_ + _)       

5    wordCounts.print()  

======================================            

第1行产生的类型为SocketInputDStream

第2行产生的类型为FlatMappedDStream

第3行产生的类型为MappedDStream

第4行产生的类型为ShuffledDStream

第5行产生的类型为ForeachDStream

这些Dstream的依赖关系底层其实都是RDD的依赖关系,在spark core中DAG图中当Action动作触发的时候,才会从后往前进行回溯整个过程。在spark stream中这是这样一个过程。

下面我们根据代码来回溯这个过程:

在第5行wordCounts.print() 代码中会有一个Action的动作。

 

最终会产生一个 ForEachDStream

进入ForEachDStream 看一下它的generateJob方法。这个方法会被JobGenerator中的generateJobs(time: Time) 进行调用。

在这里调用了当前Dstream依赖的父Dstream,在我们这个例子中是ShuffledDStream。那么我们进入ShuffledDStream找到getOrComputer方法(应为继承与实现的关系,我们在Dsstream中找到了getOrComputer,儿该方法调用实现类的Computer方法)

在发方法中我们有看到了parent.getOrCompute(validTime)这样的代码,继续回溯父Dstream。

在接下来的

第2行产生的类型为FlatMappedDStream 第3行产生的类型为MappedDStream

跟上面分析过程是一样的,直到我们回溯到了Dstream最开始的地方,也就是产生第一个Dstream的第一行代码:SocketInputDStream,在这个Dstream中我们将会真正得到数据!然后将得到的数据封装成RDD一层一层的返回给子Dstream,从而完成Dstream的回溯!

回到最开始的ForEachDStream,最终将封装进Job对象中,返回给JobScheduler

JobScheduler,收到Job进行调度

 

© 著作权归作者所有

粉丝 0
博文 19
码字总数 18058
作品 0
万州
私信 提问
Spark Streaming 是如何提交任务的

赵法宪 大数据爱好者,对部分大数据源码有过研究。熟悉Hdfs, HBase, Spark等相关开发。 Spark Streaming是如何提交任务的? Spark Streaming 是现在实时消息处理的解决方案之一,本文是简单介...

Qunar技术沙龙
2018/06/20
0
0
新手入门:Spark 部署实战入门

Spark简介 整体认识 Apache Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架。最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一。 Spark在整...

景龙Edward
2016/07/05
14.9K
5
18小时内掌握Spark,全面提升Spark技能!

伴随着大数据相关技术和产业的逐步成熟,继Hadoop之后,Spark技术以其无可比拟的优势,发展迅速,将成为替代Hadoop的下一代云计算、大数据核心技术。   Spark是基于内存,是云计算领域的继...

Spark亚太研究院
2014/06/12
62
0
Spark(五) -- Spark Streaming介绍与基本执行过程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/45770881 Spark Streaming作为Spark上的四大子框架之一,肩负着实时流计算的重...

jchubby
2015/05/16
0
0
如何使用spark处理数据集

基本不会编代码,毕设选了“基于测量的在线视频流媒体质量因素分析”,导师要求使用spark进行分析,可是我是个对大数据,机器学习,rdd,hdfs,完全是一头雾水,因为导师和研究生也没有会这个的...

kevinlu
2014/05/15
1K
3

没有更多内容

加载失败,请刷新页面

加载更多

spring mvc主流程源码阅读(剖析)

第一步,通过web.xml的配置可以知道,用户访问url第一次先走到DispatchServlet,(默认你学过基本的java的Servlet开发) <servlet><servlet-name>springServlet</servlet-name><serv......

小海bug
3分钟前
0
0
vmstat命令详解

https://www.cnblogs.com/ggjucheng/archive/2012/01/05/2312625.html

流光韶逝
37分钟前
1
0
如何理解算法时间复杂度的表示

先从O(1) 来说,理论上哈希表就是O(1)。因为哈希表是通过哈希函数来映射的,所以拿到一个关键 字,用哈希函数转换一下,就可以直接从表中取出对应的值。和现存数据有多少毫无关系,故而每次执...

yky20190625
53分钟前
5
0
分布式架构 实现分布式锁的常见方式

一、我们为什么需要分布式锁? 在单机时代,虽然不需要分布式锁,但也面临过类似的问题,只不过在单机的情况下,如果有多个线程要同时访问某个共享资源的时候,我们可以采用线程间加锁的机制...

太猪-YJ
今天
8
0
GitLab Docker 安装记录

安装环境 环境Centos7.4 64 1.拉取镜像文件 docker pull gitlab/gitlab-ce:latest 2.docker 安装 git.zddts.com 为访问域名或换成可以访问的IP docker run -d --hostname git.***.com -p ......

侠者圣
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部