HIVE 在执行大量数据JOIN的时候,容易产生内存不足的情况

情况
很多时间遇到 "Caused by: java.lang.OutOfMemoryError: Java heap space" 
Caused by: java.lang.OutOfMemoryError: Java heap space

可能会有下面错误 "Reducer tasks of hive job fails with Out Of Memory error during shuffle fetcher stage"

解决办法:

  • 增加hive.tez.container.size .
  • tez.runtime.shuffle.memory.limit.percent 改小一点

可选

  • 减少tez.runtime.shuffle.fetch.buffer.percent 默认是0.25 , 尽管为0.15 if needed. (这个值要在区别 0.25 , 0.10)

转载于:https://www.cnblogs.com/frankzye/p/5522587.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用Hive LOAD语句导入数据时,如果遇到内存不足情况,可以尝试以下方法: 1. 增加Hive服务的内存限制 可以通过修改Hive服务的JVM参数来增加内存限制,例如: ``` export HADOOP_HEAPSIZE=2048 hive --service hiveserver2 ``` 这将会将Hive服务的JVM内存限制增加到2GB。 2. 增加Hadoop集群的内存限制 如果Hive服务所在的Hadoop集群内存不足,可以增加集群的内存限制,例如: ``` export HADOOP_HEAPSIZE=2048 hadoop jar /path/to/hadoop-streaming.jar -Dmapred.job.map.memory.mb=2048 -Dmapred.job.reduce.memory.mb=2048 ... ``` 这将会将Hadoop集群的Map和Reduce任务的内存限制都增加到2GB。 3. 使用分区加载数据 如果数据量较大,可以考虑使用Hive的分区功能来分批导入数据,例如: ``` LOAD DATA INPATH '/path/to/data' INTO TABLE mytable PARTITION (dt='2020-01-01'); LOAD DATA INPATH '/path/to/data' INTO TABLE mytable PARTITION (dt='2020-01-02'); LOAD DATA INPATH '/path/to/data' INTO TABLE mytable PARTITION (dt='2020-01-03'); ``` 这将会将数据按日期分成多个分区来导入,减少一次性导入数据的内存压力。 4. 使用压缩格式 如果数据文件较大,可以考虑使用压缩格式来减小文件大小,例如: ``` SET hive.exec.compress.output=true; SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec; LOAD DATA INPATH '/path/to/data' INTO TABLE mytable; ``` 这将会将数据文件压缩成Snappy格式,减小文件大小,从而减少内存压力。 总之,Hive导入数据内存不足可以通过增加内存限制、分区加载、使用压缩格式等方法来解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值