更改hadoop mapreduce local resource visibility to public

koaltpgm  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(695)

有没有一种方法可以设置hadoop通用选项-files或-archives提供的hadoop mapreduce本地资源的可见性。在yarn-site.xml中,我找到了使用-archives选项在worker节点上写入文件的位置,但根据我读过的其他文章和它所在的目录(/hadoop/yarn/local/usercache/myusername/appcache),它被视为私有。我找不到任何通用选项或-d some.warn.setting将其从私有更改为应用程序,或者更好的是,更改为公共。

lrpiutwd

lrpiutwd1#

我浏览了hadoop代码。无法通过配置设置这些参数(mapreduce.job.cache.files.visibilities和mapreduce.job.cache.archives.visibilities)。
这些参数在mrjobconfig.java中定义:

public static final String CACHE_FILE_VISIBILITIES = "mapreduce.job.cache.files.visibilities";

  public static final String CACHE_ARCHIVES_VISIBILITIES = "mapreduce.job.cache.archives.visibilities";

org.apache.hadoop.mapreduce.jobresourceuploader.java有一个函数uploadfiles()。此函数用于将临时文件、jar和归档文件上载到分布式缓存:
此函数通过调用以下函数来确定文件和存档的可见性:

// set the public/private visibility of the archives and files
ClientDistributedCacheManager.determineTimestampsAndCacheVisibilities(conf);

上面提到的函数调用,最后点击org.apache.hadoop.mapreduce.filecache.clientdistributedcachemanager.java中的determinecachevisibilities()函数
根据该功能的描述:

/**
   * Determines the visibilities of the distributed cache files and 
   * archives. The visibility of a cache path is "public" if the leaf component
   * has READ permissions for others, and the parent subdirs have 
   * EXECUTE permissions for others
   * @param job
   * @throws IOException
   */
  public static void determineCacheVisibilities(Configuration job,

因此可见性是根据叶文件和父目录的权限来确定的。
在clientdistributedcachemanager.java中,ispublic()方法具有计算可见性的逻辑:

//the leaf level file should be readable by others
if (!checkPermissionOfOther(fs, current, FsAction.READ, statCache)) {
  return false;
}
return ancestorsHaveExecutePermissions(fs, current.getParent(), statCache);

最后,在确定权限之后,在以下函数中设置可见性:

static void setArchiveVisibilities(Configuration conf, String booleans) {
    conf.set(MRJobConfig.CACHE_ARCHIVES_VISIBILITIES, booleans);
  }

  static void setFileVisibilities(Configuration conf, String booleans) {
    conf.set(MRJobConfig.CACHE_FILE_VISIBILITIES, booleans);
  }

因此,即使在命令行中指定这些配置,也不会考虑配置参数。这些配置由框架本身以编程方式设置。
另外,我还检查了mapred-default.xml。可见性没有默认的配置参数。

相关问题