spark分区
spark默认的partition的分区数是和本机CPU的核数保持一致;
bucket的数量和reduce的数量一致;buket的概念是map会将计算获得数据放到各个buket中,每个bucket和一个reduce对应;bucket的数量其实就是和partition数量。而且是每个mapper都会写入partition数量的bucket
在spark中shuffle分为两个阶段,分别为shuffle write以及shuffle fetch(read),前者是指写入buket,后者是指将buket数据传输到reduce节点;
我觉得shuffle就是意味着(数据)需要跨节点重排;1000-》100个之所以不需要shuffle就是因为需要得资源变少了,其实节点内部合并即可而不像也要重新调度(分区的本质就是数据重新分配);但是100-》1000则可能会引发重新分区;比如当前机器只有10个核,已经全部占用,想要扩容之能是对数据进行重排,部分数据要分派到别的节点(扩容)中去,这个时候就会引发shuffle;
在Map-Reduce的重排是指从Map数据项reduce节点汇聚,其实就是引发了一次跨节点重排;在 spark里面的重分区,coalesce函数和reduce的貌似类似,其实有本质差别,都是减少,但是coales的减少默认是在节点内部(shuffle=false),自行消化,reduce的一般都是需要跨机器(极端情况map-reduce都是一台机器可以避免);但是coalesce可以是扩容,只要指定shuffle=true即可实现。但是,但凡是shuffle,一般都是比较耗费性能,因为需要数据重新排序,调度以及跨节点传输。
分区有规则,默认的规则是hash以及区间分区,hash分区是为了能够利用并发进而提高计算效率;区间分区是为了需要计算的数据在物理上部署在一起,避免计算数据分布,还需要跨节点/进程运算,区间分区后,可以达到提高计算效率的目的;
还有就是可以自定义分区,按照需要对数据进行分区,比如数据如果想要写入到HFile中,为保证同一个regionServer的数据可以写到一个hfile中,可以自定义个分区规则,就是根据rowkey区间来进行分区,这个和区间分区比较类似,但是因为rowKey是byte[],而且还要判断给定的rowKey所落在的分区编号,所以需要进行额外的处理。
Job包含Stage包含Task,在spark世界里面,task就是mapper;上面讲述的mapper写入bucket其实就是task将数据写入到对应的分区文件中(每个task都会有一套分区文件),值为:
task数量 * partition数量
因为分区文件太过于碎小,spark又推出了 Consalidate技术,用于把同核的同分区的文件进行合并,这样文件数量就见小为
cpu core数量 * 分区值
Hash Shuffle和Sorted Shuffle,前者比较合适中小数据规模,因为不需要排序,所以当下计算速度会非常快,但是这种排序方式在大量数据情况下,将会形成大量的小文件,导致I/O处理频发,成为计算处理平静;sorted shuffle生成文件比较少,在海量数据的情况比较适合。
但是spark分区是需要成本,这里需要权衡,如果数据只是计算一次,到底有多少重分区的意义,因为数据重新分桶也是需要性能损耗。所以对于spark的重分区,掌握两个原则:如果是想要享受同步进行的快感,采用hash分区;否则,就像一次性计算之类的就不要再进行重分区了。
spark分区的更多相关文章
- 【Spark 深入学习-08】说说Spark分区原理及优化方法
本节内容 ------------------ · Spark为什么要分区 · Spark分区原则及方法 · Spark分区案例 · 参考资料 ------------------ 一.Spark为什 ...
- Spark学习之路 (十七)Spark分区
一.分区的概念 分区是RDD内部并行计算的一个计算单元,RDD的数据集在逻辑上被划分为多个分片,每一个分片称为分区,分区的格式决定了并行计算的粒度,而每个分区的数值计算都是在一个任务中进行的,因此任务 ...
- Spark(十一)Spark分区
一.分区的概念 分区是RDD内部并行计算的一个计算单元,RDD的数据集在逻辑上被划分为多个分片,每一个分片称为分区,分区的格式决定了并行计算的粒度,而每个分区的数值计算都是在一个任务中进行的,因此任务 ...
- Spark学习之路 (十七)Spark分区[转]
分区的概念 分区是RDD内部并行计算的一个计算单元,RDD的数据集在逻辑上被划分为多个分片,每一个分片称为分区,分区的格式决定了并行计算的粒度,而每个分区的数值计算都是在一个任务中进行的,因此任务的个 ...
- Hive和Spark分区策略
1.概述 离线数据处理生态系统包含许多关键任务,最大限度的提高数据管道基础设施的稳定性和效率是至关重要的.这边博客将分享Hive和Spark分区的各种策略,以最大限度的提高数据工程生态系统的稳定性和效 ...
- Spark分区实例(teacher)
package URL1 import org.apache.spark.Partitioner import scala.collection.mutable class MyPartitioner ...
- 重要 | Spark分区并行度决定机制
最近经常有小伙伴在本公众号留言,核心问题都比较类似,就是虽然接触Spark有一段时间了,但是搞不明白一个问题,为什么我从HDFS上加载不同的文件时,打印的分区数不一样,并且好像spark.defaul ...
- Spark分区器浅析
分区器作用:决定该数据在哪个分区 概览: 仅仅只有pairRDD才可能持有分区器,普通RDD的分区器为None 在分区器为None时RDD分区一般继承至父RDD分区 初始RDD分区数: 由集合创建,R ...
- spark 分区
http://stackoverflow.com/questions/39368516/number-of-partitions-of-spark-dataframe
随机推荐
- PHP 获取真实IP地址
function getClientIp($type = 0) { $type = $type ? 1 : 0; static $ip = NULL; if ($ip !== NULL) return ...
- 通用Mapper(Mybatis)
1.Mapper的简单介绍 2.Mapper的作用 通用Mapper可以通过Mybatis的拦截器原理,动态的帮我们实现单表的增删改查功能,大大降低了我们的开发成本,减少了我们的工作量. 3.Mapp ...
- Excel下载打不开
1.问题描述:今天遇到个问题,对于定时发送邮件,前两天还正常,今天发现邮件能收到,但打不开,显示如下错误: 预览邮件显示: 点击Excel打开,显示如下: 2.问题解决方案 删除对于服务器上部分空间内 ...
- C#中的转义字符verbatim string
In a verbatim string (a string starting with @"") to escape double quotes you use double q ...
- cuffdiff problem--Performed 0 isoform-level transcription difference tests
如何解决cuffdiff运行结果中表达量为0的情况? cuffdiff -o cdiffout -b ref.fasta -u -p 15 --library-type fr-firststrand ...
- 【arc101】比赛记录
这场还好切出了D,rt应该能涨,然而这场的题有点毒瘤,700分的D没多少人切,更别说EF了.(暴打出题人)既然这样,干脆就水一篇博客,做个简单的比赛记录. C - Candles 这题是一道一眼题,花 ...
- Mirantis OpenStack 7.0: NFVI Deployment Guide — NUMA/CPU pinning
https://www.mirantis.com/blog/mirantis-openstack-7-0-nfvi-deployment-guide-numacpu-pinning/ Compute ...
- review37
线程的常用方法 1.start() 线程调用该方法将启动线程,使之从新建状态进入就绪队列排队. 2.run() 3.sleep() 4.isAlive() 线程处于新建状态时,线程调用isAlive( ...
- 按键(ESC ,F1,F2等)——wpf的命令处理方法
WPF窗体的命令绑定 方法一:使用代码 <WpfUI:View.CommandBindings> <CommandBinding Command="Help" ...
- 如果看看机器ip和域名ip
1.如果查看一个机器IP ifconfig或hostname -i //linux ipconfig //windows 2.查看一个域名对应ip ping www.baidu.com 下面会显示域名 ...