Spark知识点补充

原创 2016年08月30日 19:27:48

1.shuffle操作

Shuffle是MapReduce框架中的一个特定的phase,介于Map phase和Reduce phase之间,当Map的输出结果要被Reduce使用时,输出结果需要按key哈希,并且分发到每一个Reducer上去,这个过程就是shuffle。由于shuffle涉及到了磁盘的读写和网络的传输,因此shuffle性能的高低直接影响到了整个程序的运行效率。

2.SPARK 阔依赖 和窄依赖 transfer action lazy策略之间的关系

宽依赖 和窄依赖   说明该操作是 是否有shuffler 操作   成长(lineage )的来源    

最有趣的部分是DAGScheduler。下面详解它的工作过程。RDD的数据结构里很重要的一个域是对父RDD的依赖。如图3所示,有两类依赖:窄(Narrow)依赖和宽(Wide)依赖。

窄依赖指父RDD的每一个分区最多被一个子RDD的分区所用,表现为一个父RDD的分区对应于一个子RDD的分区,和两个父RDD的分区对应于一个子RDD 的分区。图3中,map/filter和union属于第一类,对输入进行协同划分(co-partitioned)的join属于第二类。

宽依赖指子RDD的分区依赖于父RDD的所有分区,这是因为shuffle类操作,如图3中的groupByKey和未经协同划分的join。

窄依赖对优化很有利。逻辑上,每个RDD的算子都是一个fork/join(此join非上文的join算子,而是指同步多个并行任务的barrier): 把计算fork到每个分区,算完后join,然后fork/join下一个RDD的算子。如果直接翻译到物理实现,是很不经济的:一是每一个RDD(即使 是中间结果)都需要物化到内存或存储中,费时费空间;二是join作为全局的barrier,是很昂贵的,会被最慢的那个节点拖死。如果子RDD的分区到 父RDD的分区是窄依赖,就可以实施经典的fusion优化,把两个fork/join合为一个;如果连续的变换算子序列都是窄依赖,就可以把很多个 fork/join并为一个,不但减少了大量的全局barrier,而且无需物化很多中间结果RDD,这将极大地提升性能。Spark把这个叫做流水线 (pipeline)优化 

transfer  action    设计来源是    lazy evaluation  另外 scala 空间和rrd 空间的限制 

这里有两个设计要点。首先是lazy evaluation。熟悉编译的都知道,编译器能看到的scope越大,优化的机会就越多。Spark虽然没有编译,但调度器实际上对DAG做了线性复 杂度的优化。尤其是当Spark上面有多种计算范式混合时,调度器可以打破不同范式代码的边界进行全局调度和优化。下面的例子中把Shark的SQL代码 和Spark的机器学习代码混在了一起。各部分代码翻译到底层RDD后,融合成一个大的DAG,这样可以获得更多的全局优化机会。 

另一个要点是一旦行动算子产生原生数据,就必须退出RDD空间。因为目前Spark只能够跟踪RDD的计算,原生数据的计算对它来说是不可见的(除非以后 Spark会提供原生数据类型操作的重载、wrapper或implicit conversion)。这部分不可见的代码可能引入前后RDD之间的依赖,如下面的代码: 

 这里容易受到mr 模型的理解限制,直观上以为要shuffer 了就一定要执行,但实际是只有 action 方法 (要输出到rdd 以外的域(输出不是rdd) ,和要不要shuffer,要不要reduce没有关系,这里ACTION 的方法的reduce 和MR reduce 不是同一个东西   )才会导致提交作业并执行。

这里写图片描述

stage划分示意图


Hadoop job task




参考:http://www.myexception.cn/internet/1755297.html



Spark重点难点知识总结(一)

Master和Woker(相当于总经理和小组组长) Master:在基于standalone模式的Spark集群中,Cluster Manger就是Master,Master负责分配资源。Worke...
  • shuhaojie
  • shuhaojie
  • 2017年07月14日 16:33
  • 357

Spark重点难点知识总结(二)

一.Tuple2讲解 1.何谓Tuple? Tuple就是用来把几个数据放在一起的比较方便的方式,注意是“几个数据”,因此没有Tuple1这一说。 2.怎么用Tuple? val scores=Ar...
  • shuhaojie
  • shuhaojie
  • 2017年07月03日 16:12
  • 332

Spark学习笔记--Spark基础知识

1、RDD表示分布在多个计算节点上的可以并行操作的元素集合,是spark主要的变成抽象。 Spark Streaming 是 Spark 提供的对实时数据进行流式计算的组件 Spark是一个用于集...
  • a1628864705
  • a1628864705
  • 2016年09月08日 22:57
  • 1928

Java基础知识总结-补充

出自:http://blog.csdn.net/huxiaoyonglan1/article/details/50242113 Java基础知识总结-补充 写代码: ...
  • lzhat
  • lzhat
  • 2017年02月11日 16:09
  • 664

java的小知识点

1,java.lang.NumberFormatException 把一个"null"的字符串转换为INTEGER 当然会出错(之所以出的不是空指针是因为你这个NULL是个字符串。 2.简单判断一个字...
  • wxwzy738
  • wxwzy738
  • 2012年07月03日 00:53
  • 1692

Spark知识点整理

While stage codegen
  • wankunde
  • wankunde
  • 2016年11月07日 17:51
  • 684

[完]Spark 基础知识

为了使程序运行更快,Spark提供了内存计算,减少了迭代计算时的IO开销;为了使编程更容易,Spark使用简练、优雅的Scala语言编写,基于Scala提供了交互式编程体验。与Hadoop相比,Spa...
  • namelessml
  • namelessml
  • 2016年09月19日 10:49
  • 1373

知识点补充

1. 项目架构总结,分析 2. spring生命周期, interceptor和filter的区别 3. Jvm 生命周期,原理 4. Nio 5.Sentinal...
  • hanruikai
  • hanruikai
  • 2016年08月05日 10:32
  • 570

Spark知识点

数据处理模型 通常来讲,针对数据处理有几种常见模型,包括:Iterative Algorithms,Relational Queries,MapReduce,Stream Processing。例如H...
  • liyong1115
  • liyong1115
  • 2015年04月11日 14:10
  • 343

Spark统计唯一值、缺失值和单值的算子(scala实现)

采用传统的Spark SQL编写sql语句循环多次按列查询来实现效率太低,如是采用基本的WordCount统计单词的思想,“columnName+value”即“列名:值”作为唯一单词,用特殊分隔符隔...
  • ZhouyuanLinli
  • ZhouyuanLinli
  • 2017年06月01日 20:22
  • 946
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spark知识点补充
举报原因:
原因补充:

(最多只允许输入30个字)