91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

庆安县| 泰顺县| 肇州县| 原阳县| 大埔县| 麻城市| 东安县| 曲沃县| 拉萨市| 黑河市| 涟源市| 鹿泉市| 安阳县| 阿尔山市| 灌阳县| 武城县| 八宿县| 锡林浩特市| 五原县| 东乡县| 五莲县| 柘城县| 保康县| 大足县| 来凤县| 镇平县| 平湖市| 东乡| 石家庄市| 康保县| 岳池县| 利川市| 大城县| 仁布县| 泸溪县| 富裕县| 富宁县| 泊头市| 宁都县| 延长县| 滦南县|