MapReduce中设置全局变量

实际项目中遇到这样一个场景,需要运行一个MapReduce统计一些数据中的最大最小平均值等特性,将结果存入到HBase中。存结果的同时还要记录这次分析任务的编号,即所有的Reduce产生的结果中都要包含这个任务编号这个字段。当然我们可以把这个任务编号放到输入文件中的每一行中,作为输入数据的一部分,不过这样做显然太不专业,无端的增加了要处理的数据量,加重网络负担。经过网上搜索,发现可以用Configuration来实现。具体过程:

提交job的函数中

Configuration conf = new Configuration(); 


conf.setStrings("job_parms", "aaabbc"); //关键就是这一句
        Job job = new Job(conf, "load analysis");        
        job.setJarByClass(LoadAnalysis.class);
        job.setMapperClass(LoadMapper.class);
        job.setReducerClass(LoadIntoHbaseReduce.class);
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(Text.class);
 
        FileInputFormat.addInputPath(job, new Path(otherArgs[0]));


       

Mapper类中重写setup函数

     

  @Override
        protected void setup(Context context)
                throws IOException, InterruptedException {
            try {
              
                //从全局配置获取配置参数
                Configuration conf = context.getConfiguration();
                String parmStr = conf.get("job_parms"); //这样就拿到了
                
               ......
                
            } catch (SQLException e) {
                
                e.printStackTrace();
            }
            
        }

当然 Reduce类中也可以同样操作

问题解决!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值