MapReduce中的分布式快取使用

2022-05-06 05:30:09 字數 1694 閱讀 4919

@(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等)

2.共享一些可以裝載進記憶體的檔案

3.進行類似join連線時,小表的分發

舊版本的distributedcache已經被註解為過時,以下為hadoop-2.2.0以上的新api介面,測試的hadoop版本為2.7.2。

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負責 分 即把複雜的任務分解為若干個 簡單的任務 來並行處理。可以進行拆分的前提是這些小任務可以平行計算,可以提高並行度。彼此間幾乎沒...