MapReduce中设置全局变量

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

提交job的函数中

  1. Configuration conf = new Configuration();   
  2.   
  3.   
  4. conf.setStrings("job_parms", "aaabbc"); //关键就是这一句  
  5.         Job job = new Job(conf, "load analysis");          
  6.         job.setJarByClass(LoadAnalysis.class);  
  7.         job.setMapperClass(LoadMapper.class);  
  8.         job.setReducerClass(LoadIntoHbaseReduce.class);  
  9.         job.setMapOutputKeyClass(Text.class);  
  10.         job.setMapOutputValueClass(Text.class);  
  11.    
  12.         FileInputFormat.addInputPath(job, new Path(otherArgs[0]));  


       

Mapper类中重写setup函数

     

  1. @Override  
  2.       protected void setup(Context context)  
  3.               throws IOException, InterruptedException {  
  4.           try {  
  5.               
  6.               //从全局配置获取配置参数  
  7.               Configuration conf = context.getConfiguration();  
  8.               String parmStr = conf.get("job_parms"); //这样就拿到了  
  9.                 
  10.              ......  
  11.                 
  12.           } catch (SQLException e) {  
  13.                 
  14.               e.printStackTrace();  
  15.           }  
  16.             
  17.       }  


当然 Reduce类中也可以同样操作 问题解决!

posted @ 2015-10-30 13:48  Q_Quan  阅读(1146)  评论(0)    收藏  举报