当前位置: 首页 > 知识库问答 >
问题:

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

岳京
2023-03-14

输入数据:

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

实验 1:

  • 创建一个具有2个工作线程的dataproc(每个工作线程4个核心)
  • 从T运行选择计数(*)

实验1结果:

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

实验2:

    < li >创建一个有64个工作线程的dataproc(每个工作线程4个内核) < li >运行select count(*)from T;

实验二结果:

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

问题1:你知道spark如何决定读取配置单元表数据文件的任务数吗?我将相同的数据放入hdfs中,重复了相同的实验,得到了类似的结果。

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

提前谢谢!

共有1个答案

司寇光华
2023-03-14

一个阶段的任务数量等于输入数据的分区数量,而输入数据又由数据大小和相关配置(dfs 块大小 (HDFS)、块大小 (GCS)、映射还原输入、输入输入、拆分大小、映射还原、输入输入、拆分大小“决定。对于涉及多个阶段的复杂查询,它是所有阶段的任务数之和。

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

参见以下相关问题:

  • 如何在 Spark 中将阶段拆分为任务?
  • Spark SQL 如何决定从 Hive 表加载数据时将使用的分区数?
 类似资料:
  • 我有一个大的(>500M行)CSV文件。这个CSV文件中的每一行都包含一个位于HDFS上的二进制文件的路径。我想使用Spark读取这些文件中的每一个,处理它们,并将结果写到另一个CSV文件或表中。 在驱动程序中执行此操作非常简单,下面的代码完成了这项工作 但是失败 是否可以让执行者直接访问HDFS文件或HDFS文件系统?或者,是否有一种有效的方法来读取HDFS/S3上数百万个二进制文件并用Spar

  • 使用火花流读取和处理来自Kafka的消息并写入HDFS-Hive。由于我希望避免创建许多垃圾文件系统的小文件,我想知道是否有办法确保最小的文件大小,和/或强制在文件中输出行数最少的能力,超时除外。谢谢。

  • 我是HDFS和Hive的新手。在阅读了一些书籍和文档之后,我得到了这两个方面的一些介绍。我有一个关于在HIVE中创建一个表的问题,该表的文件存在于HDFS中。我有这个文件在HDFS中有300个字段。我想在HDFS中创建一个访问该文件的表。但我想利用这个文件中的30个字段。我的问题是1。配置单元是否创建单独的文件目录?2.我必须先创建配置单元表,然后从HDFS导入数据吗?3.既然我想创建一个300列

  • 假设我有一个256 KB的文件存储在HDFS文件系统中的一个节点(作为两个块,每个块128 KB)。该文件内部包含两个块,每个块128 KB。假设我有两个节点集群,每个节点只有1个核心。我的理解是,转换过程中的spark将读取内存中一个节点上的完整文件,然后将一个文件块内存数据传输到另一个节点,以便两个节点/核心可以并行执行它?那是正确的吗? 如果两个节点都有两个核心,而不是一个核心呢?在这种情况

  • 我有一个具有以下目录结构的S3位置,其顶部创建了一个配置单元表: 假设我有一个Spark程序,它使用下面的代码行将数据跨多个分区写入上面的表位置: spark在写入S3位置时是否锁定数据文件? 我们如何使用Spark作为ETL工具来处理这样的并发情况?

  • 我想通过配置单元jdbc连接将整个配置单元表加载到spark内存中。并且已经添加了配置单元站点。xml,hdfs站点。xml在我的项目中。spark已连接配置单元,因为已成功获取列名(例如role_id)。但是spark似乎将列名作为数据加载,并抛出异常。这是我的密码: 和获取错误: JAVAlang.NumberFormatException:对于输入字符串:“t_leave_map_base.