wordcount数据流过程解析
(1)执行hadoopFile()操作,其中有生成HadoopRDD的new 方法。
然后执行map方法。pair => pair._2.toString,只对Value值进行操作。
在textFile操作中首先从文件系统中读取分布式数据,并且以数据分片的方式存在于集群之中,生成HadoopRDD,
的类型分别为,对于每一个计算节点,计算对应的分片数据;在textFile操作
中,执行了map操作,其中只对VALUE值进行了操作,生成MapPartitionsRDD,只包含每个节点处理的数据信息,
基于HadoopRDD产生的Partition去掉行的KEY;
textFile操作最终生成MapPartitionsRDD,依赖于HadoopRDD。
(2)val words=lines.flatMap{line=>line.split(" ")}
每个数据处理节点对对应的Partition中的每一行进行单词切分并且合并成一个大的单词实例的集合。将每一行的
字符串以空格作为分隔符拆分成单词实例的集合。拆分后生成MapPartitionsRDD。
(3)val pairs=words.map{word=>(word,1)}
对每个单词实例变为形如word =>(word,1)
(4)val wordCounts=pairs.reduceByKey(_+_)
reduceByKey包括两部分:Local 级别和Reducer级别的。其中Local级别的Reduce操作,是在Shuffle之前进行的,
主要负责本地局部统计,并且把统计后的结果按照分区策略放到不同的File中,生成MapPartitionsRDD。
从开始到进行完Local级别的reduce,为一个stage。stage内部进行操作是基于内存的迭代,不需要每次操作都有
读写操作,处理速度非常快。
然后进行Shuffle阶段,首先对MapPartitionsRDD的结果进行数据分片,在另外的计算节点,接收相应的数据,
Shuffle过程产生了网络通信,这会造成网络开销。当网络通信占据计算资源量过多时,会成为集群的瓶颈。不同
的Shuffle策略,产生不同的结果,大部分采用hash的方式进行分配。然后进行内部的合并操作,将相同KEY值的
Value进行相加。得到相应节点的处理结果。Shuffle过程产生ShuffledRDD。
(5)wordCounts.saveAsTextFile()
以将计算结果保存到HDFS的角度讲,对于collect也有相应的MapPartitionsRDD。
def saveAsTextFile(path: String): Unit = withScope {
val nullWritableClassTag = implicitly[ClassTag[NullWritable]]
val textClassTag = implicitly[ClassTag[Text]]
val r = this.mapPartitions { iter =>
val text = new Text()
iter.map { x =>
text.set(x.toString)
(NullWritable.get(), text)
}
}
RDD.rddToPairRDDFunctions(r)(nullWritableClassTag, textClassTag, null)
.saveAsHadoopFile[TextOutputFormat[NullWritable, Text]](path)
}
其中的输出的key值为NullWritable,value值为统计的键值对。在第一次计算的时候,需要生产KEY,所以最后往HDFS中写结果的时候,需要生产KEY,这是符合对称法则和能量守恒形式之美。从Shuffle阶段开始到输出结果,为最后一个Stage。因为只产生一个Shuffle过程。

