在Hadoop v1中,我已经分配了每个7GB的mapper和reducer slot,大小为1GB,我的mappers和reducer运行正常.我的机器有8G内存,8个处理器.现在使用YARN,当在同一台机器上运行相同的应用程序时,我收到了容器错误.默认情况下,我有这样的设置:
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>8192</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>8192</value>
</property>
Run Code Online (Sandbox Code Playgroud)
它给了我错误:
Container [pid=28920,containerID=container_1389136889967_0001_01_000121] is running beyond virtual memory limits. Current usage: 1.2 GB of 1 GB physical memory used; 2.2 GB of 2.1 GB virtual memory used. Killing container.
Run Code Online (Sandbox Code Playgroud)
然后我尝试在mapred-site.xml中设置内存限制:
<property>
<name>mapreduce.map.memory.mb</name>
<value>4096</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>4096</value>
</property>
Run Code Online (Sandbox Code Playgroud)
但仍然得到错误:
Container [pid=26783,containerID=container_1389136889967_0009_01_000002] is running beyond physical memory limits. Current usage: 4.2 GB of 4 GB physical memory used; 5.2 GB of 8.4 GB virtual memory used. …Run Code Online (Sandbox Code Playgroud) 我正在学习 Hadoop 并知道该框架有两个版本,即:Hadoop1 和 Hadoop2。
如果我的理解是正确的,在 Hadoop1 中,执行环境基于两个守护进程即TaskTracker,JobTracker而在 Hadoop2(又名 yarn)中,执行环境基于“新守护进程”即ResourceManager, NodeManager, ApplicationMaster.
如果这不正确,请纠正我。
mapreduce.framework.name
可以采用的可能值:local,classic,yarn
我不明白它们到底是什么意思;例如,如果我安装 Hadoop 2 ,那么它怎么会有旧的执行环境(有TaskTracker, JobTracker)。
谁能帮助我这些值是什么意思?
我试图将我的头脑包含在新API的实际目的上,并通过互联网阅读,我找到了与我正在处理的相同问题的不同答案.
我想知道答案的问题是:
1)哪个MRv2/YARN守护程序是负责启动应用程序容器和监视应用程序资源使用的守护程序.
2)MRv2/YARN旨在解决哪两个问题?
我将尝试通过指定搜索中的资源和实际数据,使这个线程对其他读者具有教育性和建设性,所以我希望看起来我提供的信息太多,而我可以提出问题并发布帖子短.
对于第一个问题,阅读文档,我可以找到3个主要资源:
从Hadoop文档:
ApplicationMaster < - > NodeManager启动容器.使用NMClientAsync对象与NodeManagers通信,通过NMClientAsync.CallbackHandler处理容器事件
ApplicationMaster与YARN集群通信,并处理应用程序执行.它以异步方式执行操作.在应用程序启动期间,ApplicationMaster的主要任务是:
a)与ResourceManager通信,为将来的容器协商和分配资源,以及
b)在容器分配之后,通信YARN NodeManagers(NM)以在它们上启动应用程序容器.
来自Hortonworks文档
ApplicationMaster实际上是一个特定于框架的库的实例,负责协商来自ResourceManager的资源,并与NodeManager一起执行和监视容器及其资源消耗.它负责从ResourceManager协商适当的资源容器,跟踪其状态并监视进度.
来自Cloudera文档:
MRv2守护进程 -
ResourceManager - 每个群集一个 - 启动ApplicationMasters,在从属节点上分配资源
ApplicationMaster - 每个作业一个 - 请求资源,管理单个Map和Reduce任务
NodeManager - 每个从节点一个 - 管理各个从节点上的资源
JobHistory - 每个群集一个 - 归档作业的指标和元数据
回到问题(哪些守护进程负责启动应用程序容器和监视应用程序资源使用)我问自己:
是NodeManager吗?它是ApplicationMaster吗?
根据我的理解,ApplicationMaster是让NodeManager实际完成工作的人,因此就像是在询问谁负责从地面抬起一个盒子,是那些实际解除控制心灵的人身体,让他们做提升......
我想这是一个棘手的问题,但必须有一个答案.
对于第二个问题,在线阅读,我可以从许多资源中找到不同的答案,从而产生混淆,但我的主要来源是:
来自Cloudera文档:
MapReduce v2("MRv2") - 建立在YARN之上("另一个资源NegoGator")
- 使用ResourceManager/NodeManager架构
- 提高集群的可扩展性
- 节点资源可用于任何类型的任务
- 提高群集利用率
- 支持非/ MR工作
回到问题(MRv2/YARN旨在解决哪两个问题?),我知道MRv2做了一些改变,比如防止JobTracker上的资源压力(在MRv1中,集群中的最大节点数可能在4000左右,并且在MRv2它是这个数字的2倍多,而且我也知道它提供了运行MapReduce之外的框架的能力,比如MPI.
来自文档:
Application Master提供了传统ResourceManager的大部分功能,因此整个系统可以进行更大规模的扩展.在测试中,我们已经成功地模拟了由现代硬件组成的10,000个节点集群而没有重大问题.
和:
将所有特定于应用程序框架的代码移动到ApplicationMaster中会对系统进行概括,以便我们现在可以支持多个框架,例如MapReduce,MPI和Graph Processing.
但我也认为它处理了NameNode是单点故障的事实,而在新版本中,通过高可用性模式存在Standby NameNode(我可能会混淆旧API和新API的功能,具有以下功能: MRv1与MRv2相关,这可能是我的问题的原因):
在Hadoop 2.0.0之前,NameNode是HDFS集群中的单点故障(SPOF).每个群集都有一个NameNode,如果该机器或进程变得不可用,整个群集将无法使用,直到NameNode重新启动或在单独的计算机上启动.
那么,如果你必须选择3中的2个,哪个是2个作为MRv2/YARN旨在解决的两个问题?
- …