hadoop拾遗(一)---- 避免切分map文件

转:http://www.cnblogs.com/nocml/p/3292903.html


  有些程序可能不希望文件被切分,而是用一个mapper完整处理每一个输入文件。例如,检查一个文件中所有记录是否有序,一个简单的方法是顺序扫描第一条记录并并比较后一条记录是否比前一条要小。如果将它实现为一个map任务,那么只有一个map操作整个文件时,这个算法才可行。

  有二种办法可以保证输入文件不被切分。第一种(最简单但不怎么漂亮的)方法就是增加最小分片大小,将它设置成大于要处理的最大文件大小。把它设置为最大值long.MAX_VALUE即可。每二种方法就是使用FileInputFormat具体子类,并且重载isSplitable()方法把返回值设置为false。例如,以下就是一个不可分割的TextInputFormat:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import  org.apache.hadoop.fs.*;
import  org.apache.hadoop.mapred.TextInputFormat;
import  org.apache.hadoop.mapreduce.JobContext;
 
 
public  class  DontSplitMap {
     
     //老的版本
     public  class  NonSplittableTextInputFormat4Old  extends  TextInputFormat{
         @Override
         protected  boolean  isSplitable(FileSystem fs , Path file)
         {
             return  false ;
         }
     }
     //较新的版本
     public  class  NonSplittableTextInputFormat4New  extends  org.apache.hadoop.mapreduce.lib.input.TextInputFormat{
         @Override
         protected  boolean  isSplitable(JobContext context, Path file)
         {
             return  false ;
         }
     }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值