问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

hadoop新api什么接口可以替代distributedcache

发布网友 发布时间:2022-04-14 06:21

我来回答

2个回答

懂视网 时间:2022-04-14 10:43

转载请注明出处: http://www.codelast.com/ 现象:和 这个 帖子描述的一样,简单说来就是,在Hadoop 2.x上,用新的DistributedCache的API,在mapper中会获取不到这个cache文件。 下面就详细地描述一下新旧API的用法区别以及解决办法。 『1』 旧API 将HDFS文

转载请注明出处:http://www.codelast.com/

现象:和这个帖子描述的一样,简单说来就是,在Hadoop 2.x上,用新的DistributedCache的API,在mapper中会获取不到这个cache文件。
下面就详细地描述一下新旧API的用法区别以及解决办法。

『1』旧API
将HDFS文件添加到distributed cache中:

Configuration conf = job.getConfiguration();
DistributedCache.addCacheFile(new URI(inputFileOnHDFS), conf); // add file to distributed cache

其中,inputFileOnHDFS是一个HDFS文件的路径,也就是你要用作distribute cache的文件的路径,例如 /user/codelast/123.txt
在mapper的setup()方法中:

Configuration conf = context.getConfiguration();
Path[] localCacheFiles = DistributedCache.getLocalCacheFiles(conf);
readCacheFile(localCacheFiles[0]);

其中,readCacheFile()是我们自己的读取cache文件的方法,可能是这样做的(仅举个例子):

private static void readCacheFile(Path cacheFilePath) throws IOException {
 BufferedReader reader = new BufferedReader(new FileReader(cacheFilePath.toUri().getPath()));
 String line;
 while ((line = reader.readLine()) != null) {
 //TODO: your code here
 }
 reader.close();
}

文章来源:http://www.codelast.com/
『2』新API
上面的代码中,addCacheFile() 方法和 getLocalCacheFiles() 都已经被Hadoop 2.x标记为 @Deprecated 了。
因此,有一套新的API来实现同样的功能,这个链接里有示例,我在这里再详细地写一下。
将HDFS文件添加到distributed cache中:

job.addCacheFile(new Path(inputFileOnHDFS).toUri());

在mapper的setup()方法中:

Configuration conf = context.getConfiguration();
URI[] localCacheFiles = context.getCacheFiles();
readCacheFile(localCacheFiles[0]);

其中,readCacheFile()是我们自己的读取cache文件的方法,可能是这样做的(仅举个例子):

private static void readCacheFile(URI cacheFileURI) throws IOException {
 BufferedReader reader = new BufferedReader(new FileReader(cacheFileURI.getPath()));
 String line;
 while ((line = reader.readLine()) != null) {
 //TODO: your code here
 }
 reader.close();
}

但是就像文章开头的那个链接里所描述的问题一样,你可能会发现 context.getCacheFiles() 总是返回null,也就是你无法读到cache文件。
这个问题有可能是这个bug造成的,你可以对比一下你的Hadoop版本。
文章来源:http://www.codelast.com/
『3』解决办法
(1)打patch
(2)升级Hadoop版本
(3)使用旧的DistributedCache API,经测试OK
文章来源:http://www.codelast.com/

热心网友 时间:2022-04-14 07:51

个人感觉旧的Api 在实现Map 和 Rece上比较直接易懂(分的比较清晰)把实现的过程放到 throws IOException 里面写。 但是当然新的Api编写 的模式更加符合用户自己的需求,更加开放式了。 用户可以自定义更符合自己需求继承Map和Rece的类
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怎么样制作个人简历 上海海事大学对外交流多麽出国会不会容易一些 上海海事大学提前批今年要几号才能出来 怎么查找大学家长群 北京慧学堂在线教育学校的老师打电话来说要交3480元钱,给孩子半年的在... 左脸颊长青春痘是什么原因? 某商店上午9:00开始营业全天营业8小时下午几点关门 (2012?泗县模拟)某商店每天10:00-18:00营业,全天营业88小时. 某商店每天9:20-18:00营业,全天营业()小时。老师早上7:30到校,下午4... 商场营业时间是上午8:00-下午6:00,一位顾客向一位老先生嗯打听时间了... 这个号称能白发变黑的rty0534是骗子吗? 京东运营中流量分析是什么意思? 京东两家店流量会重叠吗 aa董氏养发固发 请大家不要相信,真的,那个董老师的微信圈都是做出来骗像我想治好头发的人的。 中国最有名的服装品牌是什么 安踏、匹克、李宁、乔丹是不是中国品牌?国际品牌有些什么? 中国著名品牌是什么意思?申请中国著名品牌对企业的发展有什么好处? 请知道的朋友帮忙回答。 GDF00093的老师能让白发变黑发是真的吗? 这个号称能白发变黑的rty0534是骗子吗? 京东流量到底是什么?排名无忧可以帮忙提呏么? 中国著名品牌与中国驰名商标有什么区别 生活中有什么品牌是中国的??? 京东“流量来源:站内其他商品。”是什么意思? 什么是中国品牌500强 什么样的企业需要广告 真正的中国品牌都有什么? 广告行业都是要做些什么, 中国的主要品牌是什么? 中国著名品牌是什么意思 什么样的企业需要打广告 江西自考怎么查看有没有报名 自考网上报名,怎么看自己交费成功没有? 如何查看自考免考报名成功 山东学生如何查询自考报名是否成功? 怎么查看自考毕业论文报名是否成功 河南人捐款吗 为什么我测试出来的网速很快,但是下载速度很慢 测试网速很快但是为什么下载速度很慢 为什么测试网速很快,下载速度很慢呢…… 组态王全屏显示怎么退出 威海环翠区有神马好的约会的场所、 威海有什么好酒店 原电池的原理问题 高中化学 原电池基本原理 这句话怎么理解:根据内电路离子的移动方向判断 在原电池电解质溶液中,阳离 招行信用卡积分规则 招行信用卡积分有哪些规则 招行信用卡积分是怎么算的阿! 95245350是哪里的电话? 有喜欢香香的么? 爬虫工程师为何这么少