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. Linux Shell基础 环境变量

    环境变量 环境变量和用户自定义变量最主要的区别在于,环境变量是全局变量,而用户自定义变量是局部变量.用户自定义变量只在当前的 Shell 中生效,而环境变量会在当前 Shell 和这个 Shell 的 ...

  2. Shell编程之case条件

    一.case条件语句 1.语法 case "变量" in 值 1) 指令 1... ;; 值 2) 指令 2... ;; *) 指令 3... esac case条件语句的执行流程 ...

  3. PHP辅攻_[学习资料收集]PHP连接SQLServer2005方法

    PHP连接SQLServer2005 1.修改php.ini将extension=php_mssql.dll的注释删除保存. 修改php.in将mssql.secure_connection = Of ...

  4. 字符串处理sdut 2411

    题目:http://www.sdutacm.org/sdutoj/problem.php?action=showproblem&problemid=2411 关于字符串处理的题,此题坑点很多w ...

  5. JavaWeb基础

    1.Servlet: Servlet是JavaWeb的3大组件之一,是把url请求转为后台处理的具体类,此类必须实现Servlet接口,一把实际使用时无须我们实现,我们直接使用JavaEE的HTTPS ...

  6. 树的dfs序 && 系统栈 && c++ rope

    利用树的dfs序解决问题: 就是dfs的时候记录每个节点的进入时间和离开时间,这样一个完整的区间就是一颗完整的树,就转化成了区间维护的问题. 比如hdu3887 本质上是一个求子树和的问题 #incl ...

  7. MYSQL进阶学习笔记一:MySQL编码设定,会话变量和全局变量!(视频序号:进阶_1-3)

    知识点一:MySQL编码设定(1-2) 服务器编码设定: 查看MySQL服务器端的编码格式: SHOW VARIABLES LIKE ‘char%’; 设定编码格式: SET NAMES ‘utf8’ ...

  8. bzoj 1101 zap 莫比乌斯

    1101: [POI2007]Zap Time Limit: 10 Sec  Memory Limit: 162 MB Description FGD正在破解一段密码,他需要回答很多类似的问题:对于给 ...

  9. (转) Nova是如何统计OpenStack资源

    引言 运维的同事常常遇到这么四个问题: Nova 如何统计 OpenStack 计算资源? 为什么 free_ram_mb, free_disk_gb 有时会是负数? 即使 free_ram_mb, ...

  10. HTML DOM scrollTo()方法

    一. 作用 scrollTo()方法可把内容滚动到指定的坐标 二. 语法 scrollTo(x, y)   其中参数x为要在窗口文档显示区左上角显示的文档的x坐标, y为要在窗口文档显示区左上角显示的 ...