前一段时间在写一个MapReduce程序时,需要用到一些第三方的Jar包,于是运行程序时需要把这些Jar包一一上传到所有Hadoop节点。
当集群中增加一个节点或换一套集群环境时,又需要重新布置一遍这些Jar包,这样不仅费时,而且还容易遗漏、出错。并且,当我不再需要这些Jar包时,又得一个一个节点去清理。非常耗时。
后来查阅相关资料,发现Hadoop提供一个DistributedCache,用它可以把HDFS中的文件加载到DistributedCache中,当我们需要这些文件时,DistributedCache自动把这些文件下载到集群中节点的本地存储上(mapred.local.dir)。这样就不需要一一布置第三方的Jar包,并且Hadoop集群增加节点也不需要再上传了。
DistributedCache的使用方法,参考
http://hadoop.apache.org/common/docs/r0.20.2/api/org/apache/hadoop/filecache/DistributedCache.html。
// Setting up the cache for the application
1. Copy the requisite files to the FileSystem:
$ bin/hadoop fs -copyFromLocal lookup.dat /myapp/lookup.dat
$ bin/hadoop fs -copyFromLocal map.zip /myapp/map.zip
$ bin/hadoop fs -copyFromLocal mylib.jar /myapp/mylib.jar
$ bin/hadoop fs -copyFromLocal mytar.tar /myapp/mytar.tar
$ bin/hadoop fs -copyFromLocal mytgz.tgz /myapp/mytgz.tgz
$ bin/hadoop fs -copyFromLocal mytargz.tar.gz /myapp/mytargz.tar.gz
2. Setup the application's JobConf:
JobConf job = new JobConf();
DistributedCache.addCacheFile(new URI("/myapp/lookup.dat#lookup.dat"),
job);
DistributedCache.addCacheArchive(new URI("/myapp/map.zip", job);
DistributedCache.addFileToClassPath(new Path("/myapp/mylib.jar"), job);
DistributedCache.addCacheArchive(new URI("/myapp/mytar.tar", job);
DistributedCache.addCacheArchive(new URI("/myapp/mytgz.tgz", job);
DistributedCache.addCacheArchive(new URI("/myapp/mytargz.tar.gz", job);
3. Use the cached files in the Mapper
or Reducer:
public static class MapClass extends MapReduceBase
implements Mapper<K, V, K, V> {
private Path[] localArchives;
private Path[] localFiles;
public void configure(JobConf job) {
// Get the cached archives/files
localArchives = DistributedCache.getLocalCacheArchives(job);
localFiles = DistributedCache.getLocalCacheFiles(job);
}
public void map(K key, V value,
OutputCollector<K, V> output, Reporter reporter)
throws IOException {
// Use data from the cached archives/files here
// ...
// ...
output.collect(k, v);
}
}
DistributedCache 不光对第三方Jar有用,对于Read-Only的数据都可以,这样也扩展了我们编写MapReduce程序的思路。
分享到:
相关推荐
1. Hadoop简介2.... Hadoop在yahoo的应用附录A: 云计算在线监测平台附录B: Hadoop安装、运行、使用说明附录C:使用DistributedCache的MapReduce程序附录D:使用ChainMapper和ChainReducer的MapReduce程序
- **缓存文件**:利用 Hadoop 的 DistributedCache 功能将常用的小文件缓存在节点上,避免多次读取。 - **Combiner 使用**:在 Map 端使用 Combiner 函数预先聚合数据,减少网络传输量。 #### 五、案例分析 - **...
基于Hadoop的研究及性能分析 本文对Hadoop的研究及性能分析,首先介绍了Hadoop及其核心技术MapReduce的...本文对Hadoop技术的研究及性能分析,展示了Hadoop技术的应用前景和潜力,为社会发展提供了重要的参考价值。
在大数据处理框架Hadoop中,`DistributedCache`类是一个非常实用且强大的工具,主要用于缓存文件系统中的数据文件,以实现跨多个节点的数据共享。这对于提高分布式计算任务的性能至关重要,尤其是在进行复杂的连接...
总的来说,这篇论文深入研究了Hadoop在大数据环境下的应用及其性能优化,对于理解Hadoop的核心机制、推测执行策略以及MapReduce中的特定算法有重要价值。通过对Hadoop的深入研究,可以更好地应对大数据带来的挑战,...
1. Hadoop简介2.... Hadoop在yahoo的应用附录A: 云计算在线监测平台附录B: Hadoop安装、运行、使用说明附录C:使用DistributedCache的MapReduce程序附录D:使用ChainMapper和ChainReducer的MapReduce程序
DistributedCache 是 Map/Reduce 框架中的一个概念,负责缓存和共享作业中的中间结果,以便提高作业的执行效率。 Tool 是 Map/Reduce 框架中的一个组件,负责提供一些有用的功能,例如数据压缩和解压缩、数据排序和...
DistributedCache是Hadoop中的一个功能,允许在所有mapper和reducer之间共享文件,如库或配置文件。文中提出了一个基于DistributedCache的改进算法,通过减少mapper输出的数据量,从而减轻网络传输的负担,提升系统...
综上所述,MapReduce应用案例文档深入地介绍了MapReduce编程模型在Hadoop生态系统中的实际使用,包括对join操作的细节分析,以及如何搭建Hadoop环境,如何上传和管理测试数据。此外,文档还提供了Hadoop学习资源的...
Hadoop作为大数据生态的底层框架,Hive作为建立在Hadoop之上的数据仓库工具,二者在实际应用中都有着非常广泛的应用。淘宝作为国内知名的电商平台,其对Hadoop和Hive的调优以及开发经验具有较高的参考价值。 在对...
DistributedCache是Hadoop提供的一种分布式缓存机制,允许应用程序共享和复用大文件或公共资源。文中提出了一种基于DistributedCache的改进算法,通过减少mapper输出的数据,降低网络传输负载,从而优化整体性能。 ...
Hadoop MapReduce 是一个用于处理大规模数据集的软件框架,它使得开发者能够编写可以在大量廉价商用服务器组成的集群上运行的应用程序。该框架支持可靠的容错机制,并能够以并行的方式处理TB级别的数据集。 - **...
71.5.2 相同程序在MapReduce中的扩展 91.6 用Hadoop统计单词——运行第一个程序 111.7 Hadoop历史 151.8 小结 161.9 资源 16第2章 初识Hadoop 172.1 Hadoop的构造模块 172.1.1 NameNode 172.1.2 DataNode 182.1.3 ...
- **DistributedCache**:Hadoop的功能,用于缓存文件到各个工作节点,提高效率。 - **Hadoop档案**:归档工具,用于合并小文件以优化HDFS的存储效率。 - **安全性**:Hadoop支持安全模式,提供了权限管理、身份...
- **addFile方法**:在Spark应用程序中,可以使用`SparkContext#addFile`将文件添加到DistributedCache,使得这些文件可以在任务中被所有Task访问。 - **常见错误**: - 文件路径不正确导致无法加载。 - 文件格式...
位图技术在MapReduce中可以用于生成背景文件,然后通过Hadoop的DistributedCache传输到各节点,并加载到内存中,在map阶段过滤掉无结果的元组,但这种方法在过滤效果上仍有改进空间。 布隆过滤器(BloomFilter)是...
2. Zookeeper的使用场景:了解Zookeeper在大数据技术中的使用场景,例如在Hadoop、Kafka、Storm等系统中的应用。 大数据技术高频面试题总结涵盖了Linux、Hadoop、Zookeeper等多个方面的知识点,了解这些知识点对于...
HDFS是Hadoop的分布式文件系统,能够提供高吞吐量的数据访问,非常适合大规模数据集的应用。MapReduce是一个编程模型和处理大数据的相关实现。 HDFS有着高容错性的特点,能够部署在廉价的硬件上。它通过将数据分块...
在Hadoop框架中,MapReduce负责将大规模数据集分割成较小的数据块,并在集群中并行处理这些数据块,以提高计算效率。以下是MapReduce的一些关键概念和流程的详细解释: 1. **前置条件**:在开始MapReduce工作之前,...