Yarn下分布式缓存的注意事项有哪些
发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,这篇文章主要介绍了Yarn下分布式缓存的注意事项有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、问题最近公司的集群从 Apac
千家信息网最后更新 2025年02月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安全错误
数据库的锁怎样保障安全
网络安全补丁专门加固措施
网络安全法发行机制是
鬼泣服务器爆满怎么进
虚拟机的服务器日期可以更改吗
承德广东软件开发哪家好
sinomed数据库账号
c 优化数据库
灵瑞网络技术有限公司
无线网络技术第二版课后答案
广东软件开发工程师一个月多少
数据库自动补全是什么意思
浪潮服务器中国移动招标
中国移动网络技术优势
数据库的图片存储格式
延安网络安全法
移动公司最大的数据库在哪
华为V3服务器管理raid
远程修改服务器密码后登录不上去
visio软件开发流程图
文档管理系统服务器版
地理围栏 数据库
c 开发上位机软件开发
安徽云帮邦网络技术
软件开发的体会和收获
默认是数据库对象
少年三国志服务器有哪些
服务器安装centos没有网络
河北it软件开发高品质的选择
数据库三级模式有哪些好处
mes做软件开发