我已经在aws emr 4.8
群集上运行了一些hive脚本,其中hive 1.0和tez 0.8。
我的配置如下所示:
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.
在谷歌搜索此错误时,我读到集合tez.task.resource.memory.mb
将改变物理内存限制,但显然我错了。我错过了什么?
答案 0 :(得分: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 configuration和Tez memory tuning
注意:使用Ambari
设置为MB答案 1 :(得分:1)
我经常遇到这个问题。不断变化的
Set hive.tez.container.size=6656;
Set hive.tez.java.opts=-Xmx4g;
不能为我解决问题,但是可以做到:
set tez.am.resource.memory.mb=4096;
答案 2 :(得分:1)
如果其他任何人在尝试解决以上问题时偶然发现此线程,则这里有一个对我有用的真实解决方案的链接,而其他所有解决方案都没有。
http://moi.vonos.net/bigdata/hive-cli-memory/
TL; DR将它们添加到您的配置单元调用cat_id
中
desired <- tribble(
~product_name, ~position_1, ~position_2, ~pr,
"A", 1, 4, "X",
"B", NA, NA, NA,
"C", 3, 5, "Y",
"D", NA, 6, "Z",
)
答案 3 :(得分:0)
Set hive.tez.container.size=6656
Set hive.tez.java.opts=-Xmx4g