【问题标题】:Tez container size estimation with respect to input split length相对于输入分割长度的 Tez 容器大小估计
【发布时间】:2021-01-11 12:01:51
【问题描述】:

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

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

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

我了解所需的内存取决于

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

但是 - 我如何根据输入拆分字节来估计容器大小或更确切地说容器内所需的堆空间?

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

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

【问题讨论】:

    标签: hadoop hive hadoop-yarn google-cloud-dataproc apache-tez


    【解决方案1】:

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

    作为一般准则,

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

    doc 中查看更多详细信息。

    【讨论】:

    • 我们有 104GB 的节点。 Yarn 可以分配 1GB 到 80GB 的容器。所以跨度很大。通常,条带 tez.grouping.max-size 的 tez 分组大小为 1GB。此外,如果表的平均文件大小约为 1GB,则拆分策略 BI 或 ETL 在 2GB 容器上都将失败(使用上述规则)。我注意到 1GB 的拆分会导致映射器上大约 4 到 5 GB 的提交堆字节。这就是我所追求的,基于我在问题中提到的因素或任何其他因素的计算。
    猜你喜欢
    • 2013-06-24
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 2022-11-05
    • 2018-02-12
    • 1970-01-01
    • 2017-05-20
    • 2023-03-16
    相关资源
    最近更新 更多