文档章节

NLineInputFormat

Zero零_度
 Zero零_度
发布于 2015/01/11 18:34
字数 319
阅读 306
收藏 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);
 }
 
}

© 著作权归作者所有

上一篇: GenericWritable
Zero零_度
粉丝 70
博文 1325
码字总数 283013
作品 0
程序员
私信 提问
加载中

评论(0)

Hadoop TextInputFormat

TextInputFortmat TextInputFormat是默认的InputFormat。每条记录是一行输入。Key是LongWritable类型,存储该行在整个文件中的字节偏移量(不是行数),值是这行的内容,为一个Text对象。 例...

osc_dfoo6teb
2019/05/01
0
0
Hadoop_MapReduce工作原理

Hadoop_MapReduce工作原理 六个阶段: Input 文件输入 Splitting 分片 Mapping Shuffling Reducing Final result mapper的输入数据为KV对形式,每一个KV对都会调用map()方法,输出数据也是K...

BLUcoding
04/28
0
0
Hadoop学习之常用输入输出格式总结

目的 总结一下常用的输入输出格式。 输入格式 Hadoop可以处理很多不同种类的输入格式,从一般的文本文件到数据库。 开局一张UML类图,涵盖常用InputFormat类的继承关系与各自的重要方法(已省...

osc_ctwunyqq
2019/10/10
3
0
大数据技术之_05_Hadoop学习_02_MapReduce_MapReduce框架原理+InputFormat数据输入+MapReduce工作流程(面试重点)+Shuffle机制(面试重点)

第3章 MapReduce框架原理3.1 InputFormat数据输入3.1.1 切片与MapTask并行度决定机制3.1.2 Job提交流程源码和切片源码详解3.1.3 FileInputFormat切片机制3.1.4 CombineTextInputFormat切片机...

osc_8vgjpfw9
2019/02/15
3
0
InputFormat加载数据

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

Jason_typ
2018/06/13
29
0

没有更多内容

加载失败,请刷新页面

加载更多

仝卓学籍造假微博道歉,用Python抓取微博的评论看看群众都说什么

前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。 欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,...

osc_7ludm6s2
21分钟前
9
0
华为开发常用的2款利器,推荐给大家

Fiddler Fiddler是位于客户端和服务器端的HTTP代理,也是目前最常用的http抓包工具之一 。它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据、设置断点、...

osc_08xf0119
21分钟前
5
0
流行的JAVA IDE,你都用过哪几款?

  每一个Java程序员应该都有一款自己了解的IDE,挑选一款好的JavaIDE能够大大进步程序员的编程功率,一起有些IDE还供给的各式各样的辅助性功用,让人感觉写起代码能够飞起来!   本文收集...

osc_mbqdr3w5
23分钟前
17
0
Discourse 如何修改一个主题的分类

在你需要修改的主题后面,单击编辑的图标。 然后在弹出的界面中,进行选择你希望的分类,然后单击确定保存就可以了。 然后你就可以看到已经添加到新的主题分类中。 如果你还需要对名字或者分...

honeymoose
24分钟前
14
0
写优质Java代码的4个技巧

  咱们平时的编程使命不外乎便是将相同的技能套件应用到不同的项目中去,关于大多数状况来说,这些技能都是能够满意方针的。然而,有的项目或许需求用到一些特别的技能,因而工程师们得深入...

osc_1m04dwae
24分钟前
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部