hadoop 点点滴滴(二)

hadoop2.0 yarn 内存溢出问题解决

异常提示:

Container [pid=20170,containerID=container_1390877171119_0002_01_000005] is running beyond virtual memory limits. Current usage: 416.8 MB of 1 GB physical memory used; 2.7 GB of 2.1 GB virtual memory used. Killing container.
Dump of the process-tree for container_1390877171119_0002_01_000005 :
|- PID PPID PGRPID SESSID CMD_NAME USER_MODE_TIME(MILLIS) SYSTEM_TIME(MILLIS) VMEM_USAGE(BYTES) RSSMEM_USAGE(PAGES) FULL_CMD_LINE
|- 20175 20170 20170 20170 (java) 939 42 2806788096 106404 /usr/local/jdk/bin/java -Djava.net.preferIPv4Stack=true -Dhadoop.metrics.log.level=WARN -Xmx2048M -Djava.io.tmpdir=/home/hadoop/hadoop-2.2.0/tmp/nm-local-dir/usercache/hadoop/appcache/application_1390877171119_0002/container_1390877171119_0002_01_000005/tmp -Dlog4j.configuration=container-log4j.properties -Dyarn.app.container.log.dir=/home/hadoop/hadoop-2.2.0/logs/userlogs/application_1390877171119_0002/container_1390877171119_0002_01_000005 -Dyarn.app.container.log.filesize=0 -Dhadoop.root.logger=INFO,CLA org.apache.hadoop.mapred.YarnChild 10.100.2.9 34637 attempt_1390877171119_0002_m_000001_1 5
|- 20170 19734 20170 20170 (bash) 0 0 108646400 301 /bin/bash -c /usr/local/jdk/bin/java -Djava.net.preferIPv4Stack=true -Dhadoop.metrics.log.level=WARN -Xmx2048M -Djava.io.tmpdir=/home/hadoop/hadoop-2.2.0/tmp/nm-local-dir/usercache/hadoop/appcache/application_1390877171119_0002/container_1390877171119_0002_01_000005/tmp -Dlog4j.configuration=container-log4j.properties -Dyarn.app.container.log.dir=/home/hadoop/hadoop-2.2.0/logs/userlogs/application_1390877171119_0002/container_1390877171119_0002_01_000005 -Dyarn.app.container.log.filesize=0 -Dhadoop.root.logger=INFO,CLA org.apache.hadoop.mapred.YarnChild 10.100.2.9 34637 attempt_1390877171119_0002_m_000001_1 5 1>/home/hadoop/hadoop-2.2.0/logs/userlogs/application_1390877171119_0002/container_1390877171119_0002_01_000005/stdout 2>/home/hadoop/hadoop-2.2.0/logs/userlogs/application_1390877171119_0002/container_1390877171119_0002_01_000005/stderr

Container killed on request. Exit code is 143

1. io.file.buffer.size 的设置问题
io.file.buffer.size 的值设置过大,map和reduce的任务可能会存在溢出。我这个值的设置是128k,其实不大,后来改成4k仍然出现异常证明不是这个问题. (io.file.buffer.size作为hadoop缓冲区,用于 hadoop读hdfs的文件和写hdfs的文件,还有map的输出都用到了这个缓冲区容量)

2. yarn的虚拟内存计算方式导致

这个问题应该是导致running beyond virtual memory limits.虽然没有解决问题,但感觉不知道这个的人很容易被坑的
running beyond virtual memory limits. Current usage: 32.1mb of 1.0gb physical memory used; 6.2gb of 2.1gb virtual memory used. Killing container。
该错误是YARN的虚拟内存计算方式导致,上例中用户程序申请的内存为1Gb,YARN根据此值乘以一个比例(默认为2.1)得出申请的虚拟内存的 值,当YARN计算的用户程序所需虚拟内存值大于计算出来的值时,就会报出以上错误。调节比例值可以解决该问题。具体参数为:yarn-site.xml 中的yarn.nodemanager.vmem-pmem-ratio

3.内存监控的问题

看到网上有人说,hadoop有个内存监控,可以设置当task,map,reduce or job 的累计使用的内存量大于limit的时候kill 程序。

第一,我增加了一倍reduce的数目,试着跑了一下,successed

第二,我保持之前的reduce的数目,在mapred-site.xml 配置文件中加入了两段语句 同样successed
<property>
<name>mapreduce.cluster.map.memory.mb</name>
<value>-1</value>
</property>
<property>
<name>mapreduce.cluster.reduce.memory.mb</name>
<value>-1</value>
</property>

第一个目的很明显是分摊每个reduce的累计内存使用量
第二个的目的是关闭监控机制,只有值大于0的时候才会启动,当然默认值是-1,
只不过我设置了mapreduce.{map|reduce}.memory.mb。 看大神的博客里有这么一句话“They typically match the default values set for the options mapreduce.{map|reduce}.memory.mb。”
只是对于官网文档上的此配置解释的 vitual memory还有一点疑惑。

关于内存配置 见
http://blog.csdn.net/amaowolf/article/details/7188504

