我正在使用hdinsight群集(hive版本.13)来运行一些配置单元查询。其中一个查询(来自TPCH诉讼的查询7)在映射加入期间启动本地任务因内存不足而失败(由于哈希表已达到配置的限制,因此hive中止它)。
Hive似乎正在为本地任务分配1GB,从这里获取这个大小,我该如何增加它呢?
2015-05-03 05:38:19 Starting to launch local task to process map join; maximum memory = 932184064
我假设本地任务应该使用映射器的相同堆大小,但似乎并非如此。任何帮助表示赞赏。
答案 0 :(得分:0)
This property controls it :
yarn.app.mapreduce.am.command-opts
This is the Application Manager jvm opts. Since local task runs on AM.
Can you also try this property :
set hive.mapjoin.localtask.max.memory.usage = 0.999;
答案 1 :(得分:0)
您可以使用HADOOP_HEAPSIZE=512
或HADOOP_CLIENT_OPTS=-Xmx512m
,可以从hadoop-env.sh
进行调整。
但请注意,这可能会导致某些工作出现意外行为,您可能需要使用
mapreduce.map.memory.mb
和mapreduce.map.java.opts
以及
mapreduce.reduce.memory.mb
配置文件中的 mapreduce.reduce.java.opts
和mapred-site
,以确保作业保持稳定。
答案 2 :(得分:0)
这个帖子已经很晚了..但只是面对同样问题的其他人。
文档确实声明本地(子)JVM的大小与map(https://cwiki.apache.org/confluence/display/Hive/MapJoinOptimization)的大小相同,但似乎并非如此。相反,JVM大小由hive-env.sh中的HADOOP_HEAPSIZE
设置控制。因此,对于Shradha的原始帖子,我怀疑HADOOP_HEAPSIZE
设置为1GB。