当前位置: 首页 > article >正文

【大数据学习 | Spark】详解分区个数

RDD默认带有分区的,那么创建完毕rdd以后他的分区数量是多少?

从hdfs读取文件的方式是最正规的方式,我们通过计算原理可以推出blk的个数和分区数量是一致的,本地化计算。

我们可以发现数据的读取使用的是textInputFormat,读取的数据内容是文本。

实现InputFormat接口必须实现getSplits和getRecordReader两个方法。FireInputFormat接口继承了InputFormat接口,实现了文件的切分(getSplits方法),而TextInputFormat类与ORCInputFormat继承并实现了FireInputFormat接口。TextInputFormat类实现了getRecordReader方法,即读取器为LineRecordReader,即对文本数据一行一行读取

数据结构的实现由上图进行规划

FileInputFormat中对于文件的切分进行了分割,切分几个部分就可以实现分区的个数。

文件在hdfs存储的文件在spark中的使用是不同的。

存储的时候单位是block块 128M。

读取的时候是以spark为主,spark的读取大小叫做split切片。默认情况下,split-size = block-size。

千万要将存储和计算区分开。

分区的多少完全看切片是多少和hdfs的存储无关,但是如果切片大小和block的大小一致的话那么就可以实现本地化计算,即不需要从其他机器通过网络传输或拉取一些数据到本地的executor进行计算。

numSplits的个数可以由参数传入。

由读取的总的数据量totalSize / 期望分区的个数goalSize可以得到期望切片的大小。

计算规则:块的大小与期望切片的大小取最小值,但二者最小值不能小于配置的minSize。否则按照minSize大小进行切片划分分区。

以上是源码逻辑分析

计算规则演示如下:

代码演示如下:

#追加形式增大文件的大小
cat word.txt >> word1.txt 
cat word.txt >> word2.txt 

最终形成结果为上图

分区数量为4

然后继续增加文件

cat word.txt >> word3.txt 

结果如上图:

最终分区数量为5

在读取hdfs的文件的时候,一般文件都比较大,所以期望分区在不设定的时候默认值是2,切片大小肯定大于128M,那么以128M为主肯定切片和block的数量是一致的。

集合并行化

根据集群中的核数进行适配,启动的时候有几个核,产生分区数量就是几个。

因为在计算的过程中,我们是为了做测试,为了达到最大的性能,所以分区数量会自己适配。


http://www.kler.cn/a/402645.html

相关文章:

  • 《数据结构》学习系列——图(中)
  • 【LeetCode面试150】——202快乐数
  • 07-SpringCloud-Gateway新一代网关
  • PyQt学习笔记
  • UE5实现可销毁对象的淡化销毁
  • 【Linux驱动开发】irq中断配置API及中断应用 阻塞休眠和非阻塞的驱动操作
  • Three.js 相机控制器Controls
  • Akts初识1.0
  • PuppyGraph:实时图查询引擎,无需ETL
  • 基于Java Springboot城市公交运营管理系统
  • 关于上架HarmonyOS元服务,ArkWeb问题
  • 题解 洛谷 Luogu P2440 木材加工 二分答案 C/C++
  • 有效的完全平方数
  • webgl threejs 云渲染(服务器渲染、后端渲染)解决方案
  • 达梦数据库工程师认证培训体系是怎么样的?
  • 【linux学习指南】VSCode部署Ubantu云服务器,与Xshell进行本地通信文件编写
  • maven仓库
  • 大数据技术Kafka详解:消息队列(Messages Queue)
  • 类和对象(1) —— 类和对象的概念、类的实例化和初始化、构造方法和this关键词
  • 海外带云仓多语言商城源码,多语言多商家云仓一键代发商城
  • Python学习29天
  • Django项目 | 实现登录注册验证电子邮箱
  • LeetCode - #139 单词拆分
  • 如何用1分钟遍历一个100TB的文件?
  • 理解加密:常见算法及其应用
  • 二叉搜索数(二叉排序树、二叉查找树)-----详解