@(hadoop)
distributedcache是hadoop為mapreduce框架提供的一種分布式快取機制,它會將需要快取的檔案分發到各個執行任務的子節點的機器中,各個節點可以自行讀取本地檔案系統上的資料進行處理。
可以同在原本hdfs檔案路徑上+」#somename」來設定符號連線(相當於乙個快捷方式)
這樣在mapreduce程式中可以直接通通過:
file
file = new
file("somename");
來獲得這個檔案
以下為預設值:
mapred.local.dirname>
$/mapred/localdir/filecachevalue>
property>
local.cache.sizename>
10737418240value>
property>
1.分發第三方庫(jar,so等)舊版本的distributedcache已經被註解為過時,以下為hadoop-2.2.0以上的新api介面,測試的hadoop版本為2.7.2。2.共享一些可以裝載進記憶體的檔案
3.進行類似join連線時,小表的分發
job job = job.getinstance(conf);
//將hdfs上的檔案加入分布式快取
job.addcachefile(new uri("hdfs://url:port/filename#symlink"));
由於新版api中已經預設建立符號連線,所以不需要再呼叫setsymlink(true)方法了,可以通過
system.out
.println(context.getsymlink());
來檢視是否開啟了建立符號連線。
之後在map/reduce函式中可以通過context來訪問到快取的檔案,一般是重寫setup方法來進行初始化:
@override
protected
void
setup(context context) throws ioexception, interruptedexception
bufferedreader.close();
filereader.close();
}}
得到的path為本地檔案系統上的路徑。
這裡的getlocalcachefiles方法也被註解為過時了,只能使用context.getcachefiles方法,和getlocalcachefiles不同的是,getcachefiles得到的路徑是hdfs上的檔案路徑,如果使用這個方法,那麼程式中讀取的就不再試快取在各個節點上的資料了,相當於共同訪問hdfs上的同乙個檔案。
可以直接通過符號連線來跳過getlocalcachefiles獲得本地的檔案。
單機安裝的hadoop沒有通過,提示找不到該檔案,待在集群上進行測試。
1.需要分發的檔案必須是儲存在hdfs上了2.檔案唯讀
3.不快取太大的檔案,執行task之前對進行檔案的分發,影響task的啟動速度
Hadoop MapReduce的分布式快取發布
新版本的mapreduce框架能夠利用分布式快取來發布mapreduce的應用。靠設定配置檔案,使用者可以執行不同版本的mapreduce程式而不是只能在集群上初始化乙個mapreduce。舉個例子 集群的管理員可以可以放多個版本的mapreduce到hdfs上,通過配置配置檔案maped site...
分布式處理之 MapReduce
mapreduce 是一種計算模型,簡單的說就是將大批量的工作 資料 分解 map 執行,然後再將結果合併成最終結果 reduce 這樣做的好處是可以在任務被分解後,通過大量機器進行分布式平行計算,減少整個操作的時間。也就是說,mapreduce 的原理就是乙個歸併排序。它的適用範圍為資料量大,但是...
分布式計算框架MapReduce
mapreduce思想在生活中處處可見。或多或少都曾接觸過這種思想。mapreduce的思想核心是 分而治之 適用於大量複雜的任務處理場景 大規模資料處理場景 map負責 分 即把複雜的任務分解為若干個 簡單的任務 來並行處理。可以進行拆分的前提是這些小任務可以平行計算,可以提高並行度。彼此間幾乎沒...