shuffle

spark梳理

强颜欢笑 提交于 2020-02-13 01:47:14
​大数据组件,离线用过hadoop,实时用过spark。 Hadoop现在比较稳定了,面试主要就是问Spark。 包括我工作这么多年,都没搞清过底层到底是怎么运行的,但是有些东西 懂的人一说就通了,优化起来也会有思路。 我下面给spark梳理一下。做个基本概要,方便面试。 一、spark运行原理: 1.提交spark任务,构建spark application运行环境,启动sparkContext。 2.sparkContext向资源管理器(可以使Standalone,Mesos,Yarn)申请运行Executor资源,并启动StandaloneExecutorbackend(后台监控程序)。 注: a.每个节点可以起一个或多个Executor。 3.Executor向SparkContext申请Task。 注: a.每个Executor由若干core组成,每个Executor的每个core一次只能执行一个Task。 b.每个Task执行的结果就是生产了目标RDD的一个partition。 c.这里的core是虚拟机的core而不是机器的物理CPU核,可以理解为就是Executor的一个工作线程。 d.Task被执行并发度(并发度不等于task数量)=Executor数目*每个Executor核数(=core总个数) e.partition数目在map阶段保持不变

第 6 章 Spark 内存管理

北城余情 提交于 2020-02-12 21:17:41
上篇: 第 5 章 Spark Shuffle解析 Spark 内存管理 在执行Spark 的应用程序时,Spark 集群会启动 Driver 和 Executor 两种 JVM 进程,前者为主控进程,负责创建 Spark 上下文,提交 Spark 作业(Job),并将作业转化为计算任务(Task),在各个 Executor 进程间协调任务的调度,后者负责在工作节点上执行具体的计算任务,并将结果返回给 Driver,同时为需要持久化的 RDD 提供存储功能。由于 Driver 的内存管理相对来说较为简单,本节主要对 Executor 的内存管理进行分析,下文中的 Spark 内存均特指 Executor 的内存。 1、堆内和堆外内存规划 作为一个 JVM 进程, Executor 的内存管理建立在 JVM 的内存管理之上,Spark 对 JVM 的堆内(On-heap)空间进行了更为详细的分配,以充分利用内存。同时,Spark 引入了堆外(Off-heap)内存,使之可以直接在工作节点的系统内存中开辟空间,进一步优化了内存的使用 。 堆内内存受到JVM统一管理,堆外内存是直接向操作系统进行内存的申请和释放。 堆内内存 堆内内存的大小,由 Spark 应用程序启动时的 –executor-memory 或 spark.executor.memory 参数配置。Executor

关于JavaScript的数组随机排序

烈酒焚心 提交于 2020-02-12 05:37:26
昨天了解了一下Fisher–Yates shuffle费雪耶兹随机置乱算法,现在再来看看下面这个曾经网上常见的一个写法: function shuffle(arr) { arr.sort(function () { return Math.random() - 0.5; }); } 或者使用更简洁的 ES6 的写法: function shuffle(arr) { arr.sort(() => Math.random() - 0.5); } 但是这种写法是有问题的,它并不能真正地随机打乱数组。 问题 看下面的代码,我们生成一个长度为 10 的数组['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'],使用上面的方法将数组乱序,执行多次后,会发现每个元素仍然有很大机率在它原来的位置附近出现。 let n = 10000; let count = (new Array(10)).fill(0); for (let i = 0; i < n; i ++) { let arr = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']; arr.sort(() => Math.random() - 0.5); count[arr.indexOf('a')]++; } console.log

spark shuffle细则及调优

谁都会走 提交于 2020-02-11 20:50:55
什么是Spark Shuffle • 问题:每一个key对应的value不一定都是在一个partition中,也不太可能在同一个节点上,因为RDD是分布式 的弹性的数据集,他的partition极有可能分布在各个节点上。 • 如何聚合? – Shuffle Write:上一个stage的每个map task就必须保证将自己处理的当前分区中的数据相同的key写入一 个分区文件中,可能会写入多个不同的分区文件中 – Shuffle Read:reduce task就会从上一个stage的所有task所在的机器上寻找属于自己的那些分区文件,这样就可以保证 每一个key所对应的value都会汇聚到同一个节点上去处理和聚合 三种shuffle方式 原始的方式:Hash-Based Shuffle 上图中Shuffle过程可能会产生的问题? – 小文件过多,耗时低效的IO操作 – OOM,缓存过多 优化后的HashShuffleManager 一个core内的task共用buffer SortShuffle运行原理 – 普通运行机制 – bypass运行机制 bypass运行机制的触发条件如下: shuffle reduce task数量小于spark.shuffle.sort.bypassMergeThreshold参数的值。 shuffle调优 1:sparkconf.set("spark

spark面试总结2

最后都变了- 提交于 2020-02-08 05:57:29
Spark core面试篇02 1.cache后面能不能接其他算子,它是不是action操作? 答:cache可以接其他算子,但是接了算子之后,起不到缓存应有的效果,因为会重新触发cache。 cache不是action操作 2.reduceByKey是不是action? 答:不是,很多人都会以为是action,reduce rdd是action 3.数据本地性是在哪个环节确定的? 具体的task运行在那他机器上,dag划分stage的时候确定的 4.RDD的弹性表现在哪几点? 1)自动的进行内存和磁盘的存储切换; 2)基于Lingage的高效容错; 3)task如果失败会自动进行特定次数的重试; 4)stage如果失败会自动进行特定次数的重试,而且只会计算失败的分片; 5)checkpoint和persist,数据计算之后持久化缓存 6)数据调度弹性,DAG TASK调度和资源无关 7)数据分片的高度弹性,a.分片很多碎片可以合并成大的,b.par 5.常规的容错方式有哪几种类型? 1).数据检查点,会发生拷贝,浪费资源 2).记录数据的更新,每次更新都会记录下来,比较复杂且比较消耗性能 6.RDD通过Linage(记录数据更新)的方式为何很高效? 1)lazy记录了数据的来源,RDD是不可变的,且是lazy级别的,且rDD 之间构成了链条,lazy是弹性的基石。由于RDD不可变

