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;
    		}
    	}
    }
  • 相关阅读:
    用Android Studio 开发Android应用
    以前写的一个下载小说的工具
    折半算法的C#实现方式-递归和非递归
    128. 最长连续序列
    一语点醒技术人:你不是 Google(转载)
    计算机专业导论与思维系统--哈工大
    安卓笔记 09_28
    安卓学习笔记
    安卓数据库08_29
    08_28学习笔记Kotlin
  • 原文地址:https://www.cnblogs.com/nocml/p/3292903.html
Copyright © 2011-2022 走看看