2015-10-15 50 views
1

有沒有一種方法來設置由Hadoop的通用選項提供一個Hadoop MapReduce的本地資源的紗線知名度-files或-archives。在yarn-site.xml中查找我使用-archives選項找到了在worker節點上寫入文件的位置,但是基於我讀過的其他文章和它登錄的目錄(/ hadoop/yarn/local/usercache/myusername/appcache)它被視爲私有。我找不到任何通用選項或-D some.yarn.setting將其從私有應用程序更改爲應用程序或更好,公共。變化的Hadoop MapReduce的本地資源能見度PUBLIC

+0

你的問題不清楚。 「從私人到公共」的含義是什麼? –

+0

我在Hadoop的源戳周圍,發現字符串「mapreduce.job.cache.archives.visibilities」,它可以被設置爲逗號分隔的列表(每個-archives條目顯然),但設置在驅動程序配置沒有按似乎沒有幫助。 –

+0

如果您看[此Hortonworks鏈接](http:// hortonworks。com/blog/management-of-application-dependencies-in-yarn /),您會發現可以將地圖縮減作業捆綁的文件和存檔的本地資源可見性從私有(默認)更改爲公共和公共可見將允許文件在應用程序的運行之間持續存在。私人資源將在用戶每次運行應用程序後被刪除。 –

回答

1

我通過Hadoop的代碼去了。這些參數(mapreduce.job.cache.files.visibilitiesmapreduce.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()。此功能上傳的臨時文件,罐子和檔案館分佈式緩存:

這個功能決定的文件和檔案的知名度,通過調用以下功能:

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

上述函數調用,終於命中determineCacheVisibilities()函數org.apache.hadoop.mapreduce.filecache.ClientDistributedCacheManager.java

按本功能的描述:

/** 
    * 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.javaisPublic()方法具有計算能見度的邏輯:

//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中。可見性沒有默認配置參數。

+0

你搖滾。我發佈後發現了兩個常量,但沒有看到任何明顯的方向去調查。有趣的是,我上面的評論中的Hortonworks鏈接隱約提到了文件的權限,但沒有像你所做的那樣拼寫出任何內容。做得好! –