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

embedded/2024/11/21 19:18:25/

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.ppmy.cn/embedded/139407.html

相关文章

【C#】C#编程基础:探索控制台应用与数据操作

文章目录 前言:1. 控制台项目的使用2. 数值隐式类型转换与强制类型转换2.1 隐式类型转换2.2 数值强制转换2.3 字符串强制转换2.4 万能转换器 3. 字符串与数组3.1 字符串处理方法3.2 数组的创建与遍历3.3 字符串与数组之间的使用方法 4. 引用类型与值类型5. 常量cons…

实验室管理自动化:Spring Boot技术的应用

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理实验室管理系统的相关信息成为必然。开发合…

[js] 0.1+0.2

0.10.2≠0.3?? 无可避免的浮点误差 【前端面试】为什么 0.1 0.2 不等于 0.3 计算机是通过二进制的方式存储数据的,所以计算机计算 0.1 0.2 的时候,实际上是计算的两个数的二进制的和。0.1 的二进制是0.0001100110011001100…(1100 循环&…

springboot嗨玩旅游网站

摘 要 嗨玩旅游网站是一个专为旅行爱好者打造的在线平台。我们提供丰富多样的旅游目的地信息,包括景点信息、旅游线路、商品信息、社区信息、活动推广等,帮助用户轻松规划行程。嗨玩旅游网站致力于为用户提供便捷、实用的旅行服务,让每一次旅…

UniApp在Vue3下使用setup语法糖创建和使用自定义组件

UniApp在Vue3下使用setup语法糖创建和使用自定义组件 在现代前端开发中&#xff0c;Vue 3 的 <script setup> 语法糖极大地简化了组件的编写和使用。本文将详细介绍如何在 UniApp 中使用 Vue 3 的 <script setup> 语法创建自定义组件&#xff0c;并在其他组件中使…

在CentOS 7上配置Nginx的TCP端口转发

在现代网络环境中,TCP端口转发是一项非常重要的功能,它允许你将网络流量从一个端口或地址转发到另一个端口或地址。Nginx作为一个高性能的HTTP和反向代理服务器,同时也支持TCP/UDP流量的转发,这得益于其内置的stream模块。本文将详细介绍如何在CentOS 7上安装Nginx,并配置…

攻防世界-mfw

进入题目以后可以点击三个网页&#xff0c;这三个网页其中有一个提示我们git、php、Bootstrap。可以联想到是git泄露 在url后面的参数改为.git 存在git漏洞&#xff0c;这时候就可以利用python的githacker库下载泄漏的文件 查看index.php的源代码 <?phpif (isset($_GET[pa…

uniapp开发微信小程序笔记4-自定义组件

前言&#xff1a;本文重点记录的是uniapp如何封装一个自定义组件&#xff0c;以swiper组件为例。 一、创建组件目录 官方文档中的easycom组件规范中可以看到这样一句话&#xff1a; 只要组件安装在项目的components目录下或uni_modules目录下&#xff0c;并符合components/组…