需求:对文件中的数据进行排序。

样本:sort.log

10

13

10

20

输出:1 10

2 10

3 13

4 20

分析部分:

mapper分析:

1、<k1,v1>k1代表:行位置编号,v1代表:一行数据

2、<k2,v2>k2代表:一行数据,v2代表:此处为1.

reduce分析:

3、<k3,v3>k3代表:相同的key,v3代表:list<int>

4、合并输出:<k4,v4>k4代表:递增编号,v4代表:key值。

程序部分:

SortMapper类:

package com.cn.sort;

import java.io.IOException;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper; public class SortMapper extends Mapper<Object, Text, IntWritable, IntWritable> {
String line = null;
@Override
protected void map(Object key, Text value, Context context)
throws IOException, InterruptedException {
line = value.toString();
int lineValue = Integer.parseInt(line);
context.write(new IntWritable(lineValue), new IntWritable(1));
}
}

SortReduce类

package com.cn.sort;

import java.io.IOException;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.mapreduce.Reducer; public class SortReduce extends Reducer<IntWritable, IntWritable, IntWritable, IntWritable>{
IntWritable lineNum = new IntWritable(1);
@Override
protected void reduce(IntWritable key, Iterable<IntWritable> values,Context context)
throws IOException, InterruptedException {
for(IntWritable value : values){
context.write(lineNum, key);
lineNum = new IntWritable(lineNum.get()+1);
}
}
}

DataSort类

package com.cn.sort;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser; /**
* 数据排序
* @author root
*
*/
public class DataSort { public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
if (otherArgs.length != 2) {
System.err.println("Usage: DataSort ");
System.exit(2);
}
Job job = new Job(conf, "Data Sort");
job.setJarByClass(DataSort.class); //设置输入输出文件目录
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1])); //设置mapper和reduce处理逻辑类
job.setMapperClass(SortMapper.class);
job.setReducerClass(SortReduce.class); //设置输出key-value类型
job.setOutputKeyClass(IntWritable.class);
job.setOutputValueClass(IntWritable.class); //提交作业并等待它完成
System.exit(job.waitForCompletion(true) ? 0 : 1); } }

没事就把自己写过的代码总结哈。

hadoop程序MapReduce之DataSort的更多相关文章

  1. hadoop程序MapReduce之SingletonTableJoin

    需求:单表关联问题.从文件中孩子和父母的关系挖掘出孙子和爷奶关系 样板:child-parent.txt xiaoming daxiong daxiong alice daxiong jack 输出: ...

  2. hadoop程序MapReduce之average

    需求:求多门课程的平均值. 样板:math.txt zhangsan 90 lisi 88 wanghua 80 china.txt zhangsan 80lisi 90wanghua 88 输出:z ...

  3. hadoop程序MapReduce之DataDeduplication

    需求:去掉文件中重复的数据. 样板:data.log 2016-3-1 a 2016-3-2 b 2016-3-2 c         2016-3-2 b 输出结果: 2016-3-1 a 2016 ...

  4. hadoop程序MapReduce之MaxTemperature

    需求:求每年当中最高的温度 样本:temp.log 2016080623 2016072330 2015030420 输出结果:2016 30 2015 20 MapReduce分析设计: Mappe ...

  5. hadoop程序MapReduce之WordCount

    需求:统计一个文件中所有单词出现的个数. 样板:word.log文件中有hadoop hive hbase hadoop hive 输出:hadoop 2 hive 2 hbase 1 MapRedu ...

  6. 用PHP编写Hadoop的MapReduce程序

    用PHP编写Hadoop的MapReduce程序     Hadoop流 虽然Hadoop是用Java写的,但是Hadoop提供了Hadoop流,Hadoop流提供一个API, 允许用户使用任何语言编 ...

  7. Hadoop之MapReduce程序应用三

    摘要:MapReduce程序进行数据去重. 关键词:MapReduce   数据去重 数据源:人工构造日志数据集log-file1.txt和log-file2.txt. log-file1.txt内容 ...

  8. 如何在Windows下面运行hadoop的MapReduce程序

    在Windows下面运行hadoop的MapReduce程序的方法: 1.下载hadoop的安装包,这里使用的是"hadoop-2.6.4.tar.gz": 2.将安装包直接解压到 ...

  9. Hadoop之Mapreduce 程序

    package com.gylhaut.hadoop.senior.mapreduce; import java.io.IOException; import java.util.StringToke ...

随机推荐

  1. 登陆时不同浏览器获取session存在的相关疑问?

    问题1:在同一个电脑上,登陆成功后,将登陆信息存放到session域中后,使用另一个浏览器访问时,能否获取这个session域中的值? request.getSession().setAttribut ...

  2. CentOS 7 开放防火墙端口 命令

    iptables防火墙 1.基本操作 # 查看防火墙状态 service iptables status   # 停止防火墙 service iptables stop   # 启动防火墙 servi ...

  3. jquery ajax异步提交表单数据的方法

    使用jquery的ajax方法可以异步提交表单,成功后后台返回json数据,回调函数处理,可以不用刷新页面,达到异步的目的: 处理表单的数据可以用serialize()方法进行序列化,而如果提交的数据 ...

  4. eclipse tomcat timeout时间设置

    eclipse tomcat默认启动timeout时间太短,导致项目启动时间一长,就报错 如下设置: 工作空间\.metadata\.plugins\servers.xml文件 <?xml ve ...

  5. android从Dialog对话框中取得文本文字

    android中Dialog对话框获取文本文字,只需要使用editor的getText方法就可以获得,示例如下:final EditText et = new EditText(this); et.s ...

  6. VBA学习笔记(2)--新建word文档并插入文字

    说明(2017.3.20): 1. Dim As声明变量类型,Set赋值/初始化 2. With使后面的省略对象,直接点就行,后面要End With 3. Application.StatusBar ...

  7. perl ExtUtils::Manifest

    Can't locate ExtUtils/Manifest.pm in @INC (you may need to install the ExtUtils::Manifest module) yu ...

  8. 新闻门户网站图集相册JS代码

    新闻网站jQuery图集相册代码,支持键盘方向键切换,支持点击图片左右区域切换,支持自动轮播,带缩略图.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class= ...

  9. oracle 制定定时任务

    本节摘要:本节介绍使用oracle自带的job来实现oracle定制定时执行任务.   1.引言 定制定时执行的任务有两种形式,系统级别和数据库级别, 从操作系统级别来讲, windows系统我们可以 ...

  10. Hadoop的集群和优化

    Hadoop的集群和优化 Hadoop集群规模小到几个节点就可以组件一个集群,大到由几千个节点组成的超大集群. 在安装Hadoop集群时,把要安装的软件解压到集群内的所有机器上,软件的安装目录也要一致 ...