时间: 2024-10-14 02:36:18

hadoop 点点滴滴(二)的相关文章

Hadoop的二次排序

Hadoop的二次排序 2013-01-08 14:46:53 分类: HADOOP hadoop的使用中,一般只关注运行结果.对于mapper和reducer之间的处理逻辑往往不care.比如key-value对到达reducer的先后顺序等 目前接触到的运用场景有: 1.根据用户操作时间来整理事件链,在网站分析里比较常用.需要按时间先后顺序来处理,如果过亿的访问操作全在reducer里来排序,对计算能力和内存都是一个挑战. 2.海量数据处理中,求去重distinct这种操作,往往需要先缓存很

Hadoop(二):MapReduce程序(Java)

Java版本程序开发过程主要包含三个步骤,一是map.reduce程序开发:第二是将程序编译成JAR包:第三使用Hadoop jar命令进行任务提交. 下面拿一个具体的例子进行说明,一个简单的词频统计,输入数据是一个单词文本,输出每个单词的出现个数. 一.MapReduce程序 标准的MapReduce程序包含一个Mapper函数.一个Reducer函数和一个main函数 1.主程序 1 package hadoop; 2 import org.apache.hadoop.conf.Config

hadoop系列二:HDFS文件系统的命令及JAVA客户端API

转载请在页首明显处注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6391518.html 一:说明 此为大数据系列的一些博文,有空的话会陆续更新,包含大数据的一些内容,如hadoop,spark,storm,机器学习等. 当前使用的hadoop版本为2.6.4 上一篇:hadoop系列一:hadoop集群安装 二:HDFS的shell命令 上一章说完了安装HADOOP集群部分,这一张讲HDFS. 其实基本上操作都是通过JAVA API来操作,所以这里的s

Hadoop系列(二)hadoop2.2.0伪分布式安装

一.环境配置 安装虚拟机vmware,并在该虚拟机机中安装CentOS 6.4: 修改hostname(修改配置文件/etc/sysconfig/network中的HOSTNAME=hadoop),修改IP到主机名的映射(vi /etc/hosts ,添加 127.0.0.1   hadoop); 按照JDK,下载jdk1.7.0_60并解压到/soft目录中,然后在/etc/profile中添加  export JAVA_HOME=/soft/jdk1.7.0_60 和 export PATH

Hadoop入门(二)

一.Hadoop 1.0的模型: | split 0->map-[sort]->[1,3..] |  /merge | ==> reducer-->part 0 =>HDFS replication split 1->map-[sort]->[2,6..] |------------- | ==> reducre--->part 1         =>HDFS replication split 2->map-[sort]->[4,

Hadoop 入门二、简要介绍Hadoop的各个主要模块(概念层次)

先从概念层次介绍下Hadoop的各个组件,下一部分会深入Hadoop的每个组件,并从实战层次讲解. 一.Hadoop构造模块 运行Hadoop的意思其实就是运行一组守护进程(daemons),每个进程都有各自的角色,有的仅运行在单个服务器上,有的则运行在集群多个服务器上,它们包括: NameNode Secondary NameNode DataNode JobTracker TaskTracker Hadoop是一个分布式存储与计算系统,分布式存储部分是HDFS,分布式计算部分是MapRedu

hadoop计算二度人脉关系推荐好友

https://www.jianshu.com/p/8707cd015ba1 问题描述: 以下是qq好友关系,进行好友推荐,比如:老王和二狗是好友 , 二狗和春子以及花朵是好友,那么老王和花朵 或者老王和春子就有可能也认识,可以对老王推荐春子和或花朵作为好友. 注意以下是制表符:tab建,所以程序中用 /t进行分割 老王 二狗 老王 二毛 二狗 春子 二狗 花朵 老王 花朵 花朵 老王 春子 菊花 问题分析 问题分析: 主 ---> 从 从 --->主 分别列出每一个关系,然后都列出从--&g

Hadoop学习笔记(3) Hadoop文件系统二

1 查询文件系统 (1) 文件元数据:FileStatus,该类封装了文件系统中文件和目录的元数据,包括文件长度.块大小.备份.修改时间.所有者以及版权信息.FileSystem的getFileStatus()方法用于获取文件或目录的FileStatus对象. 例:展示文件状态信息 public class ShowFileStatusTest{ private MiniDFSCluster cluster; private FileSystem fs; @Before public void

HADOOP docker(二):HDFS 高可用原理

1.环境简述2.QJM HA简述2.1为什么要做HDFS HA?2.2 HDFS HA的方式2.2 HSFS HA的结构2.3 机器要求3.部署HDFS HA3.1 详细配置3.2 部署HDFS HA4. HDFS HA的管理5.自动切换5.1 使用zookeeper实现HA原理5. 部署hdfs自动切换5.1 关闭集群5.2 添加HA配置5.3 在zookeeper中初始化HA状态5.4 开启集群5.5 使用zookeeper时的安全机制6.FAQ7.做了HA后HDFS的升级.回滚7.1 升级