(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. CoffeeRobotTeam项目组报告

    一.小组分工 模块 任务 责任人 备注 报告 需求分析 熊振威 功能分析 熊振威 项目报告 熊振威 人机界面 秦勤.洪超 单元测试 姜进.张文强 机器人代码 机器人类 徐意.余拥军.孙智博 机器人运动 ...

  2. android listview和button,ImageButton等有事件的控件的总结

    public ImageButton(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defSty ...

  3. sudo su 提示没有配置JDK environment

    sudo su 提示没有配置JDK environment 最近工作遇到一问题,我通过SecureCRT远程登录服务器,部署web应用.将变更文件替换后,我需要切换到root用户,重启Tomcat.所 ...

  4. 在mac下使用brew和brew cask轻松实现软件安装

    Brew(homebrew) 1.简介 Brew 是 Mac 下面的包管理工具,通过 Github 托管适合 Mac 的编译配置以及 Patch,可以方便的安装开发工具. Mac 自带ruby 所以安 ...

  5. 《JavaScript高级程序设计》第4章 变量、作用域和内存问题

    4.1 基本类型和引用类型 5种基本类型:Undefined.Null.Boolean.Number和String,这5种基本类型是按值访问的,因为可以操作保存在变量中的实际的值. 引用类型:可能由多 ...

  6. hibernate--联合主键(了解+,掌握-)

    如果一个表有多个主键(= =一般比较少) 8.4. 组件作为联合标识符(Components as composite identifiers) 先定义一个类OrderLineId (实现接口,imp ...

  7. Codeforces Round #274 (Div. 2)

    A http://codeforces.com/contest/479/problem/A 枚举情况 #include<cstdio> #include<algorithm> ...

  8. C++实现CString和string的互相转换

    CString->std::string 例子: CString strMfc=“test“; std::string strStl; strStl=strMfc.GetBuffer(0); u ...

  9. 响应式嵌入 iframe Pym.js

    Pym.js 可以让你在嵌入 iframe 的时候可自动的对 iframe 的大小进行调整以适应父一层容器,并且可以避免跨域问题. 支持浏览器: Internet Explorer 9, 10 (Wi ...

  10. CSL概述(翻译总结自TI官方文档)

    一.简单介绍 CSL是函数,宏和符号常数的集合,用来控制和配置片上外设.(Chip Support Library) 每一个外设都有自己对应的CSL模块.每个模块有自己的支持符,来表示对于给定的设备, ...