Spark核心概念

倖福魔咒の 提交于 2020-02-08 03:21:23
1、Application 基于spark的用户程序,包含了一个Driver Program以及集群上中多个executor; spark中只要有一个sparkcontext就是一个application ; 启动一个spark-shell也是一个application,因为在启动shark-shell时就内置了一个sc(SparkContext的实例); 2、Driver Program 运行Application的main()函数并且创建SparkContext的程序 。通常用SparkContext代表Driver Program; 3、Cluster Manager 在集群上获取资源的外部服务 。如:standalone、yarn、mesos;   各种不同的集群的区别:只是任务调度的粗细粒度不同,对学习spark没有影响,自己在学习时使用standalone即可; 4、Worker Node 集群中任何一个可以运行Application代码的节点 ; 可以在Worker Node启动Executor进程; 5、Executor 在Worker Node上为某Application启动一个 进程 ,该进程负责运行任务,并且负责将数据存在硬盘或者内存中; 每个Application都有各自独立的executors ; 比如:应用A在一个Node上启动Executor

How does Polkadot's VRF achieve randomness to shuffle validators?

只谈情不闲聊 提交于 2020-02-06 06:38:45
问题 Contrary to Ethereum which uses RANDAO (possibly enhanced with VDF), in Polkadot, a verifiable random function (VRF) is used to shuffle validators and select potential block proposers for certain slots. Where does the randomness come from, i.e. how does the randomness work specifically? 回答1: A verifiable random function is a function that, in pseudocode, can be expressed like so: (RESULT, PROOF) = VRF(SECRET, INPUT) That is, for some secret and some input (which can be public), the result is

Spark-Shuffle

天涯浪子 提交于 2020-02-05 13:48:01
Spark-Shuffle理解 对spark任务划分阶段,遇到宽依赖会断开,所以在stage 与 stage 之间会产生shuffle,大多数Spark作业的性能主要就是消耗在了shuffle环节,因为该环节包含了大量的磁盘IO、序列化、网络数据传输等操作。 负责shuffle过程的执行、计算和处理的组件主要就是ShuffleManager,也即shuffle管理器。而随着Spark的版本的发展,ShuffleManager也在不断迭代。 ShuffleManager 大概有两个: HashShuffleManager 和 SortShuffleManager。 历史: 在spark 1.2以前,默认的shuffle计算引擎是HashShuffleManager; 在spark 1.2以后的版本中,默认的ShuffleManager改成了SortShuffleManager; 在spark 2.0以后,抛弃了 HashShuffleManager。 HashShuffleManager 假设:每个Executor只有1个CPU core,也就是说,无论这个Executor上分配多少个task线程,同一时间都只能执行一个task线程。 上游 stage 有 2个 Executor,每个Executor 有 2 个 task。 下游 stage 有 3个task。 shuffle

SparkShuffle 及性能调优

霸气de小男生 提交于 2020-02-05 02:15:16
shuffle调优 调优概述   大多数Spark作业的性能主要就是消耗在了shuffle环节,因为该环节包含了大量的磁盘IO、序列化、网络数据传输等操作。因此,如果要让作业的性能更上一层楼,就有必要对shuffle过程进行调优。但是也必须提醒大家的是,影响一个Spark作业性能的因素,主要还是代码开发、资源参数以及数据倾斜,shuffle调优只能在整个Spark的性能调优中占到一小部分而已。因此大家务必把握住调优的基本原则,千万不要舍本逐末。下面我们就给大家详细讲解shuffle的原理,以及相关参数的说明,同时给出各个参数的调优建议。 ShuffleManager发展概述   在Spark的源码中,负责shuffle过程的执行、计算和处理的组件主要就是ShuffleManager,也即shuffle管理器。而随着Spark的版本的发展,ShuffleManager也在不断迭代,变得越来越先进。 在Spark 1.2以前,默认的shuffle计算引擎是HashShuffleManager。该ShuffleManager而HashShuffleManager有着一个非常严重的弊端,就是会产生大量的中间磁盘文件,进而由大量的磁盘IO操作影响了性能。 因此在Spark 1.2以后的版本中,默认的ShuffleManager改成了SortShuffleManager

Hadoop-MapReduce(Shuffle机制)

陌路散爱 提交于 2020-02-04 10:17:06
内容较多分开来写,这样吸收起来也好些,附有练习可学习,下面Shuffle补充 文章目录 1、Shuffle机制 1)Combiner合并 1、Shuffle机制 1)Combiner合并 <b,1> <b,1>==<b,2> (1)combiner是MR程序中Mapper和Reducer之外的一种组件。 (2)combiner组件的父类就是Reducer。 (3)combiner和reducer的区别在于运行的位置: Combiner是在每一个maptask所在的节点运行; Reducer是接收全局所有Mapper的输出结果; (4)combiner的意义就是对每一个maptask的输出进行局部汇总,以减小网络传输量。 (5)combiner能够应用的前提是不能影响最终的业务逻辑,而且,combiner的输出kv应该跟reducer的输入kv类型要对应起来。 Mapper Maptask1: 3 5 7 ->(3+5+7)/3=5 Maptask2: 2 6 ->(2+6)/2=4 Reducer (3+5+7+2+6)/5=23/5 不等于 (5+4)/2=9/2 (6)自定义Combiner实现步骤: a)自定义一个combiner继承Reducer,重写reduce方法。 public class WordcountCombiner extends Reducer <