wordcount数据流过程解析的更多相关文章
- Wireshark分析器分析数据流过程
Wireshark分析器分析数据流过程 分析包是Wireshark最强大的功能之一.分析数据流过程就是将数据转换为可以理解的请求.应答.拒绝和重发等.帧包括了从捕获引擎或监听库到核心引擎的信息.Wir ...
- MHA自动Failover过程解析(updated) 转
允许转载, 转载时请以超链接形式标明文章原始出处和网站信息 http://www.mysqlsystems.com/2012/03/figure-out-process-of-autofailover ...
- SpringBoot的自动配置原理过程解析
SpringBoot的最大好处就是实现了大部分的自动配置,使得开发者可以更多的关注于业务开发,避免繁琐的业务开发,但是SpringBoot如此好用的 自动注解过程着实让人忍不住的去了解一番,因为本文的 ...
- WebGIS实现在线要素编辑之ArcGIS Server 发布Feature Service 过程解析
WebGIS实现在线要素编辑之ArcGIS Server 发布Feature Service 过程解析 FeatureService也称要素服务,其最大的好处就是支持在线要素编辑,并将编辑同步更新到后 ...
- InnoDB recovery过程解析
本文来自网易云社区. InnoDB如果发生意外宕机了,数据会丢么?对于这个问题,稍微了解一点MySQL知识的人,都会斩钉截铁的回答:不会!为什么?他们也会毫不犹豫的说:因为有重做日志(redo log ...
- Mybatis拦截器执行过程解析
上一篇文章 Mybatis拦截器之数据加密解密 介绍了 Mybatis 拦截器的简单使用,这篇文章将透彻的分析 Mybatis 是怎样发现拦截器以及调用拦截器的 intercept 方法的 小伙伴先按 ...
- ASP.NET Core on K8S深入学习(2)部署过程解析与Dashboard
上一篇<K8S集群部署>中搭建好了一个最小化的K8S集群,这一篇我们来部署一个ASP.NET Core WebAPI项目来介绍一下整个部署过程的运行机制,然后部署一下Dashboard,完 ...
- 微信小程序 空白页重定向---二维码扫描第二次进入 不经过onLoad过程解析scene参数,跳转问题
在刚开始的时候将小程序的入口文件直接指向tabbar 的首页,此时出现问题:二维码扫描,第一次不关闭首页,第二次进入时:不会经过onLoad过程解析scene参数: 官方中解释:tabbar跳转方式触 ...
- Dubbo中@Service工作过程解析
Dubbo中@Service工作过程解析 Spring中的BeanPostProcessor 首先我们应当了解到在spring体系中BeanPostProcessor是什么.加载流程 它是什么 Bea ...
随机推荐
- C#委托详解(2):实现方式大全
本系列文章将详细探讨C#中的委托,列举其主要的实现方式,并分析其在设计层面和编码层面带来的好处,最后会讨论其安全性和执行效率等. 接上篇(C#委托详解(1):什么是委托)介绍完什么是委托之后,来看看C ...
- Windows准备Node.js运行与开发环境
如何在Windows环境下搭建Node.js开发环境:1.下载Node.js windows安装版http://www.nodejs.org/download/ 2.正常安装完成后,在系统环境变量已经 ...
- 简述负载均衡&CDN技术
曾经见到知乎上有人问“为什么像facebook这类的网站需要上千个工程师维护?”,下面的回答多种多样,但总结起来就是:一个高性能的web系统需要从无数个角度去考虑他,大到服务器的布局,小到软件中某个文 ...
- BZOJ1565 植物大战僵尸
AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=1565 这题看上去并不会做,结果又是最大权闭合子图的裸题. 于是就去看了一发论文,明白建图的 ...
- html5 webApp常用Meta标签
Html5 webApp常用Meta标签 <meta charset="UTF-8"> <meta name="viewport" conte ...
- 树链剖分 - BZOJ 1036: [ZJOI2008]树的统计Count
这是树链剖分的入门题,也是我学树链剖分的第一题. 树链剖分:就是把树中和线段树联系起来,求(u,v)路径中权值的最大值和其路径的权值和. 入门blog:http://blog.sina.com.cn/ ...
- HDU 2048 神、上帝以及老天爷(递归,错排,dp,概率)
中文题,错排,求概率,不解释,核心思路同 HDU 1465 错排简单思路可看:http://www.cnblogs.com/laiba2004/p/3235934.html //错排,但是我之前叫了几 ...
- POJ 1006 Biorhythms (中国剩余定理)
在POJ上有译文(原文右上角),选择语言:简体中文 求解同余方程组:x=ai(mod mi) i=1~r, m1,m2,...,mr互质利用中国剩余定理令M=m1*m2*...*mr,Mi=M/mi因 ...
- KMP模板,最小循环节
(可以转载,但请注明出处!) 下面是有关学习KMP的参考网站 http://blog.csdn.net/yaochunnian/article/details/7059486 http://blog. ...
- Action Bar详解
Action bar是一个标识应用程序和用户位置的窗口功能,并且给用户提供操作和导航模式.在大多数的情况下,当你需要突出展现用户行为或全局导航的activity中使用action bar,因为acti ...