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