毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 报告 >> 正文

hadoop多文件输出使用多个Reduce

更新时间:2014-11-20:  来源:毕业论文

hadoop多文件输出使用多个Reduce
现实环境中,常常遇到一个问题就是想使用多个Reduce,但是迫于setup和cleanup在每一个Reduce中会调用一次,只能设置一个Reduce,无法是实现负载均衡。

问题,如果要在reduce中输出两种文件,一种是标志,另一种是正常业务数据,实现方案有三种:

(1)设置一个reduce,在reduce中将数据封装到一个集合中,在cleanup中将数据写入到hdfs中,但是如果数据量巨大,一个reduce无法充分利用资源,实现负载均衡,但是如果数据量较小,可以使用

(2)设置多文件输出,使用MultipleOutputs类

具体见代码:

    private MultipleOutputs mos;  
     
    @Override  
    protected void setup(Context context)  
    throws IOException, InterruptedException {  
      mos=new MultipleOutputs(context); 
    }  
    @Override  
    protected void reduce(Text key, Iterable<Text> values, Context context)  
    throws IOException, InterruptedException {  
     
    String key1=key.toString();  
    for(Text t:values){  
       if(key1.equals("a")){  
       mos.write("a", key,t);  
       } else if(key1.equals("b")){  
       mos.write("b", key,t);     
       } else if(key1.equals("c")){  
       mos.write("c", key,t);  
        
       }  
     }  
    }  
    @Override  
    protected void cleanup(  
    Context context)  
    throws IOException, InterruptedException {  
    mos.close(); 
    }  

[java] view plaincopyprint?

    main方法中配置 

[java] view plaincopyprint?

    <pre name="code" class="java">MultipleOutputs.addNamedOutput(job, "a", TextOutputFormat.class, Text.class, Text.class); 
    MultipleOutputs.addNamedOutput(job, "b", TextOutputFormat.class, Text.class, Text.class); 
    MultipleOutputs.addNamedOutput(job, "c", TextOutputFormat.class, Text.class, Text.class); 

    结果文件为  a-r-0000,b-r-0000,c-r-0000,part-r-0000 

(3)第三种方案是自己实现多文件输出 http://www.lwfree.cn/daima/19297.html

hadoop多文件输出使用多个Reduce下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©lwfree.cn 六维论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。