wordcount数据流过程解析

时间:2022-09-02 18:31:47

(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数据流过程解析

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中&commat;Service工作过程解析

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

随机推荐

  1. Kafka文件的存储机制

    Kafka文件的存储机制 同一个topic下有多个不同的partition,每个partition为一个目录,partition命名的规则是topic的名称加上一个序号,序号从0开始. 每一个part ...

  2. 每天一个小算法(Shell Sort3)

    希尔算法自己编了一个,循环很多,很不美观,不过运行正确: c语言实现: #include <stdio.h> #include <stdlib.h> #define LEN 2 ...

  3. Java设计模式13:常用设计模式之桥接模式(结构型模式)

    1. Java之桥接模式(Bridge Pattern) (1)概述: 首先我们说一个生活中的例子:       就拿汽车在路上行驶的来说.即有小汽车又有公共汽车,它们都不但能在市区中的公路上行驶,也 ...

  4. 为xampp 安装pear db &lpar;database&rpar; 模块

    pear channel-update pear.php.netpear install db

  5. &period;net判断System&period;Data&period;DataRow中是否包含某列

    大家对将DataRow转成实体对象并不陌生,转成实体的时候一般都会加上这个判断  if (row["字段名"] != null && row["字段名&q ...

  6. &period;NET使用HttpWebRequest发送手机验证码

    namespace SendSMS { class Program { static void Main(string[] args) { string phone = "13770504x ...

  7. AppBoxFuture&lpar;五&rpar;&colon; 分布式文件存储-Store Everything

      本来本篇是想介绍前端组件化开发用户界面,发现框架还未实现文件存储,原本计划是后续设计开发的,索性把计划提前,所以本篇将介绍基于Raft实现分布式的文件存储引擎. 一. 实现思路   既然是分布式存 ...

  8. Consul内部分享ppt

    Consul 是一个支持多数据中心,分布式,高可用的服务发现和配置共享系统.由 HashiCorp 公司使用 Go 语言开发,基于Raft协议.部署起来非常容易,只需要极少的可执行程序和配置文件,具有 ...

  9. java 静态代理总结

    首先:定义一个抽象类或借口 例: package JingTai; public interface JingTai1 { public void show(); } 接着:定义一个被代理的类,他需要 ...

  10. &lbrack;整理&rsqb;IE11中的WebGL探秘:渲染速度超Chrome

    http://www.csdn.net/article/2013-12-19/2817854-IE11-WebGL-and-more 摘要:IE11开始支持WebGL,并且效果非常好,IE11的Web ...