现象:和这个帖子描述的一样,简单说来就是,在Hadoop 2.x上,用新的DistributedCache的API,在mapper中会获取不到这个cache文件。
下面就详细地描述一下新旧API的用法区别以及解决办法。
『1』旧API
将HDFS文件添加到distributed cache中:
1
2
|
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()方法中:
1
2
3
|
Configuration conf = context.getConfiguration(); Path[] localCacheFiles = DistributedCache.getLocalCacheFiles(conf); readCacheFile(localCacheFiles[ 0 ]);
|
其中,readCacheFile()是我们自己的读取cache文件的方法,可能是这样做的(仅举个例子):
1
2
3
4
5
6
7
8
|
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中:
1
|
job.addCacheFile( new Path(inputFileOnHDFS).toUri());
|
在mapper的setup()方法中:
1
2
3
|
Configuration conf = context.getConfiguration(); URI[] localCacheFiles = context.getCacheFiles(); readCacheFile(localCacheFiles[ 0 ]);
|
其中,readCacheFile()是我们自己的读取cache文件的方法,可能是这样做的(仅举个例子):
1
2
3
4
5
6
7
8
|
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
如果还是不行的话,请参考以下方式:
job.addCacheFile(new URI("/user/mart_coo/gis/mapreduce/input/addressindex.txt#local"));
@Override protected void setup( Mapper<LongWritable, Text, Text, Text>.Context context) throws IOException, InterruptedException { if (context.getCacheFiles() != null && context.getCacheFiles().length > 0) { readCacheFile("./local"); } super.setup(context); }
相关推荐
在探讨Hadoop1.x与Hadoop2.x配置的异同之前,我们首先简要回顾一下GridGain In-Memory HDFS的特性,这是基于行业首个高性能双模式内存文件系统,完全兼容HDFS。GridGain FileSystem(GGFS)作为Hadoop HDFS的即插即...
理清Hadoop1.x与Hadoop2.x区别,对比分析。 Hadoop是大数据惊世之作,必学的东西,需要知道: 它由哪些部分组成? 各自的作用是什么? 如果工作的?
**Hadoop 2.x 入门指南** Hadoop 2.x 是一个开源的分布式计算框架,它是Apache Hadoop项目的最新版本,旨在提供高效、可扩展的数据处理能力。这个版本引入了若干关键改进,使得Hadoop更适合大数据处理的需求,提高...
在这篇文章中,我们将讨论Hadoop 2.x与Hadoop 3.x之间的比较。 Hadoop3版本中添加了哪些新功能,Hadoop3中兼容的Hadoop 2程序,Hadoop 2和Hadoop 3有什么区别? 二、Hadoop 2.x与Hadoop 3.x比较 本节将讲述Hadoop 2...
文档中提到,与Hadoop 2.x相比,3.x版本在集群安装和配置方面基本变化不大,但具体到新版本的特性以及对默认端口的改变上,还是存在一些需要特别注意的地方。 #### 1. Hadoop 3.x集群安装知识 在集群安装知识部分,...
Hadoop 3.x系列是Hadoop的主要版本之一,相比之前的Hadoop 2.x,它引入了诸多改进和优化,提升了整体的存储性能和计算效率。在本文中,我们将深入探讨Hadoop 3.x的关键特性、优化之处以及如何获取和安装这个版本。 ...
标题“win32win64hadoop2.7.x.hadoop.dll.bin”暗示了这是一个与Hadoop 2.7.x版本相关的二进制文件,适用于32位和64位的Windows操作系统。描述中提到,这些文件是用于在Windows环境下部署Hadoop时必需的组件,并且在...
hadoop2.x 介绍,及对比hadoop1.x的区别。hadoop2.x的新特性的详细介绍。
Hadoop 2.X HDFS源码剖析-高清-完整目录-2016年3月,分享给所有需要的人!
### Hadoop 2.x 入门知识点概览 #### 一、大数据应用发展前景 随着信息技术的飞速发展,数据量呈爆炸式增长,这不仅带来了挑战也孕育着新的机遇。根据2015年中国(深圳)IT领袖峰会的讨论,大数据正逐渐成为推动...
Hadoop 2.x Administration Cookbook 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
Hadoop是大数据技术中最重要的框架之一,是学习大数据必备的第一课,在Hadoop平台之上,可以更容易地开发和运行其他处理大规模数据的框架。尚硅谷Hadoop视频教程再次重磅升级!以企业实际生产环境为背景,增加了更...
Hadoop 2.x 是该框架的一个重要版本,引入了许多改进和优化,使得它更加适合企业级的大数据处理需求。本教程将详细讲解Apache Hadoop 2.x的安装过程,帮助初学者快速入门。 一、Hadoop的体系结构 Hadoop的核心由两...
这个版本特别针对Hadoop 3.x进行了优化,使得它能够充分利用Hadoop生态系统中的新特性和性能改进。在本文中,我们将深入探讨Spark 3.3.3与Hadoop 3.x的集成,以及它们在大数据处理领域的关键知识点。 首先,Spark的...
hadoop2.x安装指南.
Hadoop 2.x 是Hadoop发展的一个重要阶段,引入了许多关键改进,增强了系统的稳定性和可扩展性。本文将详细介绍如何在三节点环境下安装和配置Hadoop 2.x 集群。 一、环境准备 在开始Hadoop的安装前,你需要确保你的...
本教程将深入探讨如何在单节点环境中部署Hadoop 2.x版本,这对于初学者理解和测试Hadoop功能非常有帮助。我们将关注四个关键配置文件——core-site.xml、yarn-site.xml、hdfs-site.xml和mapred-site.xml,它们是...
【标题】"hadoop3.x带snappy(可用于windows本地开发)"所涉及的知识点主要集中在Hadoop 3.0版本以及Snappy压缩算法在Windows环境下的应用。Hadoop是一个开源的大数据处理框架,由Apache软件基金会开发,它使得在...
Hadoop 是一个基于分布式存储的大数据处理框架,本文档将详细介绍 Hadoop 3.x 的配置和底层原理,从零搭建集群以及解决遇到的问题,通过图形化的方式更好地理解 Hadoop 的作用。 一、HDFS 组成 HDFS(Hadoop ...