zoukankan      html  css  js  c++  java
  • hadoop拾遗(一)---- 避免切分map文件

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

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

    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;
    		}
    	}
    }
  • 相关阅读:
    Shell 编程基础之 Until 练习
    Shell 编程基础之 While 练习
    Shell 编程基础之 For 练习
    Shell 编程基础之 If 练习
    Kafka 0.8 Controller设计机制和状态变化
    5 Kafka 应用问题经验积累
    3 Kafka两个版本在Zookeeper的元数据存储
    Broker流量均衡 prefer reassign
    Kafka 0.8 Consumer Rebalance
    2 Kafka Broker
  • 原文地址:https://www.cnblogs.com/nocml/p/3292903.html
Copyright © 2011-2022 走看看