博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hadoop程序MapReduce之DataSort
阅读量:5220 次
发布时间:2019-06-14

本文共 2744 字,大约阅读时间需要 9 分钟。

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

样本: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
{ 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 lineNum = new IntWritable(1); @Override protected void reduce(IntWritable key, Iterable
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);            }}

 

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

 

转载于:https://www.cnblogs.com/xubiao/p/5759367.html

你可能感兴趣的文章
全国行政区
查看>>
GoFramework框架简介(一)配置文件篇
查看>>
Java集合框架学习
查看>>
第16周总结
查看>>
将Cent0S 7的网卡名称eno33改为eth0
查看>>
透明度Opacity多浏览器兼容处理
查看>>
oracle 常用简单命令语句
查看>>
【机器学习_3】常见术语区别
查看>>
Oracle基础 数据库备份和恢复
查看>>
C#编程时应注意的性能处理
查看>>
Java集合--概述
查看>>
1-TwoSum(简单)
查看>>
css box模型content-box 和border-box
查看>>
Android通过JNI实现守护进程与卸载后跳转指定网页
查看>>
C/C++函数使用
查看>>
Fragment
查看>>
Block With工具
查看>>
ztree自动生成树状图
查看>>
设置三级导航
查看>>
Python-String字符串的相关方法
查看>>