spark(2.3或新版本)如何确定读取gsbucket或hdfs中hive表文件的任务数?

dyk*_*ykw 6 hadoop hive apache-spark google-cloud-dataproc

输入数据:

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

实验一:

  • 创建一个有 2 个工人的 dataproc(每个工人 4 个核心)
  • 运行 select count(*) from T;

实验一结果:

  • 创建了约 650 个任务来读取 hive 表文件
  • 每个任务读取 ~85MB 数据

实验二:

  • 创建一个具有 64 个工人的数据过程(每个工人 4 个核心)
  • 运行 select count(*) from T;

实验二结果:

  • 创建了大约 24,480 个任务来读取 hive 表文件
  • 每个任务读取 ~2.5MB 数据(在我看来,1 个任务读取 2.5MB 数据不是一个好主意,因为打开文件的时间可能比读取 2.5MB 的时间长。)

Q1:知道 spark 如何确定读取 hive 表数据文件的任务数吗? 我通过将相同的数据放入 hdfs 来重复相同的实验,我得到了类似的结果。

我的理解是读取hive表文件的任务数应该与hdfs中的块数相同。Q2:正确吗? Q3:当数据在 gs 存储桶(而不是 hdfs)中时,这是否也正确?

提前致谢!

Dag*_*ang 0

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

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

请参阅以下相关问题: