MR对YARN共享缓存的支持

概述

MapReduce对YARN共享缓存的支持使MapReduce作业能够利用额外的资源缓存。这节省了作业提交客户端与YARN集群内部之间的网络带宽。这将减少作业提交时间和整体作业运行时间。

启用/禁用共享缓存

首先,您的YARN集群必须运行共享缓存服务。有关如何设置共享缓存服务的信息,请参阅YARN文档。

MapReduce用户可以基于资源类型指定哪些资源有资格上传到共享缓存。这通过在mapred-site.xml中使用配置参数来实现:

<property>
    <name>mapreduce.job.sharedcache.mode</name>
    <value>disabled</value>
    <description>
       A comma delimited list of resource categories to submit to the
       shared cache. The valid categories are: jobjar, libjars, files,
       archives. If "disabled" is specified then the job submission code
       will not use the shared cache.
    </description>
</property>

如果列出了资源类型,它将检查共享缓存以查看该资源是否已在缓存中。如果是,它将使用缓存的资源;如果不是,它将指定该资源需要异步上传。

为缓存指定资源

MapReduce用户有三种方式可以为MapReduce作业指定资源:

  1. 通过通用选项解析器的命令行(例如 -files、-archives、-libjars): 如果通过命令行指定了资源且该资源类型启用了共享缓存,则该资源将使用共享缓存。
  2. 分布式缓存API: 如果资源是通过分布式缓存指定的,那么无论该资源类型是否启用了共享缓存,该资源都不会使用共享缓存。
  3. 共享缓存API: 这是一组新增到org.apache.hadoop.mapreduce.Job API中的方法。它允许用户将文件添加到共享缓存,同时添加到共享缓存和类路径中,以及将归档文件添加到共享缓存。这些资源将被放置在分布式缓存中,如果它们的资源类型被启用,客户端也将使用共享缓存。

资源命名

确保每个MapReduce作业的资源具有唯一的文件名非常重要。这可以防止在YARN容器启动期间对运行MapReduce任务的容器进行本地化时发生符号链接覆盖。用户可以通过使用URI的片段部分来指定自己的资源名称。例如,对于在命令行上指定的文件资源,可能如下所示:

-files /local/path/file1.txt#foo.txt,/local/path2/file1.txt#bar.txt

在上面的示例中,两个名为file1.txt的文件将被本地化为两个不同的名称:foo.txt和bar.txt。

资源可见性

共享缓存中的所有资源都具有PUBLIC可见性。

共享缓存不可用时MapReduce客户端的行为

如果共享缓存管理器不可用,MapReduce客户端会采用快速失败机制。当MapReduce客户端无法联系共享缓存管理器时,该客户端在此次作业提交的剩余过程中将不再使用共享缓存。这可以防止MapReduce客户端每次尝试检查共享缓存中的资源时发生超时。MapReduce客户端会迅速恢复默认行为,提交作业时就像从未启用过共享缓存一样。