spark(2.3或新版本)如何确定读取gs bucket或hdfs中的配置单元表文件的任务数



输入数据:

  • 包含35个文件的配置单元表(T((每个约1.5GB,SequenceFile(
  • 文件在gs存储桶中
  • 默认fs.gs.block.size=~128MB
  • 所有其他参数都是默认值

实验1:

  • 创建一个包含2个工作线程的数据进程(每个工作线程4个核心(
  • 从T开始运行选择计数(*(

实验1结果:

  • ~650个为读取配置单元表文件而创建的任务
  • 每个任务读取~85MB数据

实验2:

  • 创建一个包含64个工作线程的数据进程(每个工作线程4个核心(
  • 从T开始运行选择计数(*(

实验2结果:

  • ~24480个为读取配置单元表文件而创建的任务
  • 每个任务读取~2.5MB数据(在我看来,一个任务读取2.5MB数据不是一个好主意,因为打开文件的时间可能比读取2.5MB的时间长。(

Q1:知道spark是如何确定读取配置单元表数据文件的任务数的吗我把同样的数据放在hdfs中,重复了同样的实验,得到了类似的结果。

我的理解是,读取配置单元表文件的任务数量应该与hdfs中的块数量相同Q2:对吗Q3:当数据在gs桶(而不是hdfs(中时,这也是正确的吗

提前感谢!

一个阶段中的任务数等于输入数据的分区数,而分区数又由数据大小和相关配置(dfs.blocksize(HDFS(、fs.gs.block.size(GCS(、mapreduce.input.fileinputformat.split.minsizemapreduce.input.fileinputformat.split.maxsize(决定。对于涉及多个阶段的复杂查询,它是所有阶段的任务数的总和。

HDFS和GCS之间没有区别,只是它们对块大小使用了不同的配置,dfs.blocksizefs.gs.block.size

请参阅以下相关问题:

  • 如何在Spark中将阶段划分为任务
  • Spark SQL如何决定从配置单元表加载数据时将使用的分区数

最新更新