Hadoop学习笔记———《MultipleOutputs———将结果输出到指定的多个文件或文件夹》

本文介绍如何在MapReduce中利用MultipleOutputs类将结果输出到多个指定文件或文件夹,包括使用步骤、代码示例以及注意事项。

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

在MapReduce中使用MultipleOutputs将结果输出到指定的多个文件或文件夹

使用步骤主要有三步:

1、在reduce或map类中创建MultipleOutputs对象,将结果输出;

class TestReducer extends Reducer<Text, Text, Text, Text>{  
  
    //将结果输出到多个文件或多个文件夹  
    private MultipleOutputs mos;  

    protected void setup(Context context) throws IOException,InterruptedException {  
        mos = new MultipleOutputs<>(context);  // 初始化mos
     }  
          
      
    protected void cleanup(Context context) throws IOException,InterruptedException {  
        mos.close();  //关闭对象  
    }  
} 

 2、在map或reduce方法中使用MultipleOutputs对象输出数据,代替context.write();


protected void reduce(Text key, Iterable<Text> values, Context context)  
            throws IOException, InterruptedException {  
        .... // 计算key和value
        //使用MultipleOutputs对象输出数据  
        if(key.toString().equals("file1")){  
            mos.write("file1", key, value);  
        }else if(key.toString().equals("file2")){  
            mos.write("file2", key, value);    
        }
} 


 3、在创建job时,定义附加的输出文件(),这里的文件名称与第二步设置的文件名相同;

要注意的是hadoop是不承认未经注册namedOutput的,必须先在主函数中注册,然后才能写入,否则运行时会报not defined错误;所以要在主函数中用MultipleOutputs.addNamedOutput将对应的namedOutput文件注册一下。

//定义附加的输出文件  
 MultipleOutputs.addNamedOutput(job,"file1",TextOutputFormat.class,Text.class,Text.class);  
 MultipleOutputs.addNamedOutput(job,"file2",TextOutputFormat.class,Text.class,Text.class);



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值