相关疑难解决方法(0)

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

输入数据:

  • 包含 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)中时,这是否也正确?

提前致谢!

hadoop hive apache-spark google-cloud-dataproc

6
推荐指数
1
解决办法
202
查看次数

从 Hive 表读取数据创建的 Spark DataFrame 的分区数

我对 Spark 数据帧分区数量有疑问。

如果我有 Hive 表(员工),其中包含列(姓名、年龄、ID、位置)。

CREATE TABLE employee (name String, age String, id Int) PARTITIONED BY (location String);

如果员工表有 10 个不同的位置。所以数据在HDFS中会被划分为10个分区。

如果我通过读取 Hive 表(员工)的全部数据来创建 Spark 数据框(df)。

Spark 将为一个数据帧(df)创建多少个分区?

df.rdd.partitions.size = ??

hive apache-spark-sql

5
推荐指数
1
解决办法
2243
查看次数