0

我正在蜂巢插入從具有錯誤:在谷歌數據PROC集羣

13783531 

記錄到另一個分區表沒有任何改造的表覆蓋谷歌dataproc羣集上查詢Java堆空間。 ,其失敗,錯誤

Diagnostic Messages for this Task: 
Error: Java heap space 

FAILED: Execution Error, return code 2 from 
org.apache.hadoop.hive.ql.exec.mr.MapRedTask 
MapReduce Jobs Launched: 
Stage-Stage-1: Map: 34 Cumulative CPU: 1416.18 sec HDFS Read: 6633737937 
HDFS Write: 0 FAIL 

集羣詳細

n1-standard-16 (16 vCPU, 60.0 GB memory) 

用5個工作節點。

錯誤在 之間變化Java堆空間和超出GC開銷限制。 我嘗試設置參數

set mapreduce.map.memory.mb=7698; 
set mapreduce.reduce.memory.mb=7689; 
set mapreduce.map.java.opts=-Xmx7186m; 
set mapreduce.reduce.java.opts=-Xmx7186m; 

仍然失敗。

+0

的可能的複製禁止 使用時,將記錄插入錯誤的分區[什麼是Hive:從org.apache.hadoop.hive.ql.exec.MapRedTask返回代碼2(http://stackoverflow.com/questions/11185528/what-is-hive-return-code-2-from-org- apache-hadoop-hive-ql-exec-mapredtask) –

+0

是你的木桌格式表格嗎? – hlagos

+0

@lake表格是 – Freeman

回答

0

所以問題是插入覆蓋試圖創建太多的小文件。 似乎我們有一個修復

set hive.optimize.sort.dynamic.partition=true; 

https://community.hortonworks.com/articles/89522/hive-insert-to-dynamic-partition-query-generating.html

有兩種方案可供他們兩人的工作

1. use set hive.optimize.sort.dynamic.partition=true; 

2. use DISTRIBUTE BY <PARTITION_COLUMN> 

任何一個會工作。 最好不要使用解決方案#1.Seems的JIRA說,與GROUP BY這就是爲什麼它被默認在最近的蜂巢 https://issues.apache.org/jira/browse/HIVE-8151

1

有您需要解決這裏幾件事情:

總JVM內存分配與JVM堆內存

總JVM內存分配是通過這些參數設置:

mapreduce.map.memory.mb 
mapreduce.reduce.memory.mb 

JVM堆內存通過以下參數設置:

mapreduce.map.java.opts 
mapreduce.reduce.java.opts 

您必須始終確保總內存>堆內存。 (注意,這個規則在您提供的參數值違反)

總對堆比

我們的一個供應商的建議,我們應該,在大多數情況下,始終使用的大約80%堆的總內存。即使有這個建議,你也會經常遇到各種內存錯誤。

錯誤:堆內存

可能需要增加總量和堆。

錯誤:PermGen的空間不夠

需要增加離堆內存,這意味着你可能能夠減少堆內存而不必增加的總內存。

錯誤:GC開銷超過限制

這指的是JVM允許垃圾收集的時間量。如果在很長一段時間內收到的空間太少,那麼它將會出錯。嘗試增加總內存和堆內存。

+0

我做了堆內存和JVM內存之間的所需更改,但看起來像這些更改沒有反映在DataProc羣集中,配置保持與設置簇。 有沒有什麼辦法可以通過在作業級別設置來更新配置? – Freeman

+0

這些配置將改變你的Hive內存配置。如果您使用** Tez **或其他類似的查詢引擎,那麼您必須參考該查詢引擎的文檔來確定您需要設置的參數。 – DrV