【问题标题】:How do I increase Tez's container physical memory?如何增加 Tez 的容器物理内存?
【发布时间】:2016-10-26 01:45:54
【问题描述】:

我一直在使用 hive 1.0 和 tez 0.8 的 aws emr 4.8 集群上运行一些 hive 脚本。

我的配置如下所示:

SET hive.exec.compress.output=true;
SET mapred.output.compression.type=BLOCK;
SET hive.exec.dynamic.partition = true;
SET hive.exec.dynamic.partition.mode = nonstrict;
set hive.execution.engine=tez;
set hive.merge.mapfiles=false;
SET hive.default.fileformat=Orc;
set tez.task.resource.memory.mb=5000;
SET hive.tez.container.size=6656;
SET hive.tez.java.opts=-Xmx5120m;
set hive.optimize.ppd=true;

我的全局配置是:

hadoop-env.export   HADOOP_HEAPSIZE 4750
hadoop-env.export   HADOOP_DATANODE_HEAPSIZE    4750
hive-env.export HADOOP_HEAPSIZE 4750

在运行我的脚本时,我收到以下错误:

Container [pid=19027,containerID=container_1477393351192_0007_02_000001] is running beyond physical memory limits. Current usage: 1.0 GB of 1 GB physical memory used; 1.9 GB of 5 GB virtual memory used. Killing container.

在谷歌上搜索这个错误时,我读到 set tez.task.resource.memory.mb 会改变物理内存限制,但显然我错了。我错过了什么?

【问题讨论】:

    标签: hadoop hive amazon-emr apache-tez tez


    【解决方案1】:

    我经常遇到这个问题。变化中的

    Set hive.tez.container.size=6656;
    Set hive.tez.java.opts=-Xmx4g;
    

    没有解决我的问题,但这确实:

    set tez.am.resource.memory.mb=4096;
    

    【讨论】:

    • tez.am.resource.memory.mb=4096; 是我的解决方案。在我的情况下,应用程序主 (am) 的内存太少,因此调度时作业失败。
    【解决方案2】:

    将 Tez 容器大小设置为 YARN 容器大小 (4GB) 的更大倍数:

    SET hive.tez.container.size=4096MB
    

    “hive.tez.container.size”和“hive.tez.java.opts”是改变 Hive 中 Tez 内存设置的参数。如果“hive.tez.container.size”设置为“-1”(默认值),它会选择“mapreduce.map.memory.mb”的值。如果未指定“hive.tez.java.opts”,则它依赖于“mapreduce.map.java.opts”设置。因此,如果将 Tez 特定的内存设置保留为默认值,则内存大小将从 mapreduce 映射器内存设置“mapreduce.map.memory.mb”中选取。

    https://documentation.altiscale.com/memory-settings-for-tez

    更多信息Tez configurationTez memory tuning

    注意:使用 Ambari 以 MB 为单位设置

    【讨论】:

    • 是否有原因 SET hive.tez.container.size=6656;不行吗?
    • 另外,查询返回非零代码:1,原因:'SET hive.tez.container.size=6656MB' FAILED 因为 hive.tez.container.size 需要 INT 类型值。
    • 所以我已经在我的配置中设置了容器大小以及 tez.java.opts。尽管如此,我的物理内存是1G。 altiscale 页面正是我找到这些的地方,但对我不起作用。 ://
    • 此命令是否适用于 hadoop conf?还是仅仅为了蜂巢?例如,这应该有效吗(设置 mapreduce.reduce.memory.mb = 4096)?
    【解决方案3】:

    如果其他人偶然发现此线程试图解决上述问题,这里有一个链接到一个真正的解决方案,它对我有用,而所有其他解决方案都没有。

    http://moi.vonos.net/bigdata/hive-cli-memory/

    TL;DR 将这些添加到您的蜂巢呼叫 --hiveconf tez.am.resource.memory.mb=<size as int> --hiveconf tez.am.launch.cmd-opts=""

    【讨论】:

      【解决方案4】:
      Set hive.tez.container.size=6656
      Set hive.tez.java.opts=-Xmx4g
      

      【讨论】:

      • 那么它与 SET hive.tez.container.size=6656; 有何不同; SET hive.tez.java.opts=-Xmx5120m;
      • 语句末尾没有分号。我在 container.size 中遇到了类似的失败“...需要 INT 类型值”。我删除了语句末尾的分号,失败就消失了。但我不知道为什么该修复有效。
      • 此命令是否适用于 hadoop conf?还是仅仅为了蜂巢?例如,这应该有效吗(设置 mapreduce.reduce.memory.mb = 4096)?
      猜你喜欢
      • 2020-08-10
      • 2018-05-21
      • 1970-01-01
      • 2020-02-03
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-17
      相关资源
      最近更新 更多