我在hivestage表中有一个150gb的文件,它使用以下表属性
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
"separatorChar" = "|",
"quoteChar" = "'",
"escapeChar" = "\\"
)
STORED AS TEXTFILE;
现在,当我将这个数据加载到主表中时,在运行一个小时后,它将失败并出现java堆错误。我使用的是分区主表,数据中大约有12000个分区。对于加载数据,我使用简单的hql:
insert overwrite mainTable partition(date)
select * from stage table;
我也尝试过将Map内存增加到15gb,但失败了。有没有办法优化这个?任何解决方案,包括Spark或Hive将工作。
3条答案
按热度按时间zujrkrfu1#
是否可以检查以下内容:1)尝试在/etc/hive/conf/hive-env.sh中增加hadoop\u heapsize for hive-server2 2)通过连接到主节点使用以下命令重新启动配置单元以反映设置的更改sudo stop hive hcatalog server sudo start hive hcatalog server sudo status hive hcatalog server
参考文献:https://aws.amazon.com/premiumsupport/knowledge-center/emr-hive-outofmemoryerror-heap-space/
noj0wjuj2#
添加
distribute by partition key
```insert overwrite mainTable partition(date)
select * from stage table
distribute by date;
set hive.exec.reducers.bytes.per.reducer=67108864;
fwzugrvs3#
我认为在这个sql任务中会有很多分区。java堆错误可能是由于任务数量过多造成的。
因此,您可以考虑创建一个范围分区(按月)表来减少任务数。