shuffle

Spark-SQL 面试准备 2

馋奶兔 提交于 2020-01-21 01:51:30
Spark Knowledge NO.2 11.RDD缓存: Spark可以使用 persist 和 cache 方法将任意 RDD 缓存到内存、磁盘文件系统中。缓存是容错的,如果一个 RDD 分片丢失,可以通过构建它的 transformation自动重构。被缓存的 RDD 被使用的时,存取速度会被大大加速。一般的executor内存60%做 cache, 剩下的40%做task。 Spark中,RDD类可以使用cache() 和 persist() 方法来缓存。cache()是persist()的特例,将该RDD缓存到内存中。而persist可以指定一个StorageLevel。StorageLevel的列表可以在StorageLevel 伴生单例对象中找到。 Spark的不同StorageLevel ,目的满足内存使用和CPU效率权衡上的不同需求。我们建议通过以下的步骤来进行选择: 如果你的RDDs可以很好的与默认的存储级别(MEMORY_ONLY)契合,就不需要做任何修改了。这已经是CPU使用效率最高的选项,它使得RDDs的操作尽可能的快。 如果不行,试着使用MEMORY_ONLY_SER并且选择一个快速序列化的库使得对象在有比较高的空间使用率的情况下,依然可以较快被访问。 尽可能不要存储到硬盘上,除非计算数据集的函数,计算量特别大,或者它们过滤了大量的数据。否则

spark数据倾斜

 ̄綄美尐妖づ 提交于 2020-01-19 15:28:37
大数据(spark)八个点解决数据倾斜 一:什么是数据倾斜? 于spark/hadoop 这样的分布式大数据系统来讲,数据量大并不可怕,可怕的是数据倾斜。 对于分布式系统而言,理想情况下,随着系统规模(节点数量)的增加,应用整体耗时线性下降。如果一台机器处理一批大量数据需要120分钟,当机器数量增加到3台时,理想的耗时为120 / 3 = 40分钟。但是,想做到分布式情况下每台机器执行时间是单机时的1 / N,就必须保证每台机器的任务量相等。不幸的是,很多时候,任务的分配是不均匀的,甚至不均匀到大部分任务被分配到个别机器上,其它大部分机器所分配的任务量只占总得的小部分。比如一台机器负责处理 80% 的任务,另外两台机器各处理 10% 的任务。 『不患多而患不均』,这是分布式环境下最大的问题。意味着计算能力不是线性扩展的,而是存在短板效应: 一个 Stage 所耗费的时间,是由最慢的那个 Task 决定。 由于同一个 Stage 内的所有 task 执行相同的计算,在排除不同计算节点计算能力差异的前提下,不同 task 之间耗时的差异主要由该 task 所处理的数据量决定。所以,要想发挥分布式系统并行计算的优势,就必须解决数据倾斜问题。 二、数据倾斜的现象 当发现如下现象时,十有八九是发生数据倾斜了: 绝大多数 task 执行得都非常快,但个别 task 执行极慢

Spark优化总结(三)——调参

纵然是瞬间 提交于 2020-01-19 04:30:14
文章目录 Spark优化总结(三)——调参 前言 简单示例 常用参数 JVM调参 Spark优化总结(三)——调参 前言 不要期待修改一个参数能够像魔法一样立马得到神奇的好效果!(某些时候效果确实很棒^_^)你应当把参数看作一道菜中的调味品,能够丰富味道,但主要还是得靠原材料的质量与炒菜的技艺。 开发Spark应用时,应当先优化好你的应用代码,再来思考调参优化(必要的参数的除外)。 调参是一个比较复杂的主题,不同的环境、不同的代码都会导致同样的参数产生不同的效果。建议尽量在确定您的生产环境情况后、在优化好存在明显问题的代码后,再做调参测试。 下面会列出开发中常用的部分参数,并加以解释,以作参考 简单示例 一个Spark任务提交示例 spark-submit \ --queue test_queue --master yarn --deploy-mode cluster \ --num-executors 10 --executor-memory 8G --executor-cores 4 \ --driver-memory 4G --driver-cores 2 \ --conf spark.network.timeout = 300 \ --conf spark.locality.wait = 9s \ --class com.skey.spark.app.MyApp /home

spark shuffle

六月ゝ 毕业季﹏ 提交于 2020-01-18 14:17:15
Spark Shuffle 1. Shuffle相关 当Map 的输出结果要被Reduce使用时,输出结果需要按key哈希,并且分发到每一个Reducer上去,这个过程就是shuffle。由于shuffle涉及到了磁盘的读写和网络的传输,因此shuffle性能的高低直接影响到了整个程序的运行效率。概念上shuffle就是一个沟通数据连接(map和reduce)的桥梁。每个ReduceTask从每个Map Task产生数的据中读取一片数据,极限情况下可能触发M*R个数据拷贝通道(M是MapTask数目,R是Reduce Task数目)。 在Spark1.1 之前,其shuffle只存在一种模式,即hash base。在Spark1.1版本之后加入了sort base。Spark1.1默认采用的shuffle模式还是hash base。在Spark1.2中,sort base将作为默认模式。当然,你可以通过shuffle manager进行配置。 2. Spark shuffle流程 · 首先每一个Mapper 会根据Reducer的数量创建出相应的bucket,bucket的数量是M×R,其中M是Map的个数,R是Reduce的个数。 · 其次Mapper 产生的结果会根据设置的partition算法填充到每个bucket中去。这里的partition算法是可以自定义的

Hadoop MapReduce Shuffle 详解

孤街醉人 提交于 2020-01-17 17:04:49
一、什么是Shuffle机制 在MapReduce中,shuffle更像是洗牌的逆过程,指的是将map端的无规则输出按指定的规则“打乱”成具有一定规则的数据,以便reduce端接收处理。其在MapReduce中所处的工作阶段是 map输出后到reduce接收前 ,具体可以分为map端和reduce端前后两个部分。在shuffle之前,也就是在map阶段,MapReduce会对要处理的数据进行分片(split)操作,为每一个分片分配一个MapTask任务。接下来 map()函数会对每一个分片中的每一行数据进行处理得到键值对(key,value),其中key为偏移量,value为一行的内容 。此时得到的键值对又叫做“中间结果”。此后便进入shuffle阶段,由此可以看出shuffle阶段的作用是处理“中间结果”,Shuffle机制是整个MapReduce框架中最核心的部分。 二、Shuffle的执行阶段流程 上图是官方对Shuffle过程的描述,通过图片我们可以大致的了解到Shuffle的工作流程。Shuffle并不是Hadoop的一个组件,只是map阶段产生数据输出到reduce阶段取得数据作为输入之前的一个过程。 所以Shuffle阶段应该分为map之后( map的shuffle阶段 )以及 reduce之前( reduce的shuffle阶段 ),如下图所示: 1

Trying to shuffle to generate a random number from an array and splice, but keep getting undefined for the last element that's left in the array

折月煮酒 提交于 2020-01-17 14:02:31
问题 Here, I can generate random numbers that do not repeat. Below is the code for the same. <body> <div id="bingo"> <script> let numbers = new Set() .add("B1") .add("B2") .add("B3") .add("B4") .add("B5") .add("B6") .add("B7") .add("B8") .add("B9") .add("B10"); let called = Array.from(numbers); let display = new Array(); function getRandomNum() { function rando() { for (let i = called.length - 1; i > 0; i++) { const j = Math.floor(Math.random() * called.length); const number = called[i]; called[i]

Trying to shuffle to generate a random number from an array and splice, but keep getting undefined for the last element that's left in the array

南笙酒味 提交于 2020-01-17 14:02:11
问题 Here, I can generate random numbers that do not repeat. Below is the code for the same. <body> <div id="bingo"> <script> let numbers = new Set() .add("B1") .add("B2") .add("B3") .add("B4") .add("B5") .add("B6") .add("B7") .add("B8") .add("B9") .add("B10"); let called = Array.from(numbers); let display = new Array(); function getRandomNum() { function rando() { for (let i = called.length - 1; i > 0; i++) { const j = Math.floor(Math.random() * called.length); const number = called[i]; called[i]

Trying to shuffle to generate a random number from an array and splice, but keep getting undefined for the last element that's left in the array

百般思念 提交于 2020-01-17 14:02:02
问题 Here, I can generate random numbers that do not repeat. Below is the code for the same. <body> <div id="bingo"> <script> let numbers = new Set() .add("B1") .add("B2") .add("B3") .add("B4") .add("B5") .add("B6") .add("B7") .add("B8") .add("B9") .add("B10"); let called = Array.from(numbers); let display = new Array(); function getRandomNum() { function rando() { for (let i = called.length - 1; i > 0; i++) { const j = Math.floor(Math.random() * called.length); const number = called[i]; called[i]

Shuffle generic array in C

半城伤御伤魂 提交于 2020-01-16 05:06:09
问题 I have an array of pointer to a struct. I tried to use the first answer of this question to try to solve this problem, but I got a seg fault: Shuffle array in C After try this code, I tryed to use this function to do the shuffling: static void shuffle(void *array, size_t n, size_t size) { void * aux; aux = malloc (size); if (n > 1) { size_t i; for (i = 0; i < n - 1; ++i) { size_t j = i + rand() / (RAND_MAX / (n - i) + 1); memcpy(aux, array[j], size); memcpy(array[j], array[i], size); memcpy

MR的shuffle和Spark的shuffle之间的区别

核能气质少年 提交于 2020-01-16 05:04:00
mr的shuffle mapShuffle 数据存到hdfs中是以块进行存储的,每一个块对应一个分片,maptask就是从分片中获取数据的 在某个节点上启动了map Task,map Task读取是通过k-v来读取的,读取的数据会放到环形缓存区,这样做的目的是为了防止IO的访问次数,然后环形缓存区的内存达到一定的阀值的 时候会把文件益写到磁盘,溢出的各种小文件会合并成一个大文件,这个合并的过程中会进行排序,这个排序叫做归并排序 map阶段会涉及到 1.sort排序(默认按字典排序) 2.合并(combiner合并) 3.文件合并(merage 合并 总共有三种,默认是内存到磁盘) 4.压缩(设置压缩就会执行) reduce Shuffle 归并排序完成后reduce端会拉取map端的数据,拉取的这个过程叫做copy过程,拉取的数据合并成一个文件,GroupComparator(默认,这个我们也可以自定义)是专门对文件夹里面的key进行分组 然后就形成k-List(v1,v2,v3)的形式,然后reduce经过业务处理,最终输出到hdfs,如果设置压缩就会执行,不设置则不执行 reduce阶段会涉及到: 1.sort排序 2.分组(将相同的key的value放到一个容器的过程) 3.merge文件合并 4.压缩 spark shuffle的版本一 1