mapreduce分布式缓存

本文介绍如何将HDFS中的文件复制到Map/Reduce程序端供代码使用,适用于大文件与小文件合并场景,例如处理10GB的大文件和10MB的小文件,且支持不同输入格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述
  • 作用
  • 应用场景
  • 示例
作用
  • 将hdfs中的文件copy到本地map/reduce程序端,供map/reduce端代码使用

应用场景

  • 大文件与小文件合并操作,如大文件10G,小文件10M,并且输入格式可以完全不一样
示例
  • 主函数端代码
  • public static void main(String[] args) throws Exception {
    		Configuration conf = new Configuration();
    		Job job = new Job(conf);
    		job.getConfiguration().set("xyz", "fileHdfsLocation");
    }
  • map或reduce类端
  • public static class LogMapper extends
    			Mapper<Object, LongWritable, xxx, xxx> {
    		private static HashSet<String> smallCollection = null;
    
    		protected void setup(Context context) throws IOException,
    				InterruptedException {
    			smallCollection = new HashSet<String>();
    			Path fileIn = new Path(context.getConfiguration().get("xyz"));
    			FileSystem hdfs = fileIn.getFileSystem(context.getConfiguration());
    			FSDataInputStream hdfsReader = hdfs.open(fileIn);
    			Text line = new Text();
    			LineReader lineReader = new LineReader(hdfsReader);
    			while (lineReader.readLine(line) > 0) {
    				//you can do something here
    				System.out.println(line.toString());
    				smallCollection.add(line.toString());
    			}
    			lineReader.close();
    			hdfsReader.close();
    		}
    		public void map(Object key, Text value, Context context)
    				throws IOException, InterruptedException {
    			// use this Hashset
    		}
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值