首页 > 其他分享 >RDD如何分区,各种模式下的分区数目是怎样的?

RDD如何分区,各种模式下的分区数目是怎样的?

时间:2023-01-11 16:01:59浏览次数:53  
标签:自定义 分区 Partitioner RDD Key Spark 数目


在分布式程序中,网络通信的开销是很大的,因此控制数据分布以获得最少的网络传输开销可以极大地提升整体性能.​​Spark​​程序可以通过控制RDD分区方式来减少通信开销。Spark中所有的RDD都可以进行分区,系统会根据一个针对键的函数对元素进行分区。虽然Spark不能控制每个键具体划分到哪个节点上,但是可以确保相同的键出现在同一个分区上。RDD的分区原则是分区的个数尽量等于集群中的CPU核心(Core)数目。对于不同的Spark部署模式而言,都可以通过设置spark.default.prallien这个参数值来配置默认的分区数目。一般而言,各种模式下的默认分区数目如下。

  (1) Local模式:默认为本地机器的CPU数目,若设置了loca[N],则默认为N。

  (2) Standalone或者Yarn模式:在“集群中所有CPU核数总和”和“2”这两者中取较大值作为默认值。

  (3) Mesos 模式:默认的分区数是8。

RDD如何分区,各种模式下的分区数目是怎样的?_spark

  Spark框架为RDD提供了两种分区方式,分别是哈希分区(HashPartitioner)和范围分区(RangePartitioner)。其中,哈希分区是根据哈希值进行分区;范围分区是将一定范围的数据映射到一个分区中。这两种分区方式已经可以满足大多数应用场景的需求。与此同时,Spark也支持自定义分区方式,即通过一个自定义的Partitioner对象来控制RDD的分区,从而进一步减少通信开销。 需要注意的是,RDD的分区函数是针对(Key, Value)类型的RDD,分区函数根据Key对RDD元素进行分区。因此,当需要对一些非(Key,Value)类型的RDD进行自定义分区时,需要先把RDD元素转换为(Key,Value)类型,再通过分区函数进行分区操作。

  如果想要实现自定义分区,就需要定义一个类,使得这个自定义的类继承org. apache.spark. Partitioner类,并实现其中的3个方法,具体如下。

  (1) def numPartitions:Int:用于返回创建的分区个数。

  (2) def getPartition(Key:Any):用于对输人的Key做处理,并返回该Key的分区ID,分区ID的范围是0~ numPartitions 1。

  (3) equals (other: Any):用于Spark判断自定义的Partitioner对象和其他的Partitioner 对象是否相同,从而判断两个RDD的分区方式是否相同。其中,equals()方法中的参数other表示其他的Partitioner 对象,该方法的返回值是一个Boolean类型,当返回值为true时表示自定义的Pritioer对象和其他Pritioer对象相同,则两个RDD的分区方式也是相同的;反之,自定义的Pritoner对象和其他Prtitioer对象不相同,则两个RDD的分区方式也不相同。


配套资料链接:https://pan.baidu.com/s/1VZBDzDrcQWsb69muIdiLmg 提取码:r5q4 


标签:自定义,分区,Partitioner,RDD,Key,Spark,数目
From: https://blog.51cto.com/u_8238263/6002320

相关文章

  • Hive删除分区名称中含有特殊字符
    先说方案:通过showpartitions和hdfsurl看到的都不是真正的分区名称,都是经过URI重新编码的,访问这些分区应该使用分区名称的原始字符串。场景描述当我们在SQL语句中使用变......
  • 管理(划分)分区
    管理工具列出块设备lsblk显示UUID和文件系统lsblk-f[root@rocky8~]#lsblkNAMEMAJ:MINRMSIZEROTYPEMOUNTPOINTsda8:00200G0d......
  • 磁盘分区方式
    分区可以把服务器上的数据做物理上的隔离MBR分区MasterBootRecord主引导记录一个分区的最大容量为2T,硬盘不能超过2T最多有四个分区:情况1:四个主分区情况2:三个主......
  • 2022 CISCN西北赛区分区赛
    MagicProxyssrf重定向绕过<?phpheader("Location:http://127.0.0.1:8080/admin?command=curl%20-F%20file=@/flag.txt%20http%3A%2F%2F82.157.174.226%3A8888");exit;......
  • MTK分区说明
    @目录简介前言什么是RAM和ROM运行内存RAM手机存储ROM分区对应文件及作用分区的大小分配ckImgSize.logckSysDrv.log分配空间简介MTK分区说明前言对于MTK项目,刚开始领到......
  • SQL Server【提高】分区表
    分区表分区视图分区表可以从物理上将一个大表分成几个小表,但是从逻辑上来看,还是一个大表。什么时候需要分区表数据库中某个表中的数据很多。数据是分段的分区......
  • linux磁盘分区之后,lsblk没有显示
     可以看出 fdisk创建一个sda4的分区 并保存退出,但是不管是使用fdisk-l,还是lsblk都无法显示出来,那么导致问题的原因,主要是因为新创建了分区之后,系统没有......
  • MySQL使用分区快速归档数据
    对于我们中的许多人来说,空间限制一直是一个无尽而痛苦的过程,特别是在具有大量事务和几天内数据增长就能超过百GB的系统中。在这篇文章中,我将分享一个解决方案,无论表的大小......
  • Centos7下非lvm的分区扩容(重要)
    前言:一般在生产环境中,如果需要使用一个分区保存大量的文件,建议的做法是在虚拟化环境中增加一块单独的硬盘,挂载一个单独的分区,比如/data上图我们可以看到sdb整块硬盘 ......
  • Centos7最常见磁盘分区(工作实践)
    首选用到最常见的第一个命令:df-h由上面可以总结如下:我的Linux系统现在有两块硬盘  sda 和sdbsda硬盘有两个分区  sda1 sda2  sda2主要有centos-root......