(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数据流过程解析的更多相关文章

  1. Wireshark分析器分析数据流过程

    Wireshark分析器分析数据流过程 分析包是Wireshark最强大的功能之一.分析数据流过程就是将数据转换为可以理解的请求.应答.拒绝和重发等.帧包括了从捕获引擎或监听库到核心引擎的信息.Wir ...

  2. MHA自动Failover过程解析(updated) 转

    允许转载, 转载时请以超链接形式标明文章原始出处和网站信息 http://www.mysqlsystems.com/2012/03/figure-out-process-of-autofailover ...

  3. SpringBoot的自动配置原理过程解析

    SpringBoot的最大好处就是实现了大部分的自动配置,使得开发者可以更多的关注于业务开发,避免繁琐的业务开发,但是SpringBoot如此好用的 自动注解过程着实让人忍不住的去了解一番,因为本文的 ...

  4. WebGIS实现在线要素编辑之ArcGIS Server 发布Feature Service 过程解析

    WebGIS实现在线要素编辑之ArcGIS Server 发布Feature Service 过程解析 FeatureService也称要素服务,其最大的好处就是支持在线要素编辑,并将编辑同步更新到后 ...

  5. InnoDB recovery过程解析

    本文来自网易云社区. InnoDB如果发生意外宕机了,数据会丢么?对于这个问题,稍微了解一点MySQL知识的人,都会斩钉截铁的回答:不会!为什么?他们也会毫不犹豫的说:因为有重做日志(redo log ...

  6. Mybatis拦截器执行过程解析

    上一篇文章 Mybatis拦截器之数据加密解密 介绍了 Mybatis 拦截器的简单使用,这篇文章将透彻的分析 Mybatis 是怎样发现拦截器以及调用拦截器的 intercept 方法的 小伙伴先按 ...

  7. ASP.NET Core on K8S深入学习(2)部署过程解析与Dashboard

    上一篇<K8S集群部署>中搭建好了一个最小化的K8S集群,这一篇我们来部署一个ASP.NET Core WebAPI项目来介绍一下整个部署过程的运行机制,然后部署一下Dashboard,完 ...

  8. 微信小程序 空白页重定向---二维码扫描第二次进入 不经过onLoad过程解析scene参数,跳转问题

    在刚开始的时候将小程序的入口文件直接指向tabbar 的首页,此时出现问题:二维码扫描,第一次不关闭首页,第二次进入时:不会经过onLoad过程解析scene参数: 官方中解释:tabbar跳转方式触 ...

  9. Dubbo中@Service工作过程解析

    Dubbo中@Service工作过程解析 Spring中的BeanPostProcessor 首先我们应当了解到在spring体系中BeanPostProcessor是什么.加载流程 它是什么 Bea ...

随机推荐

  1. Bootstrap入门二:响应式页面布局

    Bootstrap 提供了一套响应式.移动设备优先的流式栅格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列.它包含了易于使用的预定义类,还有强大的mixin 用于生成更具 ...

  2. Mysql主从数据库架构的复制原理及配置详解

    1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重 ...

  3. 对git认识

    Github则是一个基于Git的日益流行的开源项目托管库.它的使用流程不需要联机,可以先将对代码的修改,评论,保存在本机.等上网之后,再实时推送过去.同时它创建分支与合并分支更容易,推送速度也更快,配 ...

  4. Codeforces Round #354 (Div. 2) D. Theseus and labyrinth

    题目链接: http://codeforces.com/contest/676/problem/D 题意: 如果两个相邻的格子都有对应朝向的门,则可以从一个格子到另一个格子,给你初始坐标xt,yt,终 ...

  5. Windows下配置使用MemCached

    工具: memcached-1.2.6-win32-bin.zip     MemCached服务端程序(for win) Memcached Manager             win下的Mem ...

  6. C++ Template之非类型模板参数

    非类型模板参数是通过基本变量类型引入,例如int,在使用时必须显式自定值,不能通过推断. 非类型模板参数的限制:不能是浮点数(在vc6.0上测试可以为浮点型),对象以及指向内部链接对象的指针. #in ...

  7. Linux 的多线程编程的高效开发经验

    http://www.ibm.com/developerworks/cn/linux/l-cn-mthreadps/ 背景 Linux 平台上的多线程程序开发相对应其他平台(比如 Windows)的多 ...

  8. Java NIO 与 基于reactor设计模式的事件处理模型

    Java NIO非堵塞应用通常适用用在I/O读写等方面,我们知道,系统运行的性能瓶颈通常在I/O读写,包括对端口和文件的操作上,过去,在打开一个I/O通道后,read()将一直等待在端口一边读取字节内 ...

  9. 使用 Microsoft Word 发布博客文章

    以 Microsoft Word 2010 为例: 依次选择:文件 -> 保存并发送 -> 发布为博客文章 配置说明:新建账户 的 博客文章 URL  一栏填写 http://rpc.cn ...

  10. 非阻塞式JavaScript脚本介绍

    JavaScript 倾向于阻塞浏览器某些处理过程,如HTTP 请求和界面刷新,这是开发者面临的最显著的性能问题.保持JavaScript文件短小,并限制HTTP请求的数量,只是创建反应迅速的网页应用 ...