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分区的更多相关文章

  1. 【Spark 深入学习-08】说说Spark分区原理及优化方法

    本节内容 ------------------ · Spark为什么要分区 · Spark分区原则及方法 · Spark分区案例 · 参考资料 ------------------ 一.Spark为什 ...

  2. Spark学习之路 (十七)Spark分区

    一.分区的概念 分区是RDD内部并行计算的一个计算单元,RDD的数据集在逻辑上被划分为多个分片,每一个分片称为分区,分区的格式决定了并行计算的粒度,而每个分区的数值计算都是在一个任务中进行的,因此任务 ...

  3. Spark(十一)Spark分区

    一.分区的概念 分区是RDD内部并行计算的一个计算单元,RDD的数据集在逻辑上被划分为多个分片,每一个分片称为分区,分区的格式决定了并行计算的粒度,而每个分区的数值计算都是在一个任务中进行的,因此任务 ...

  4. Spark学习之路 (十七)Spark分区[转]

    分区的概念 分区是RDD内部并行计算的一个计算单元,RDD的数据集在逻辑上被划分为多个分片,每一个分片称为分区,分区的格式决定了并行计算的粒度,而每个分区的数值计算都是在一个任务中进行的,因此任务的个 ...

  5. Hive和Spark分区策略

    1.概述 离线数据处理生态系统包含许多关键任务,最大限度的提高数据管道基础设施的稳定性和效率是至关重要的.这边博客将分享Hive和Spark分区的各种策略,以最大限度的提高数据工程生态系统的稳定性和效 ...

  6. Spark分区实例(teacher)

    package URL1 import org.apache.spark.Partitioner import scala.collection.mutable class MyPartitioner ...

  7. 重要 | Spark分区并行度决定机制

    最近经常有小伙伴在本公众号留言,核心问题都比较类似,就是虽然接触Spark有一段时间了,但是搞不明白一个问题,为什么我从HDFS上加载不同的文件时,打印的分区数不一样,并且好像spark.defaul ...

  8. Spark分区器浅析

    分区器作用:决定该数据在哪个分区 概览: 仅仅只有pairRDD才可能持有分区器,普通RDD的分区器为None 在分区器为None时RDD分区一般继承至父RDD分区 初始RDD分区数: 由集合创建,R ...

  9. spark 分区

    http://stackoverflow.com/questions/39368516/number-of-partitions-of-spark-dataframe

随机推荐

  1. [原创]spring及springmvc精简版--继承数据源,声明式事物

    1.前期:导入c3p0 jar包,相关数据库连接jar包,我用的是mysql 2.关注事物管理器的配置和AOP配置 代码: 核心关注bean配置文件 application.xml <?xml ...

  2. 对matrix,dataframe的操作函数

    1.每行(列)的平均值:rowMeans() ; colMeans() 输入:数值型矩阵:数值型数据框 输出:向量 2.每行(列)的总和:rowSums() ;colSums() 输入:数值型矩阵,数 ...

  3. iOS_mapKit与Core Location

    目 录: 一.使用MKMap控件 二.根据地址定位 三.在地图上添加锚点   iOS从3.0版本开始提供了MapKit.frameword支持.该框架提供了一个可被嵌入到应用程序中的地图视图类MKMa ...

  4. [算法]在单链表和双链表中删除倒数第k个结点

    题目: 分别实现两个函数,一个可以删除单链表中倒数第K个节点,另一个可以删除双链表中倒数第K个节点. 要求: 如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1). 解答: 让链表从头 ...

  5. FreeBSD 安装过程

    FreeBSD安装步骤: 回车 按默认回车 输入服务器的计算机名 去掉games,加上src安装如下图 Lib32 ports src这三项一定要安装上 回车 选择Manual 进入以后点create ...

  6. GDKOI2017游记

    去年的GDKOI在寒假(虽然我没参加),但由于一些机♂缘♂巧♂合♂,比赛时间变成了开学之后的第一周,于是直接导致了当我的同学们在认真学习的同时,我在广州无所事事地和同学谈♂笑♂风♂生♂.(太好了,可以 ...

  7. centos7安装MPlyaer

    最近更换了centos7系统,对新系统的操作不是太熟悉.大神轻喷.昨晚突然想要下个电影看看,结果发现系统自带的播放器支持的视频格式有限,google查了一下,他们推荐使用MPlayer.于是经过一通g ...

  8. Flume-NG启动过程源码分析(三)(原创)

    上一篇文章分析了Flume如何加载配置文件的,动态加载也只是重复运行getConfiguration(). 本篇分析加载配置文件后各个组件是如何运行的? 加载完配置文件订阅者Application类会 ...

  9. SPOJ375 QTREE - Query on a tree

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  10. numpy nonzero与isnan

    nonzero 直接看例子: In [83]: x = np.array([[1,0,0], [0,2,0], [1,1,0]]) In [84]: x.shape Out[84]: (3L, 3L) ...