Yarn下分布式缓存的注意事项有哪些
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍了Yarn下分布式缓存的注意事项有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、问题最近公司的集群从 Apac
千家信息网最后更新 2026年11月03日Yarn下分布式缓存的注意事项有哪些
这篇文章主要介绍了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-00000MR1 Path: hdfs://host:fs_port/dsap/rawdata/cmc_unitparameter/20140308/part-m-00000MR2 Path: /data4/yarn/local/usercache/root/appcache/application_1394073762364_1884/container_1394073762364_1884_01_000006/part-m-00000MR2 Path: /data17/yarn/local/usercache/root/appcache/application_1394073762364_1884/container_1394073762364_1884_01_000002/part-m-00000MR2 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下分布式缓存的注意事项有哪些"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
缓存
文件
分布式
代码
时代
篇文章
链接
地方
数据
问题
事项
注意事项
信息
函数
就是
变化
有关
不同
不周
原始
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
华服互联网科技靠谱吗
西安纸贵互联网科技有限公司
互联网 科技
互联网女皇 腾讯科技
互联网 科技服务平台
汉立互联网科技有限公司联系电话
广州优美互联网科技
互联网之后的科技是什么
晓花互联网科技有限公司网址
互联网保险科技创业
乌苏新华互联网科技做什么的
民营互联网公司国防科技
晋城互联网科技
元气玛特互联网科技公司是外包吗
美国互联网科技公司
图游互联网科技
福州德业互联网科技
科技互联网行业投资研究
西安左小互联网科技有限公司
广州全民伙伴互联网科技有限公司
保险科技 互联网保险
中国互联网科技工作委员会毛军
科技和互联网公司
互联网金融 科技金融
伴你行互联网科技有限公司
互联网科技咨询
互联网科技大会案例
哈尔滨新华互联网科技学院
江阴互联网智能科技产品进口
科技互联网经济论坛