之前将eclipse下编好的mapreduce代码放到集群上面跑,发现速度很慢,namenode节点的cpu和内存使用率很低,datanode节点基本上处于没有运行的状态,然后通过查看hadoop-etc-hadoop下面的配置文件,发现mapreduce-site.xml文件下面的mapreduce.framework.name名字中framework少了一个字母e,导致集群一直运行在伪分布模式下面,同时也导致web控制网页没有datanode的信息,打开master:8088网站显示no available datanode in the table,曾经这个问题困扰了我很久很久,因为如果网站打不开的话就没有办法查看运行的日志,没有办法通过日志来查看运行出错信息。在hadoop2.1以后就通过mapreduce-site.xml配置文件里面的mapreduce.jobhistory.webapp.address下面的value值master:19888网站来查看各个节点的运行状态了,开启jobhistory的命令是mr-jobhistory-sh start historyserver。

运行jar包的时候提示空指针异常 java.lang.NullPointerException分析说明

这个问题也困扰了我相当长的时间,直到后来通过日志log发现原来是程序没有读我的文件(文件格式是xml格式),后来把文件复制到各个节点下面相同的路径里面,然后在代码中输入路径(不可以只放在namenode节点上,不然datanonde读不到文件便会报空指针异常)。

mapreduce框架中全局变量的设置

在我的工程中需要在map函数里面调用一个类的方法,如果在每个map函数里面都新建类的话会导致运行时间很长,内存溢出。这里我想在代码运行之前新建这个类,在map方法里面直接调用这个类的方法,这个过程也困扰了我很长的时间,直到另一个需求的出现,在处理很多文件的时候我希望输出为多个文件,而不是只有一个输出文件。

对于输出多个文件的分析

在程序中加入以下代码

private MultipleOutputs mos;

protected void setup(Context context) throws IOException, InterruptedException { 

  mos=new MultipleOutputs(context);//初始化mos
} protected void cleanup( Context context) throws IOException, InterruptedException { mos.close();//释放资源
} public void map(LongWritable key,Text value,Context context) throws IOException,InterruptedException,NullPointerException{ mos.write(new Text(key),new Text(value),filename); }

实现以filename文件作为输入文件输出map的结果。

这里我就发现了一个地方,在setup方法中新建了一个对象mos,然后在map函数中直接调用mos的方法,而网上说setup方法只运行一次,可以重载自己的功能,然后回到上一个问题,我把需要初始化的对象直接放到setup方法里面,然后在map函数里面执行对象的方法,结果空指针异常消失了,而且不会再每执行一次map函数就新建一个对象,这样减少了内存的消耗。

运行时候出现Error: GC overhead limit exceeded

在hadoop2.x中默认Container的yarn child jvm堆大小为200M,通过参数mapred.child.java.opts指定,可以在job提交的时候给定,是一个客户端生效的参数,配置在mapred-site.xml文件中,通过将该参数修改为-Xms200m -Xmx4096000m来更改jvm堆大小,异常解决。

然后我继续运行jar包工程,运行时出现4.2 GB of 2.1 GB virtual memory used. Killing container.

这个错误和物理内存无关,是虚拟内存超了。

解决方法:

在etc/hadoop/yarn-site.xml文件中,修改检查虚拟内存的属性为false,如下:

<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>

参考资料:http://blog.csdn.net/ma0903/article/details/48289731

