大数据学习--使用Hadoop2.6.0遇到的相关问题
2015-08-27 17:38
519 查看
学习和使用Hadoop Yarn已有半年多,其中遇到了一些常见问题,在网上搜索基本可以找到答案,出处已找不到,我只是对自己遇到的问题做个总结,也感谢解决这些问题的大神们,原谅我已经忘记到底从哪里获得的答案o(╯□╰)o。我目前使用的Hadoop版本是2.6.0。下面是我遇到的问题,以后会不定期更新:
配置了HDFS的federation,eclipse插件配置连接Hadoop2.6.0后无法查看远程文件目录结构
使用Maven开发MapReduce时,无法下载Hadoop2.6.0相关包
MapReduce工程报错Missing artifact jdk.tools:jdk.tools:jar:1.7
Container … is running beyond virtual memory limits
Container … is running beyond physical memory limits
java.lang.OutOfMemoryError: Java heap space
不关闭防火墙的情况下提交作业失败
containner日志报错找不到类方法
提交作业指定-D、-libjars等常规选项失败
Container … is running beyond virtual memory limits. Current usage:498.0MB od 1GB physical memory used;2.7GB of 2.1GB virtual memory used.Killing container.
意思是虚拟内存不足,有几种解决办法,下面我说两种:
1、修改yarn-site.xml配置文件,可以增加yarn.nodemanager.vmem-pmem-ratio物理内存和虚拟内存的比例,但这种修改方法不好,需要重新启动集群才可以生效,而且出现需要更多虚拟内存的作业还需要修改配置,这样的方式不灵活;
2、在作业启动时动态配置mapreduce.map.memory.mb或 mapreduce.reduce.memory.mb的大小,Map和Reduce的虚拟内存大小是根据这两个配置进行取值的。或者修改mapred-site.xml配置文件中这两个值,如果没有增加即可。具体Hadoop2作业的相关内存参数要如何配置,可以参考:http://blog.chinaunix.net/uid-28311809-id-4383551.html 和http://dongxicheng.org/mapreduce-nextgen/hadoop-yarn-configurations-resourcemanager-nodemanager/。
Container … is running beyond physical memory limits. Current usage: 2.5 GB of 2.5 GB physical memory used; 3.1 GB of 12.5 GB virtual memory used. Killing container.
意思是物理内存不足,修改方法与上一个错误第2个解决方式类似,增加mapreduce.map.memory.mb或 mapreduce.reduce.memory.mb的大小。
org.apache.hadoop.mapred.YarnChild: Error running child : java.lang.OutOfMemoryError: Java heap space
这个错误可能是MapReduce的算法不当,导致的OOM,首先先检查算法是否可以优化。如果无法优化,则根据具体情况修改配置或在提交作业时动态指定相应配置,有如下三种方法:
1、修改mapred-site.xml配置文件,修改mapreduce.map.java.opts或mapreduce.reduce.java.opts,增加map或reduce的JVM最大可用内存;
2、在程序中设置
这里1024只是例子;
以上两种方式不推荐,灵活性不好。
3、在提交作业时动态指定mapreduce.map.java.opts或mapreduce.reduce.java.opts的值。
推荐第三种解决方式。
-A INPUT -p tcp -m tcp –dport 10000:65535 -j ACCEPT
目前没有找到太好的解决办法,但总觉得比关闭防火墙好一些。如果有哪位大神解决了这个问题,希望能告知我,不甚感激。
在configuration中设置:
1、需要main函数所在的类继承Configured类并实现Tool接口,或者使用如下代码获取Configuration:
这条是我通过看官方文档和一个同学的博客看到的(忘记出处了。。对不起)
2、需要将配置的常规选项放在全部参数的前面,例如:
hadoop jar hadoop-addCeilingFloor-1.0.0.jar -D mapreduce.map.java.opts=-Xmx2560m -D mapreduce.map.memory.mb=3072 -input …… -output ……
只有同时满足上述两个条件,才能动态配置成功。
以后如果有新的问题会再继续更新。
配置了HDFS的federation,eclipse插件配置连接Hadoop2.6.0后无法查看远程文件目录结构
使用Maven开发MapReduce时,无法下载Hadoop2.6.0相关包
MapReduce工程报错Missing artifact jdk.tools:jdk.tools:jar:1.7
Container … is running beyond virtual memory limits
Container … is running beyond physical memory limits
java.lang.OutOfMemoryError: Java heap space
不关闭防火墙的情况下提交作业失败
containner日志报错找不到类方法
提交作业指定-D、-libjars等常规选项失败
配置了HDFS的federation,eclipse插件配置连接Hadoop2.6.0后无法查看远程文件目录结构
如图所示,在Edit Hadoop location中,切换到Advanced parameters标签,修改fs.defaultFS为hdfs://192.168.0.14:9000/tmp。其中/tmp就是我在配置文件中配置的其中一个HDFS相对路径。使用Maven开发MapReduce时,无法下载Hadoop2.6.0相关包
在pom.xml中增加如下配置:<repositories> <repository> <id>maven.oschina.net</id> <url>http://maven.oschina.net/content/groups/public/</url> </repository> </repositories>
MapReduce工程报错Missing artifact jdk.tools:jdk.tools:jar:1.7
在pom.xml文件中增加如下配置:<dependency> <groupId>jdk.tools</groupId> <artifactId>jdk.tools</artifactId> <version>1.7</version> <scope>system</scope> <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath> </dependency>
Container … is running beyond virtual memory limits
具体报错如下:Container … is running beyond virtual memory limits. Current usage:498.0MB od 1GB physical memory used;2.7GB of 2.1GB virtual memory used.Killing container.
意思是虚拟内存不足,有几种解决办法,下面我说两种:
1、修改yarn-site.xml配置文件,可以增加yarn.nodemanager.vmem-pmem-ratio物理内存和虚拟内存的比例,但这种修改方法不好,需要重新启动集群才可以生效,而且出现需要更多虚拟内存的作业还需要修改配置,这样的方式不灵活;
2、在作业启动时动态配置mapreduce.map.memory.mb或 mapreduce.reduce.memory.mb的大小,Map和Reduce的虚拟内存大小是根据这两个配置进行取值的。或者修改mapred-site.xml配置文件中这两个值,如果没有增加即可。具体Hadoop2作业的相关内存参数要如何配置,可以参考:http://blog.chinaunix.net/uid-28311809-id-4383551.html 和http://dongxicheng.org/mapreduce-nextgen/hadoop-yarn-configurations-resourcemanager-nodemanager/。
Container … is running beyond physical memory limits
具体报错如下:Container … is running beyond physical memory limits. Current usage: 2.5 GB of 2.5 GB physical memory used; 3.1 GB of 12.5 GB virtual memory used. Killing container.
意思是物理内存不足,修改方法与上一个错误第2个解决方式类似,增加mapreduce.map.memory.mb或 mapreduce.reduce.memory.mb的大小。
java.lang.OutOfMemoryError: Java heap space
具体报错如下:org.apache.hadoop.mapred.YarnChild: Error running child : java.lang.OutOfMemoryError: Java heap space
这个错误可能是MapReduce的算法不当,导致的OOM,首先先检查算法是否可以优化。如果无法优化,则根据具体情况修改配置或在提交作业时动态指定相应配置,有如下三种方法:
1、修改mapred-site.xml配置文件,修改mapreduce.map.java.opts或mapreduce.reduce.java.opts,增加map或reduce的JVM最大可用内存;
2、在程序中设置
configuration.set("mapreduce.map.java.opts", "-Xmx1024m")
这里1024只是例子;
以上两种方式不推荐,灵活性不好。
3、在提交作业时动态指定mapreduce.map.java.opts或mapreduce.reduce.java.opts的值。
推荐第三种解决方式。
不关闭防火墙的情况下提交作业失败
由于Hadoop Yarn把资源管理功能和作业调度功能分离开了,例如MapReduce的作业调度由MRApplicationMaster进行管理,而MRApplicationMaster的启动是在从机器上进行的,如果防火墙没有关闭,MRApplicationMaster启动就会失败(通信端口没有开启)。但MRApplicationMaster启动的端口是随机的,因此我目前的解决办法是开启一个范围端口,如下所示:-A INPUT -p tcp -m tcp –dport 10000:65535 -j ACCEPT
目前没有找到太好的解决办法,但总觉得比关闭防火墙好一些。如果有哪位大神解决了这个问题,希望能告知我,不甚感激。
containner日志报错找不到类方法
有些情况下, 我们编写的MapReduce使用的jar包与Hadoop本身依赖的jar包版本不一致,导致使用某些方法时报错找不到该方法。原因是MapReduce作业会直接使用Hadoop本身依赖的jar包。如果想使用自己的jar包,在configuration中设置:
conf.setBoolean(MRJobConfig.MAPREDUCE_JOB_USER_CLASSPATH_FIRST, true); // 设置mapreduce优先使用用户classpath
提交作业指定-D、-libjars等常规选项失败
我在提交MapReduce作业时,设置了如下配置 -D mapreduce.map.java.opts=-Xmx2560m,但在作业执行时读取该配置确实Hadoop默认的配置,也就是说我设置失败了。在网上查找答案未果。于是对源码进行了Debug,发现需要满足以下两个条件,才能动态配置成功:1、需要main函数所在的类继承Configured类并实现Tool接口,或者使用如下代码获取Configuration:
Configuration conf = new Configuration(); String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
这条是我通过看官方文档和一个同学的博客看到的(忘记出处了。。对不起)
2、需要将配置的常规选项放在全部参数的前面,例如:
hadoop jar hadoop-addCeilingFloor-1.0.0.jar -D mapreduce.map.java.opts=-Xmx2560m -D mapreduce.map.memory.mb=3072 -input …… -output ……
只有同时满足上述两个条件,才能动态配置成功。
以后如果有新的问题会再继续更新。
相关文章推荐
- 详解HDFS Short Circuit Local Reads
- Hadoop_2.1.0 MapReduce序列图
- 使用Hadoop搭建现代电信企业架构
- 单机版搭建Hadoop环境图文教程详解
- 康诺云推出三款智能硬件产品,为健康管理业务搭建数据池
- perl中5个常见错误
- MySQL中使用innobackupex、xtrabackup进行大数据的备份和还原教程
- css常见问题解决方法小结
- hadoop常见错误以及处理方法详解
- ASP常见错误详解及解决方案小结 推荐第1/2页
- 新手asp编程的基本法则与常见错误注意事项
- java struts常见错误以及原因分析
- php源代码安装常见错误与解决办法分享
- JDBC 程序的常见错误及调试方法
- hadoop 单机安装配置教程
- hadoop的hdfs文件操作实现上传文件到hdfs
- hadoop实现grep示例分享
- PHP编译安装时常见错误解决办法
- 简析Oracle数据库常见问题及解决方案