中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Yarn下分布式緩存的注意事項有哪些

發布時間:2021-12-16 15:01:59 來源:億速云 閱讀:146 作者:小新 欄目:云計算

這篇文章主要介紹了Yarn下分布式緩存的注意事項有哪些,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

1、問題

最近公司的集群從 Apache hadoop 0.20.203 升級到了 CDH 4,邁進了 Hadoop 2.0 的新時代,雖然新一代的 hadoop 努力做了架構、API 上的各種兼容, 但總有“照顧不周”的地方,下面說的這個有關分布式緩存的案例就是于此有關:一些 MR job 遷移到 Yarn 上后,發覺沒數據了,而且沒有報錯。
查了下數據源和代碼,發現是分布式緩存(DistributedCache)的用法有點小變化。以前的老代碼大致如下:
 

(1)在 main 函數中添加分布式緩存文件:
...
String cacheFilePath = "/dsap/rawdata/cmc_unitparameter/20140308/part-m-00000";
DistributedCache.addCacheFile(new Path(cacheFilePath).toUri(), job.getConfiguration());
...
(2)在 MR 初始化的時候讀取緩存文件做數據字典:
...
// 從當前作業中獲取要緩存的文件
Path[] paths = DistributedCache.getLocalCacheFiles(context.getConfiguration());
for (Path path : paths) {
    if (path.toString().contains("cmc_unitparameter")) {
        ...
(3)結果:

這兩段代碼在 MR1 時代毫無問題,但是到了 MR2 時代 if 是永遠為 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 下面“失效了”。。。
 

2、解決方案

解決這個問題不難:

其實在 MR1 時代我們上面的代碼是不夠規范的,每次都遍歷了整個分布式緩存,我們應該用到一個小技巧:createSymlink

(1)main 函數中為每個緩存文件添加符號鏈接:類似于 HTTP URL 的 # 錨點一樣
...
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
(2)在需要用緩存文件的地方直接根據你剛才 # 后面自定義的文件名讀取即可
BufferedReader br = null;
br = new BufferedReader(new InputStreamReader(new FileInputStream("DIYFileName")));
(3)其它地方的用法和代碼與 MR1 無任何變化。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Yarn下分布式緩存的注意事項有哪些”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丰县| 新巴尔虎左旗| 宁远县| 囊谦县| 若羌县| 理塘县| 蓬莱市| 明水县| 咸阳市| 通化县| 万源市| 博野县| 茶陵县| 和静县| 翁牛特旗| 东兰县| 罗甸县| 宣化县| 班戈县| 吴堡县| 平遥县| 广饶县| 青铜峡市| 嫩江县| 泰宁县| 綦江县| 屏山县| 冷水江市| 巩义市| 呼伦贝尔市| 康平县| 博野县| 珠海市| 海盐县| 阿拉善盟| 丁青县| 集安市| 衡阳县| 广丰县| 吴忠市| 繁峙县|