博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MapReduce作业
阅读量:4188 次
发布时间:2019-05-26

本文共 3781 字,大约阅读时间需要 12 分钟。

MapReduce作业,目的是读数据库里面多个表的数据,然后在JAVA中根据具体的业务情况做过滤,并把符合数据的结果写入到HDFS上,在Eclipse里面提交作业进行调试的时候,发现在Reduce阶段,总是抛出Java heap space的异常,这异常明显,就是堆内存溢出造成的,然后散仙仔细看了下业务块的代码,在Reduce里读数据库的时候,有几个表的返回数据量比较大约有50万左右,因为具体的数量不会太大,所以没有采用分页来返回,读完后数据,采用Map集合封装,在业务处理的一段时间里,一直会停留在内存里,原来的mapred-site.xml里面的配置reduce内存比较小,只需调大此处内存即可。

Java代码  
  1. <property>  
  2.     <name>mapreduce.map.memory.mb</name>  
  3.     <value>215</value>  
  4. </property>  
  5. <property>  
  6.     <name>mapreduce.map.java.opts</name>  
  7.     <value>-Xmx215M</value>  
  8. </property>  
  9.   
  10. <property>  
  11.     <name>mapreduce.reduce.memory.mb</name>  
  12.     <value>1024</value>  
  13. </property>  
  14. <property>  
  15.     <name>mapreduce.reduce.java.opts</name>  
  16.     <value>-Xmx1024M</value>  
  17. </property>  
mapreduce.map.memory.mb
215
mapreduce.map.java.opts
-Xmx215M
mapreduce.reduce.memory.mb
1024
mapreduce.reduce.java.opts
-Xmx1024M

hadoop2.2内存控制的几个重要参数:

Java代码  
  1. YARN  
  2. yarn.scheduler.minimum-allocation-mb  
  3. yarn.scheduler.maximum-allocation-mb  
  4. yarn.nodemanager.vmem-pmem-ratio  
  5. yarn.nodemanager.resource.memory.mb  
  6. Mapreuce  
  7. Map Memory  
  8. mapreduce.map.java.opts  
  9. mapreduce.map.memory.mb  
  10. Reduce Memory  
  11. mapreduce.reduce.java.opts  
  12. mapreduce.reduce.memory.mb  
YARNyarn.scheduler.minimum-allocation-mbyarn.scheduler.maximum-allocation-mbyarn.nodemanager.vmem-pmem-ratioyarn.nodemanager.resource.memory.mbMapreuceMap Memorymapreduce.map.java.optsmapreduce.map.memory.mbReduce Memorymapreduce.reduce.java.optsmapreduce.reduce.memory.mb

如果出现异常:

Java代码  
  1. Container [pid=17645,containerID=container_1415210272486_0013_01_000004] is running beyond physical memory limits. Current usage: 1.0 GB of 1 GB physical memory used; 1.6 GB of 2.1 GB virtual memory used. Killing container.  
  2. Dump of the process-tree for container_1415210272486_0013_01_000004 :  
Container [pid=17645,containerID=container_1415210272486_0013_01_000004] is running beyond physical memory limits. Current usage: 1.0 GB of 1 GB physical memory used; 1.6 GB of 2.1 GB virtual memory used. Killing container.Dump of the process-tree for container_1415210272486_0013_01_000004 :

可以调整yarn.nodemanager.vmem-pmem-ratio 的比率,默认是2.1,或者加大程序reduce的运行个数进行尝试,这个比率的控制影响着虚拟内存的使用,当yarn计算出来的虚拟内存,比在mapred-site.xml里的mapreduce.map.memory.mb或mapreduce.reduce.memory.mb的2.1倍还要多时,就会发生上面截图中的异常,而默认的mapreduce.map.memory.mb或
mapreduce.reduce.memory.mb得初始大小为1024M,然后根据异常中的yarn自身根据运行环境推算出来的虚拟内存来做比较,发现比1024*2.1还要大,所以就会由NodeManage守护进程kill掉AM容器,从而导致整个MR作业运行失败,现在我们只需要调大这个比率即可,避免发生这种异常。具体调大多小,可根据具体情况来设置。
最后备注一下,hadoop的环境变量的脚本配置java.sh:

Java代码  
  1. export PATH=.:$PATH  
  2.   
  3.   
  4. export FSE_HOME="/home/search/fse2"  
  5. export FSE_CONF_DIR=$FSE_HOME/conf  
  6. export PATH=$PATH:$FSE_HOME/bin  
  7.   
  8.   
  9. user="search"  
  10. export JAVA_HOME="/usr/local/jdk"  
  11. export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib  
  12. export PATH=$PATH:$JAVA_HOME/bin  
  13.   
  14.   
  15.   
  16. export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin  
  17. export HADOOP_HOME=/home/search/hadoop  
  18. export HADOOP_MAPRED_HOME=$HADOOP_HOME  
  19. export HADOOP_COMMON_HOME=$HADOOP_HOME  
  20. export HADOOP_HDFS_HOME=$HADOOP_HOME  
  21. export YARN_HOME=$HADOOP_HOME  
  22. export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop  
  23. export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop  
  24. export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin  
  25. export CLASSPATH=.:$CLASSPATH:$HADOOP_COMMON_HOME:$HADOOP_COMMON_HOMEi/lib:$HADOOP_MAPRED_HOME:$HADOOP_HDFS_HOME:$HADOOP_HDFS_HOME  
  26.   
  27.   
  28.   
  29.   
  30. #export HADOOP_HOME=/home/$user/hadoop  
  31. #export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop  
  32. #export CLASSPATH=.:$CLASSPATH:$HADOOP_HOME/lib  
  33. #export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin  
  34.   
  35. export ANT_HOME=/usr/local/ant  
  36. export CLASSPATH=$CLASSPATH:$ANT_HOME/lib  
  37. export PATH=$PATH:$ANT_HOME/bin  
  38.   
  39. export MAVEN_HOME="/usr/local/maven"  
  40. export CLASSPATH=$CLASSPATH:$MAVEN_HOME/lib  
  41. export PATH=$PATH:$MAVEN_HOME/bin  

转载地址:http://ixjoi.baihongyu.com/

你可能感兴趣的文章
最长有效括号
查看>>
救生艇
查看>>
Android中自定义圆形图片(一)
查看>>
Android中ViewPager自动加手动轮播
查看>>
Android中Fragment点击切换与添加ViewPager滑动切换
查看>>
二级MSOffice高级应用考试大纲(2013年版)
查看>>
图解LogCat的用法
查看>>
学习Android界面设计的超级利器HierarchyView.bat
查看>>
众多Android 开源项目推荐,给力工作给力学习
查看>>
Android线程模型和AsyncTask
查看>>
Android Activity和Intent机制
查看>>
Java多线程-阻塞队列BlockingQueue
查看>>
Android动画开发——Animation动画效果
查看>>
webview加载网页的时候在标题栏上显示加载进度
查看>>
Android 配置 OpenCV2.3.1
查看>>
Android pull封装,直接解析xml
查看>>
Eclipse 快捷键
查看>>
launcher修改--launcher架构解析
查看>>
Android之最简单的ImageView加边框方法
查看>>
Windows:Apache与Tomcat集群调优
查看>>