{eval=Array;=+count(Array);}

问答专栏Q & A COLUMN

hadoop任务,给定数据量和处理逻辑(Sql、UDF等),如何预估计算时间与资源?有没有实际案例?

silenceboysilenceboy 回答0 收藏1
收藏问题

1条回答

fireflow

fireflow

回答于2022-06-28 15:02

首先明确下定义:计算时间是指计算机实际执行的时间,不是人等待的时间,因为等待时间依赖于有多少资源可以调度。

首先我们不考虑资源问题,讨论时间的预估。执行时间依赖于执行引擎是 Spark 还是 MapReduce。


Spark 任务

Spark 任务的总执行时间可以看 Spark UI,以下图为例

Spark 任务是分多个 Physical Stage 执行的,每个stage下有很多个task,task 的时间也有大致的预估,如下图

Task 个数依赖于 Hive 表的文件数,每个task的执行时间依赖于 UDF是怎么实现的,需要具体问题具体分析。

MapReduce 任务

MapReduce 任务的执行时间,也需要参考 hadoop web ui

整体执行时间 = map_time * map_number + reduce_time * reduce_number;

map 个数一般情况下是 hive 表的分区数;

map 执行时间取决于 每个分区里的数据量 和 udf 的逻辑;


不管是 Spark 还是 MapReduce,计算时间都依赖于:

  1. 数据源分区数
  2. 每个分区里的文件数
  3. 每个文件的大小
  4. udf 逻辑
  5. sql 逻辑(group by、filter、distinct count)

实际场景下资源是有限的,我们也不关心计算时间,反而是更关心一个数据集需要多久能处理完,比如一个1T的Hive表大概需要几个小时跑完MapReduce。这时候我们需要做实验,观察一个分区大概需要多久跑完,数据有没有 skew,从经验上给出一个合理的时间,进而保证任务交付。

评论0 赞同0
  •  加载中...

最新活动

您已邀请0人回答 查看邀请

我的邀请列表

  • 擅长该话题
  • 回答过该话题
  • 我关注的人
向帮助了您的网友说句感谢的话吧!
付费偷看金额在0.1-10元之间
<