MapReduce中的分散式快取使用

2022-06-23 21:23:40 字數 1545 閱讀 7335

@(hadoop)

distributedcache是hadoop為mapreduce框架提供的一種分散式快取機制,它會將需要快取的檔案分發到各個執行任務的子節點的機器中,各個節點可以自行讀取本地檔案系統上的資料進行處理。

可以同在原本hdfs檔案路徑上+”#somename”來設定符號連線(相當於一個快捷方式)

這樣在mapreduce程式中可以直接通通過:

file file = new file("somename");
來獲得這個檔案

以下為預設值:

mapred.local.dir

$/mapred/localdir/filecache

local.cache.size

10737418240

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的啟動速度

excel中IF函式的使用方法和技巧

excel自身帶有排序功能,可使資料以降序或升序方式重新排列。如果將它與 if函 數結合,可以計算出沒有空缺的排名。以圖1中e2 e3 e4單元格的產值排序為例,具 體做法是 選中e2單元格,根據排序需 要,單擊excel工具欄中的 降序排序 或 升序 排序 按鈕,即可使工作表中的所有資料按要求重新...

Word2003中給經常使用的格式和樣式設定快捷鍵

長期處理文件工作的朋友有福了,本章word聯盟將教大家如何給使用最頻繁的格式和樣式設定一個快捷鍵,這樣以後每當在word中要用到這種格式和樣式的時候我們就不用設定一大堆的顏色 字型大小 加粗等等,只需一個快捷鍵即可輕鬆搞定! 下面我就使用word2003來為大家例項操作 一 單擊 格式 選單欄中的 ...