簡體   English   中英

HIVE:插入查詢失敗,錯誤為“java.lang.OutOfMemoryError:超出 GC 開銷限制”

[英]HIVE : Insert Query Fails with error "java.lang.OutOfMemoryError: GC overhead limit exceeded"

我的 Hive 插入查詢失敗,出現以下錯誤:java.lang.OutOfMemoryError:超出 GC 開銷限制

table2 中的數據 = 1.7tb 查詢:

set hive.exec.dynamic.partition.mode= nonstrict;set hive.exec.dynamic.partition=true;set mapreduce.map.memory.mb=15000;set mapreduce.map.java.opts=-Xmx9000m;set mapreduce.reduce.memory.mb=15000;set mapreduce.reduce.java.opts=-Xmx9000m;set hive.rpc.query.plan=true;
insert into database1.table1 PARTITION(trans_date) select * from database1.table2;

錯誤信息:啟動 1 個作業中的 1 個減少任務數設置為 0,因為沒有減少操作符失敗:執行錯誤,從 org.apache.hadoop.hive.ql.exec.mr.MapRedTask 返回代碼 -101。 超出 GC 開銷限制

集群信息:總內存:1.2TB 總 vcores:288 個總節點:8 節點版本:2.7.0-mapr-1808

請注意:我正在嘗試將鑲木地板格式的表 2 中的數據插入 ORC 格式的表 1。 數據大小總共為1.8TB。

通過分區鍵添加分發應該可以解決問題:

insert into database1.table1 PARTITION(trans_date) select * from database1.table2
distribute by trans_date;

distribute by trans_date會觸發reducer step,每個reducer都會處理單個partition,這樣可以減少內存壓力。 當每個進程寫入多個分區時,它在內存中為 ORC 保留了太多緩沖區。

還可以考慮添加此設置來控制每個減速器將處理的數據量:

set hive.exec.reducers.bytes.per.reducer=67108864; --this is example only, reduce the figure to increase parallelism

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM