您好,登錄后才能下訂單哦!
這篇文章主要介紹了Yarn下分布式緩存的注意事項有哪些,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
最近公司的集群從 Apache hadoop 0.20.203 升級到了 CDH 4,邁進(jìn)了 Hadoop 2.0 的新時代,雖然新一代的 hadoop 努力做了架構(gòu)、API 上的各種兼容, 但總有“照顧不周”的地方,下面說的這個有關(guān)分布式緩存的案例就是于此有關(guān):一些 MR job 遷移到 Yarn 上后,發(fā)覺沒數(shù)據(jù)了,而且沒有報錯。
查了下數(shù)據(jù)源和代碼,發(fā)現(xiàn)是分布式緩存(DistributedCache)的用法有點(diǎn)小變化。以前的老代碼大致如下:
... String cacheFilePath = "/dsap/rawdata/cmc_unitparameter/20140308/part-m-00000"; DistributedCache.addCacheFile(new Path(cacheFilePath).toUri(), job.getConfiguration()); ...
... // 從當(dāng)前作業(yè)中獲取要緩存的文件 Path[] paths = DistributedCache.getLocalCacheFiles(context.getConfiguration()); for (Path path : paths) { if (path.toString().contains("cmc_unitparameter")) { ...
這兩段代碼在 MR1 時代毫無問題,但是到了 MR2 時代 if 是永遠(yuǎn)為 false 的。
特意對比了下 MR1 和 MR2 時代的 path 格式,可以看到在 MRv2 下,Path 中不包含原始路徑信息了:
MR1 Path: hdfs://host:fs_port/dsap/rawdata/cmc_unitparameter/20140308/part-m-00000 MR1 Path: hdfs://host:fs_port/dsap/rawdata/cmc_unitparameter/20140308/part-m-00000 MR2 Path: /data4/yarn/local/usercache/root/appcache/application_1394073762364_1884/container_1394073762364_1884_01_000006/part-m-00000 MR2 Path: /data17/yarn/local/usercache/root/appcache/application_1394073762364_1884/container_1394073762364_1884_01_000002/part-m-00000 MR2 Path: /data23/yarn/local/usercache/root/appcache/application_1394073762364_1884/container_1394073762364_1884_01_000005/part-m-00000
看了上面兩種差異我想你能明白為啥分布式緩存在 MR2 下面“失效了”。。。
解決這個問題不難:
其實在 MR1 時代我們上面的代碼是不夠規(guī)范的,每次都遍歷了整個分布式緩存,我們應(yīng)該用到一個小技巧:createSymlink
... String cacheFilePath = "/dsap/rawdata/cmc_unitparameter/20140308/part-m-00000"; Path inPath = new Path(cacheFilePath); // # 號之后的名稱是對上面文件的鏈接,不同文件的鏈接名不能相同,雖然由你自己隨便取 String inPathLink=inPath.toUri().toString()+"#"+"DIYFileName"; DistributedCache.addCacheFile(new URI(inPathLink), job.getConfiguration()); ...
加了軟鏈接后,path 信息的最后部分就是你剛才的 DIYFileName:
/data4/yarn/local/usercache/root/appcache/application_1394073762364_1966/container_1394073762364_1966_01_000005/cmcs_paracontrolvalues /data4/yarn/local/usercache/root/appcache/application_1394073762364_1966/container_1394073762364_1966_01_000005/cmc_unitparameter
BufferedReader br = null; br = new BufferedReader(new InputStreamReader(new FileInputStream("DIYFileName")));
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Yarn下分布式緩存的注意事項有哪些”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。