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
随机推荐
- Linux基本命令 网络命令
概述 网络和监控命令类似于这些: hostname, ping, ifconfig, iwconfig, netstat, nslookup, traceroute, finger, telnet, ...
- 大数据架构之:Kafka
Kafka 是一个高吞吐.分布式.基于发布订阅的消息系统,利用Kafka技术可在廉价PC Server上搭建起大规模消息系统.Kafka具有消息持久化.高吞吐.分布式.多客户端支持.实时等特性,适用于 ...
- python对象类型----数字&字符串
一数据类型: float: 1.3e-3 1.3*10的负三次方 print (1.3e-3) bin() #转换为二进进制 oct() #转换为8进制 hex()#转 ...
- [Android]动态加载/热部署框架汇总
1.DroidPlugin 用途:动态加载 使用案例:360手机助手 GitHub地址:https://github.com/Qihoo360/DroidPlugin ppt介绍:https://gi ...
- different between web api and web service
https://stackoverflow.com/questions/19336347/what-is-the-difference-between-a-web-api-and-a-web-ser ...
- Luogu-3966 [TJOI2013]单词
这道题应该是后缀数组的套路题啊,把单词连接起来,中间用没有出现过且互不相同的字符来分隔开,求一下\(height\)数组. 对于一个单词来说,设单词长\(len\),所在的后缀为\(i\),如果某后缀 ...
- 整体二分learning
整体二分是一个离线的做法 目前可以解决求区间第k大问题 当然划分树主席树都可以的样子.. 为什么我老学一些解决同种问题的算法.. 主要思想大概是这样的: 如果要求[l,r]的区间第K大 而这个区间内 ...
- pandas通过字典生成dataframe
1.将一个字典输入: 该字典必须满足:value是一个list类型的元素,且每一个key对应的value长度都相同: (以该字典的key为columns) >>> import pa ...
- 安装rackspace private cloud --4 配置Target hosts
在每个target host上执行以下操作: Naming target hosts. Install the operating system. Generate and set up securi ...
- WPF各种控件详解——(WPF从我炫系列)
http://blog.csdn.net/zx13525079024/article/details/5694638