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 用户有 3 种方法可以为 MapReduce 作业指定资源

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

资源命名

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

-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 客户端会快速恢复到默认行为,并提交作业,就好像共享缓存从未启用一样。