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 ...
随机推荐
- 团队开发(NABC)
特点:这是一个手机软件,能通过通讯录录入生日信息 N(Need需求):现在在交际圈中需要记住越来越多朋友的生日信息 A(Approach做法):由一个简单的闹钟为基础,添加与生日相关的功能,最终实现 ...
- 常见的百度蜘蛛IP
根据不同的IP我们可以分析网站是个怎样的状态, 以下常见的百度蜘蛛IP: 123.125.68.*这个蜘蛛经常来,别的来的少,表示网站可能要进入沙盒了,或被者降权. 220.181.68.*每天这个I ...
- angularjs源码分析之:angularjs执行流程
angularjs用了快一个月了,最难的不是代码本身,而是学会怎么用angular的思路思考问题.其中涉及到很多概念,比如:directive,controller,service,compile,l ...
- 读书笔记:<世界是数字的>
世界是数字的?第一次听到这个名词不由的感到惊讶,我有听过地球是海洋的,那世界不应该是人类共同拥有的吗或者也可以说世界是大自然的?为什么世界偏偏是数字的呢?我带着满心的疑问去看了那本<世界是数字的 ...
- 关于Office 2013的几个问题
最近在阅读一些pdf的材料,想对其中做一些批注,但是PDF文档做批准比较麻烦,而且市场上的几个pdfToWord也不是很好用. 偶然的机会发现,使用office2013可以直接打开pdf文件,所以赶紧 ...
- C++ Template之非类型模板参数
非类型模板参数是通过基本变量类型引入,例如int,在使用时必须显式自定值,不能通过推断. 非类型模板参数的限制:不能是浮点数(在vc6.0上测试可以为浮点型),对象以及指向内部链接对象的指针. #in ...
- 剑指offer--面试题22
关键在于思路, 需要两个输入向量,而函数中需要一个辅助栈! 思路:以待判出栈序列为基础,逐个判断它与栈顶元素是否相等,相等则弹出且j++,这表明此元素可为出栈顺序元素,不相等则栈元素不断入栈,直至相 ...
- HBAO
nv算是坑死我了,之前下的hbao的sample这次怎么都找不到 http://developer.download.nvidia.com/SDK/10.5/direct3d/samples.html ...
- nodeJs 初探 ~
今天晚上,开始时间了一下nodejs,跟着 Node入门 一步步的往下走.对node开发也有了初步的了解. 期间没有碰到什么问题,只有在最后的时候,碰到了几个问题.在这里记录一下: 1 . cross ...
- 各大公司广泛使用的在线学习算法FTRL详解
各大公司广泛使用的在线学习算法FTRL详解 现在做在线学习和CTR常常会用到逻辑回归( Logistic Regression),而传统的批量(batch)算法无法有效地处理超大规模的数据集和在线数据 ...