首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

以敏捷方式将单节点集群从 MapReduce Version 1 迁移到 YARN (5)

以敏捷方式将单节点集群从 MapReduce Version 1 迁移到 YARN (5)

迭代 3:调整内存配置设置在此次迭代中,配置 NodeManager 可以使用多少内存来运行应用程序容器。还指定了任何请求的容器的最小和最大大小,以及运行 MapReduce 任务和 MapReduce        ApplicationMaster 的容器的默认大小。
第 1 步. 配置可用于运行容器的内存量此示例中的节点拥有 4 GB RAM 和一个四核 CPU。5 个运行的后台进程(ResourceManager、NameManager、NameNode、DataNode 和        Secondary NameNode)中的每一个运行 64 MB,所以总内存量为 320 MB (5 x 64 MB)。
在 4 GB 中,为系统进程和 Hadoop 后台进程保留 1 GB RAM。剩余的 3 GB 由 NodeManager 用于运行容器。
清单 26. yarn-site.xml
1
2
3
4
5
6
<property>
  <name>yarn.nodemanager.resource.memory-mb</name>
  <value>3072</value>
  <description>Amount of physical memory, in MB, that can be
  allocated for containers.</description>
</property>




重新启动 NodeManager 让此更改生效。使用命令 $ sudo /etc/init.d/hadoop-yarn-nodemanager          restart。重新启动 NodeManager 后,总内存资源被更改为 3 GB。
图 7. 一个包含一个 NodeManager 的单节点 YARN 集群,它有 3GB 内存可用于运行应用程序容器第 2 步. 指定容器的最小和最大大小限制定义任何 ApplicationMaster 可请求的容器的最小和最大内存限制。这些限制可确保开发人员不会提交请求异常小和异常大的容器的应用程序。
清单 27. yarn-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  <property>
    <name> yarn.scheduler.minimum-allocation-mb</name>
    <value>512</value>
    <description>The minimum allocation for every container
request at the RM, in MBs. Memory requests lower than this
won't take effect, and the specified value will get allocated at
minimum.</description>
  </property>

  <property>
    <name>yarn.scheduler.maximum-allocation-mb</name>
    <value>3072</value>
    <description>The maximum allocation for every container
request  at the RM, in MBs. Memory requests higher than this
won't take effect,  and will get capped to this
    value.</description>
  </property>




重新启动 ResourceManager 让此更改生效: $ sudo /etc/init.d/hadoop-yarn-resourcemanager          restart。
第 3 步. 为运行映射和缩减任务的容器指定默认大小映射和缩减任务在容器中运行。这些容器的内存大小可在 mapred-site.xml 文件中进行配置。
清单 28. mapred-site.xml        中的内存大小
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<property>
  <name>mapreduce.map.memory.mb</name>
  <value>512</value>
</property>
<property>
  <name>mapreduce.map.java.opts</name>
  <value>-Xmx410m</value>
</property>
<property>
  <name>mapreduce.reduce.memory.mb</name>
  <value>1024</value>
</property>
<property>
  <name>mapreduce.reduce.java.opts</name>
  <value>-Xmx819m</value>
</property>




mapreduce.map.memory.mb 是一个容器的逻辑大小。mapreduce.map.java.opts        指定一个映射任务的实际 JVM 设置。mapreduce.map.java.opts 中指定的 JVM 堆大小必须小于          mapreduce.map.memory.mb。在大多数情况下,mapreduce.map.java.opts        中的堆大小值应约等于 mapreduce.map.memory.mb 的          75%。mapreduce.reduce.memory.mb 和 mapreduce.reduce.java.opts        也是如此。
如果需要的话,可以在以后在作业的配置中修改这些参数。例如,内存密集型作业可请求更大的容器,让其映射和缩减任务使用更多内存。
第 4 步. 指定 NodeManager 内存因为 ApplicationMasters 也在容器中运行,所以需要指定将启动 MapReduce ApplicationMaster 的容器的大小。
清单 29. mapred-site.xml 中的 MapReduce ApplicationMaster          容器大小
1
2
3
4
5
6
7
8
<property>
  <name>yarn.app.mapreduce.am.resource.mb</name>
  <value>1024</value>
</property>
<property>
  <name>yarn.app.mapreduce.am.command-opts</name>
  <value>-Xmx819m</value>
</property>




第 5 步. 提交 MapReduce 作业第 3 和第 4        步中引入的更改被称为客户端更改。对于客户端更改,无需启动任何后台进程即可让它们生效。各个客户端可以在以后修改这些设置,为其作业提供自己的自定义配置(除非管理员最终执行了这些配置设置)。
运行一个 MapReduce 作业来试用这些设置。提交 WordCount 作业来计算配置文件中的每个单词的出现次数。
清单 30. 运行 MapReduce        作业
1
2
3
$ hadoop fs -put /etc/hadoop/conf.yarn input/conf.yarn
$ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar
wordcount conf.yarn output/wordcount/conf.yarn




在示例 YARN 集群上,此作业很快就失败了并显示了错误消息 Current usage:63.4 MB of 512 MB physical memory used;          1.2 GB of 1.0 GB virtual memory used.Killing container。
图 8. MapReduce 作业中的任务由于运行超出了虚拟内存限制而失败MapReduce 作业中的任务失败了,因为运行这些任务的容器被停用了,因为它们使用了太多的虚拟内存。NodeManager        负责监视容器中的资源使用,如果一个容器使用的虚拟或物理内存比这些限制允许的要多,则会停用该容器。
因为尚未配置任何设置来限制虚拟内存的使用,所以使用并应用了默认值。
容器可以使用的虚拟内存的限制以物理内存的形式配置,而且在默认情况下,该限制是物理内存的限制的 2.1 倍。可以使用          yarn.nodemanager.vmem-pmem-ratio 指定该限制。
使用新的 YARN 集群来估算 Pi 的值,而不是统计字数,不是更有趣吗?
第 6 步. 禁用虚拟内存限制查看所有失败的任务和它们的消息,比如 Current usage: X.Y MB of 512 MB physical memory used; 1.2 GB of          1.0 GB virtual memory used。在这个运行的示例中,没有任务使用多于 82.6MB 的物理内存。
此信息指示,应用程序容器不需要太多物理内存,但它们使用了太多虚拟内存。在这种情形下,可以显著增加虚拟内存的限制或完全不设置限制。
因为虚拟内存可能很难控制,而且在一些 Java 和 Linux®        版本中,虚拟内存与物理内存的比率可能很高,所以推荐对这些容器禁用虚拟内存限制。采用这个建议,如下所以。
清单 31. yarn-site.xml
1
2
3
4
5
6
  <property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
    <description>Whether virtual memory limits will be enforced for
containers.</description>
  </property>

重新启动 NodeManager 让更改生效: $ sudo /etc/init.d/hadoop-yarn-nodemanager        restart。

返回列表