文档章节

NLineInputFormat

Zero零_度
 Zero零_度
发布于 2015/01/11 18:34
字数 319
阅读 74
收藏 0

package com.test;

import java.io.IOException;
import java.util.Iterator;
import java.util.StringTokenizer;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.NLineInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;

/**
 * TextInputFormat处理的数据来自于一个InputSplit。InputSplit根据块大小划分。
 * 由于每条记录有长有短,所以,每个map任务处理的记录数都不一样
 * NLineInputFormat决定每个map处理记录数是相同的
 */
public class WordCountNL extends Configured implements Tool {
 
 public static class Map extends Mapper<LongWritable, Text, Text, IntWritable> {
  public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
   String line = value.toString();
   
   StringTokenizer st = new StringTokenizer(line);
   while(st.hasMoreElements()) {
    context.write(new Text(st.nextElement().toString()), new IntWritable(1));
   }
  }
 }
 
 public static class Combiner extends Reducer<Text, IntWritable, Text, IntWritable> {
  public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
   int count = 0;
   Iterator<IntWritable> it = values.iterator();
   while(it.hasNext()) {
    count = count + it.next().get();
   }
   context.write(key, new IntWritable(count));
  }
 }
 
 public static class Reduce extends Reducer<Text, IntWritable, Text, IntWritable> {
  public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
   int count = 0;
   Iterator<IntWritable> it = values.iterator();
   while(it.hasNext()) {
    count = count + it.next().get();
   }
   context.write(key, new IntWritable(count));
  }
 }
 
 public int run(String[] args) throws IOException, InterruptedException, ClassNotFoundException {
  Configuration conf = this.getConf();
  //设置每个map可以处理多少行数据
  //conf.set("mapreduce.input.lineinputformat.linespermap", "1");
  conf.set(NLineInputFormat.LINES_PER_MAP, "1");

  
  Job job = new Job(conf);
  job.setJobName(WordCountNL.class.getSimpleName());
  job.setJarByClass(WordCountNL.class);
  
  FileInputFormat.addInputPath(job, new Path(args[0]));
  FileOutputFormat.setOutputPath(job, new Path(args[1]));
  
  job.setMapperClass(Map.class);
  job.setCombinerClass(Combiner.class);
  job.setReducerClass(Reduce.class);
  
  job.setInputFormatClass(NLineInputFormat.class);
  job.setOutputFormatClass(TextOutputFormat.class);
  
  job.setOutputKeyClass(Text.class);
  job.setOutputValueClass(IntWritable.class);
  
  job.waitForCompletion(true);
  
  return job.isSuccessful()?0:1;
 }
 
 public static void main(String[] args) throws Exception {
  int exit = ToolRunner.run(new WordCount(), args);
  System.exit(exit);
 }
 
}

© 著作权归作者所有

共有 人打赏支持
Zero零_度
粉丝 67
博文 1245
码字总数 252866
作品 0
程序员
mapreduce按行划分MAP,即实现输入文件按行划分,每N行一个MAP

按行划分MAP,即实现输入文件按行划分,每N行一个MAP //设置JOB的格式化输入类为NLineInputFormat job.setInputFormatClass(NLineInputFormat.class) //设置每N行为一个MAP,当然,这个数据最...

闵开慧
2014/07/17
0
0
InputFormat加载数据

InputFormat是一个抽象类,其定义如下: InputFormat会对数据进行两方面的处理: 对输入数据进行逻辑切分,形成一个个split 针对每个split,新建一个RecorReader读取split里面的数据,形成一...

Jason_typ
06/13
0
0
Hadoop输入和输出的处理类(7)

hadoop输入的处理类 InputFormat InputFormat负责处理MR的输入部分。 作用: 1、验证作业的输入是否规范。 2、把输入文件切分成InputSplit。 3、提供RecordReader的实现类,把InputSplit读到...

肖鋭
2014/03/01
0
0
MapReduce多种输入格式

MapReduce多种输入格式 文件是 MapReduce 任务数据的初始存储地。正常情况下,输入文件一般是存储在 HDFS 里面。这些文件的格式可以是任意的:我们可以使用基于行的日志文件,也可以使用二进...

wypersist
05/06
0
0
MapReduce编程二

(1) InputFormat接口 用户需要实现该接口以指定输入文件的内容格式。该接口有两个方法 public interface InputFormat<K, V> { InputSplit[] getSplits(JobConf job, int numSplits) throws......

张欢19933
2016/03/30
38
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Confluence 6 删除垃圾内容

属性(profile)垃圾 属性垃圾的定义为,一个垃圾用户在 Confluence 创建了用户,但是这个用户在自己的属性页面中添加了垃圾 URL。 如果你有很多垃圾用户在你的系统中创建了属性,你可以使用...

honeymose
今天
0
0
qduoj~前端~二次开发~打包docker镜像并上传到阿里云容器镜像仓库

上一篇文章https://my.oschina.net/finchxu/blog/1930017记录了怎么在本地修改前端,现在我要把我的修改添加到部署到本地的前端的docker容器中,然后打包这个容器成为一个本地镜像,然后把这...

虚拟世界的懒猫
今天
1
0
UML中 的各种符号含义

Class Notation A class notation consists of three parts: Class Name The name of the class appears in the first partition. Class Attributes Attributes are shown in the second par......

hutaishi
今天
1
0
20180818 上课截图

小丑鱼00
今天
1
0
Springsecurity之SecurityContextHolderStrategy

注:下面分析的版本是spring-security-4.2.x,源码的github地址是: https://github.com/spring-projects/spring-security/tree/4.2.x 先上一张图: 图1 SecurityContextHolderStrategy的三个......

汉斯-冯-拉特
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部