1. Container内存使用的监控
NodeManager作为Yarn运行中的一个守护进程,其中一个职责是监控运行在节点上的container,通常包含每个容器的内存使用。
为监控容器的内存使用情况,在Yarn的配置文件yarn-site.xml中配置yarn.nodemanager.container-monitor.interval-ms属性遍历当前正在运行的容器,计算进程树(process tree,即每个容器中所有的子进程),对于每个进程检查/proc/<pid>/stat文件(其中pid为容器的进程ID),抽取出物理内存(又称RSS)和虚拟内存(又称VSZ或VSIZE)。
配置yarn-nodemanager.vmem-check-enabled控制虚拟检查是否要求打开,然后Yarn将抽取出来的容器及其子进程的VSIZE加起来和容器最大允许使用的虚拟内存进行比较。最大允许使用的虚拟内存是容器最大可使用的物理内存×yarn.nodemanager.vmem-pmem-ratio(默认值为2.1).所以,如果Yarn容器配置的最大可用物理内存为2GB,然后乘以2.1即为容器最大可用的虚拟内存4.2G。
配置yarn.nodemanager.pmem-check-enabled属性控制物理内存检查是否被打开,然后Yarn将抽取出来的容器及其子进程的加起来和容器最大允许使用的物理内存进行比较。
如果物理内存或者虚拟内存其中一个使用大于最大允许使用情况,Yarn会将kill该容器。并在日志打印以下日志:
Application application_1409135750325_48141 failed 2 times due to AM Container for
appattempt_1409135750325_48141_000002 exited with exitCode: 143 due to: Container
[pid=4733,containerID=container_1409135750325_48141_02_000001] is running beyond physical memory limits.
Current usage: 2.0 GB of 2 GB physical memory used; 6.0 GB of 4.2 GB virtual memory used. Killing container.
2. 增加MapReduce作业可使用的内存
对于MapReduce作业来说,可通过以下两种方式对作业运行的内存进行配置:
1). 设置Map和Reduce进程的物理内存;
2.) 设置Map和Reduce进程JVM堆大小。
1)设置Map和Reduce进程的物理内存
在map-site.xml文件中配置以下属性限制Map和Reduce进程的内存大小:
<property>
<name>mapreduce.map.memory.mb</name>
<value>2048</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>4096</value>
</property>
上例中说明:配置Map进程为2G,Reduce进程为4G。
注意:为作业配置的物理内存必须落在集群中容器允许的最小和最大内存范围中,参考:yarn.scheduler.maximum-allocation-mb和yarn.scheduler.minimum-allocation-mb两个参数。
2)设置Map和Reduce进程的JVM堆大小
JVM堆大小需要小于进程的物理内存,一般设置为物理内存的80%.
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx1638m</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx3278m</value>
</property>
上例说明:Map的堆设置为2G,Reduce的堆大小设置为4G。
相关推荐
- 对于内存敏感的应用,可以设置溢写策略,如使用MapReduce的`mapreduce.task.io.sort.mb`和`io.sort.factor`来控制排序阶段的内存使用。 总之,理解和优化YARN的内存和CPU分配是提升Hadoop集群效率的关键。通过...
此外,还会涉及Hadoop集群的扩展性、容错性和性能优化,例如通过调整参数来改善数据块复制策略,或优化NameNode和DataNode的内存设置,以提升整体集群的运行效率。 MapReduce是Hadoop的核心计算框架,手册将深入...
接着,实验在Hadoop集群的主节点上配置了MapReduce的开发环境,这里选择了Eclipse,而描述中提到的IDEA也是常见选择。开发者需要熟悉如何在IDE中设置Hadoop的环境,以便编写和调试MapReduce程序。 实验的核心部分是...
一个计算yarn内存配置的python脚本yarn-util.py,该脚本有四个参数 参数 描述 -c CORES 每个节点CPU核数 -m MEMORY 每个节点内存总数(单位G) -d DISKS 每个节点的硬盘个数 -k HBASE 如果安装了Hbase则为True,...
- 设置MapReduce框架的工作目录。 - 配置 `masters` 和 `slaves` 文件来指定Namenode和Datanode。 ##### 2.4 安装配置SSH - 在所有节点上安装SSH,并配置无密码登录,以便于节点间的通信。 ##### 2.5 环境配置...
在实际应用中,为了提高MapReduce作业的执行效率,需要对多个配置参数进行优化调整。本文将详细介绍MapReduce开发过程中的一些关键优化策略及其背后的原理。 #### 二、MapReduce集群优化 在MapReduce集群环境中,...
`mapreduce.map.memory.mb`和`mapreduce.reduce.memory.mb`分别配置map和reduce任务的Container内存大小。政务云环境下,map任务的内存为2048MB,reduce任务为4096MB。此外,`mapreduce.map.java.opts`和`mapreduce....
- **优化策略**:可以通过调整MapReduce的配置参数,如减少shuffle的数据传输量,提高并行度,优化磁盘I/O等,来提升计算效率。 最后,`AlgorithmProject`可能是该项目的源代码或者文档,里面可能包含了具体的实现...
3. **Map和Reduce任务内存调优**:调整任务的内存配置可以避免因内存不足导致的溢出错误。 4. **本地模式运行**:在开发和测试时,可以在单机上以本地模式运行MapReduce作业,快速验证代码逻辑。 **应用场景**: ...
6. **内存管理**:合理设置Java堆大小,避免因内存溢出导致的任务失败。 对于Hadoop的问题,常见的挑战包括: 1. **延迟问题**:Hadoop天生适合批处理,但在实时或近实时处理中表现不佳。 2. **数据倾斜**:当某些...
3. **性能优化**:在实践中,我们还需要考虑如何优化MapReduce作业,包括合理使用Combiner减少网络传输,设置合适的分区策略以平衡负载,以及使用本地化数据处理来提升效率。 4. **错误处理和调试**:MapReduce作业...
为了防止主节点因运行服务过多而内存溢出(OOM),建议将JAR文件上传到从节点上。 在准备数据方面,需要为WordCount程序创建一个文本文件(words.txt),该文件包含了需要进行MapReduce处理的数据。文本文件准备好...
通过阅读和理解这些代码,你可以看到如何定义和实现Map和Reduce函数,以及如何配置和运行MapReduce作业。 5. Hadoop与MapReduce Hadoop是Apache开源项目,提供了一个分布式文件系统(HDFS)和MapReduce框架。Hadoop...
这个压缩包“mapreduce.tar.gz”的内容可能包括MapReduce的理论介绍、代码示例、配置指南、实战教程等,对于理解分布式计算和大数据处理有很好的学习价值。但是,请注意,这个资源仅供学习,不应用于商业开发。
- **Spark**:虽然不是Hadoop的一部分,但经常与Hadoop配合使用,提供了一个更快的内存计算框架,适用于迭代算法和实时数据分析。 #### MapReduce与Hadoop的优势 - **高容错性**:Hadoop通过将数据复制到集群中的...
4. 配置Hadoop:在Windows上设置Hadoop时,需要修改配置文件如`core-site.xml`、`hdfs-site.xml`和`yarn-site.xml`,以指定HDFS的目录、内存分配和其他参数。此外,可能还需要配置Hadoop的环境变量,包括`JAVA_HOME`...
2. **内存与磁盘使用**: MapReduce优化了内存使用策略,同时通过合理的数据分区策略减少了磁盘I/O开销。 3. **并行度与负载均衡**: 通过合理设置Map和Reduce任务的数量以及数据切分策略,可以实现良好的并行处理效果...