hive任务执行出错,map和reduce进程一直为0%

查看log日志发现,报错如下:Could not deallocate container for task attemptId attempt_XXX

从字面意思可知,是因为没有给任务分配container,在创建容器的过程中出错了。

通过查阅资料发现,主要是以下两个原因:

(1)nodemanager内存不够;

(2)yarn.nodemanager.resource.memory-mb和yarn.scheduler.maximum-allocation-mb的值同倍数调整小了。

其中yarn.nodemanager.resource.memory-mb:指的是YARN可以分配的最大物理内存,要根据真实服务器的物理内存大小进行调整;yarn.scheduler.maximum-allocation-mb:指的是单个容器(JVM进程)可以申请的最大物理内存,很显然这个值是不能大于参数“yarn.nodemanager.resource.memory-mb”的值的。后来想到MRMR作业启动的时候也有内存参数,果不其然,查看了下文件mapred-site.xml后,里边有个参数mapreduce.reduce.memory.mb,值是4096,这个参数的含义是:Reduce Task需要的内存。作业要运行在容器里,容器肯定要大于等于作业大小才对,所以在hive任务里分别设置两个参数为:

     set yarn.nodemanager.resource.memory-mb=4096
     set yarn.scheduler.maximum-allocation-mb=4096

(亦可将mapred-site.xml中的参数改小,然后重启hadoop)

重新执行该任务,成功!!!

 

参考链接:https://blog.csdn.net/achilles12345/article/details/77437102

 

 

 

 

 

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