Hadoop打包成jar包在集群上运行时出现的各种问题以及解决方案的更多相关文章

  1. flink idea 打包jar 并放到集群上运行

    flink idea 打包jar 并放到集群上运行 在开始之前注意前提,当前项目的scala的版本要和集群上的scala一致   我已经创建好一个wordCount的flink项目   注意项目的po ...

  2. IntelliJ IDEA编写的spark程序在远程spark集群上运行

    准备工作 需要有三台主机,其中一台主机充当master,另外两台主机分别为slave01,slave02,并且要求三台主机处于同一个局域网下 通过命令:ifconfig 可以查看主机的IP地址,如下图 ...

  3. 012 Spark在IDEA中打jar包,并在集群上运行(包括local模式,standalone模式,yarn模式的集群运行)

    一:打包成jar 1.修改代码 2.使用maven打包 但是目录中有中文,会出现打包错误 3.第二种方式 4.下一步 5.下一步 6.下一步 7.下一步 8.下一步 9.完成 二:在集群上运行(loc ...

  4. [Java] Java 打包成jar包 和 解压jar包

    解压jar包 jar xf xxx.jar 打包成jar包 方法一:通过jar命令 jar命令的用法: 下面是jar命令的帮助说明: 用法:jar {ctxui}[vfm0Me] [jar-file] ...

  5. [JAR包] android引入JAR包,打包成JAR包,打包成Library项目,导入Library项目

    (1)项目导入JAR包:1.在项目目录里建立一个libs目录,将外部jar包拷贝在里面.2.右键点击项目,Bulid Path->Configure Build Path3.在设置Libraie ...

  6. 【spring boot】idea下springboot打包成jar包和war包,并且可以在外部tomcat下运行访问到(转)

    转自:https://www.cnblogs.com/sxdcgaq8080/p/7727249.html   接着上一章走呗:http://www.cnblogs.com/sxdcgaq8080/p ...

  7. 【Android端】代码打包成jar包/aar形式

    Android端代码打包成jar包和aar形式: 首先,jar包的形式和aar形式有什么区别? 1.打包之后生成的文件地址: *.jar:库/build/intermediates/bundles/d ...

  8. Android studio 将 Module 打包成 Jar 包

    整理记录 AndroidStudio 把一个 module 项目打包成 jar 包. 一.默认自动生成的 jar 包 众所周知 android studio 会在library所依赖的 app运行 或 ...

  9. springboot打包成jar包后找不到xml,找不到主类的解决方法

    springboot打包成jar包后找不到xml,找不到主类的解决方法 请首先保证你的项目能正常运行(即不打包的时候运行无误),我们在打包时经常遇到如下问题: springboot打包成jar包后找不 ...

随机推荐

  1. linux 广播

    广播是一台主机向局域网内的所有主机发送数据.这时,同一网段的所有主机都能接收到数据.发送广播包的步骤大致如下: (1)确定一个发送广播的接口,如eth0 (2)确定广播的地址,通过ioctl函数,请求 ...

  2. APP遇到大量的真实手机号刷注册用户该如何应对?

    欢迎访问网易云社区,了解更多网易技术产品运营经验. 在说如何应对之前,先给各位梳理移动端APP可能遇到哪些作弊风险.1. 渠道商刷量,伪造大量的下载量和装机量,但没有新用户注册:2. 对于电商.P2P ...

  3. 【Training versus Testing】林轩田机器学习基石

    接着上一讲留下的关子,机器学习是否可行与假设集合H的数量M的关系. 机器学习是否可行的两个关键点: 1. Ein(g)是否足够小(在训练集上的表现是否出色) 2. Eout(g)是否与Ein(g)足够 ...

  4. spring boot打war包启动Tomcat失败

    Tomcat启动失败:最后一个causy by :java.lang.NoSuchMethodError: org.apache.tomcat.util.res.StringManager.getMa ...

  5. python学习总结---文件操作

    # 文件操作 ### 目录管理(os) - 示例 ```python # 执行系统命令 # 清屏 # os.system('cls') # 调出计算器 # os.system('calc') # 查看 ...

  6. install.cloudinit.qga.bat

    @echo off title Auto Install color 1F ::CloudBase-Init echo. msiexec /i \\192.168.122.47\cloudbase\C ...

  7. Java的HttpClient的实现

    HttpClient的概念就是模仿浏览器请求服务端内容,也可以做App和Server之间的链接. 这个是关于Java的HttpClient的简单实例,其实java本身也可以通过自己的net包去做,但是 ...

  8. v-if与v-show区别

    在v-show中,元素是一直存在的,当v-show为false时,元素display:none只是隐藏了而已. v-if 作用:判断是否加载固定的内容,如果为真,则加载:为假时,则不加载. 用处:用在 ...

  9. 为啥shmem不回收 | drop_caches

    内核在哪里禁止对tmpfs中内存页的回收 mem.limit_in_bytes同样会触发shrink_zones过程! shrink_zones是代码中的直接内存回收路径 1.try_to_free_ ...

  10. Python中的单元测试模块Unittest快速入门

    前言 为什么需要单元测试? 如果没有单元测试,我们会遇到这种情况:已有的健康运行的代码在经过改动之后,我们无法得知改动之后是否引入了Bug.如果有单元测试的话,只要单元测试全部通过,我们就可以保证没有 ...