gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 18:09:56 27 4
gpt4 key购买 nike

输入数据:

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

  • 实验一:
  • 创建一个有 2 个 worker 的数据过程(每个 worker 4 个核心)
  • 运行 select count(*) from T;

  • 实验 1 结果:
  • 创建了 ~650 个任务来读取 hive 表文件
  • 每个任务读取 ~85MB 数据

  • 实验二:
  • 创建一个具有 64 个 worker 的数据过程(每个 worker 4 个核心)
  • 运行 select count(*) from T;

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

  • Q1:知道 spark 如何确定读取 hive 表数据文件的任务数吗?
    我通过将相同的数据放入 hdfs 来重复相同的实验,我得到了类似的结果。
    我的理解是读取hive表文件的任务数应该与hdfs中的块数相同。 Q2:正确吗? Q3:当数据在 gs 存储桶(而不是 hdfs)中时,这是否也正确?
    提前致谢!

    最佳答案

    一个阶段的任务数等于输入数据的分区数,这又由数据大小和相关配置决定( 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 .
    请参阅以下相关问题:

  • How are stages split into tasks in Spark?
  • How does Spark SQL decide the number of partitions it will use when loading data from a Hive table?
  • 关于apache-spark - spark(2.3或新版本)如何确定读取gsbucket或hdfs中hive表文件的任务数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64383140/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com