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