关于输入拆分长度的Tez容器大小估计

问题描述

所以-当Tez选择要运行的映射器数量时,它将查看可以并行运行的容器的数量(可用插槽),波动系数,数据的机架位置,FileInputFormat最大拆分大小,Tez最大分组大小,条带可能会分裂,要提取的列的未压缩总数据大小等-它不会查看tez容器的大小。

因此,对映射器数量的计算会导致每个映射器输入狭缝长度字节-可以估算(在运行作业之前)。

但是-如何估算处理该输入拆分所需的总容器大小(内存)?

我了解所需的内存取决于

  1. 输入拆分长度原始数据(字节)
  2. 压缩(百分比?)
  3. 将应用于记录的任何UDF(可能忽略不计)
  4. 向量化(如果使用)(布尔值)
  5. 需要时加入地图(布尔值)
  6. 根据需要排序(布尔值)
  7. 写入磁盘之前使用的缓冲区(百分比?)

但是-如何根据输入的分割字节来估计容器的大小,或者容器中所需的堆空间?

一种方法是在运行一次后查看映射器任务的已提交堆字节。

但是,是否有任何公式可以根据上述因素或任何其他因素从INPUT_SPLIT_LENGTH_BYTES估计COMMITTED_HEAP_BYTES?

解决方法

我认为每个映射器的输入拆分长度不会直接影响Tez容器的大小。这只是意味着拆分将由一个映射器处理,但这并不意味着整个拆分将立即加载到内存中。因此,分割长度可能比运行映射器的Tez容器大小大得多。

作为一般准则,

将Tez容器大小设置为相同或较小的倍数 (1或2倍)YARN容器大小yarn.scheduler.minimum-allocation-mb 但决不超过yarn.scheduler.maximum-allocation-mb。你想拥有 可以旋转多个容器的净空。

在此doc中查看更多详细信息。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...