如何使用Hadoop的DistributedCache?
操作步骤:1.将数据的分发到每个节点上:DistributedCache.addCacheFile(new URI("HDFS://cloud01:9000/user/hadoop/mrinput/ST.txt"), conf);注意,此操作一定要在创建Job,将conf传递给Job之前进行,否则数据文件的路径不会被Mapper中取到。2.在每个Mapper中获取文件URI,再进行相关操作: URI[] uris=DistributedCache.getCacheFiles(context.getConfiguration()); 比如读取该文件: FileSystem fs = FileSystem.get(URI.create("hdfs://cloud01:9000"), context.getConfiguration()); FSDataInputStream in = null; in = fs.open(new Path(uris[0].getPath())); BufferedReader br=new BufferedReader(new InputStreamReader(in));hadoop中的DistributedCache 2WordCount.javaHadoop的分布式缓存机制使得一个job的所有map或reduce可以访问同一份文件。在任务提交后,hadoop将由-files和-archive选项指定的文件复制到HDFS上(JobTracker的文件系统)。在任务运行前,TaskTracker从JobTracker文件系统复制文件到本地磁盘作为缓存,这样任务就可以访问这些文件。对于job来说,它并不关心文件是从哪儿来的。在使用DistributedCache时,对于本地化文件的访问,通常使用Symbolic Link来访问,这样更方便。通过 URI hdfs://namenode/test/input/file1#myfile 指定的文件在当前工作目录中被符号链接为myfile。这样job里面可直接通过myfile来访问文件,而不用关心该文件在本地的具体路径。
Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有