一、简介

最小值是统计中最常使用到的,现在使用Mapreduce在海量数据中统计数据的最小值。

二、例子

(1)实例描述
给出三个文件,每个文件中都存储了若干个数值,求所有数值中的最小值。

样例输入:                                            
1)file1:

1
2
3
7
9
-99
2

2)file2:

11
2
23
17
9
199
22

3)file3:

21
12
3
17
2
39
12

期望输出:

-99

(2)问题分析
实现统计海量数据的最小值,不能将所有的数据加载到内存,计算只能使用类似外部排序的方式,加载一部分数据统计最小值,接着加载另一部分进行统计。

(3)实现步骤

1)Map过程 
    首先使用默认的TextInputFormat类对输入文件进行处理,得到文本中每行的偏移量及其内容。显然,Map过程首先必须分析输入的<key,value>对,得到数值,然后在mapper中统计单个分块的最小值。

2)Reduce过程 
    经过map方法处理后,Reduce过程将获取每个mapper的最小值进行统计,分行统计出最小值。

(3)关键代码

package com.mk.mapreduce;import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
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.output.FileOutputFormat;import java.io.IOException;
import java.net.URI;public class MinValue {public static class MinValueMapper extends Mapper<LongWritable, Text, IntWritable, NullWritable> {private Integer minValue = null;@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {if (StringUtils.isBlank(value.toString())) {System.out.println("空白行");return;}Integer v = Integer.valueOf(value.toString().trim());if(minValue==null||minValue > v){minValue = v;}}@Overrideprotected void cleanup(Context context) throws IOException, InterruptedException {if (minValue != null)context.write( new IntWritable(minValue), NullWritable.get());}}public static class MinValueReducer extends Reducer< IntWritable, NullWritable,IntWritable, NullWritable> {private Integer minValue = null;@Overrideprotected void reduce(IntWritable key, Iterable<NullWritable> values, Context context) throws IOException, InterruptedException {Integer v = key.get();if(minValue==null||minValue > v){minValue = v;}}@Overrideprotected void cleanup(Context context) throws IOException, InterruptedException {if (minValue != null)context.write( new IntWritable(minValue), NullWritable.get());}}public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {String uri = "hdfs://192.168.150.128:9000";String input = "/minValue/input";String output = "/minValue/output";Configuration conf = new Configuration();if (System.getProperty("os.name").toLowerCase().contains("win"))conf.set("mapreduce.app-submission.cross-platform", "true");FileSystem fileSystem = FileSystem.get(URI.create(uri), conf);Path path = new Path(output);fileSystem.delete(path, true);Job job = new Job(conf, "MinValue");job.setJar("./out/artifacts/hadoop_test_jar/hadoop-test.jar");job.setJarByClass(MinValue.class);job.setMapperClass(MinValueMapper.class);job.setReducerClass(MinValueReducer.class);job.setMapOutputKeyClass(IntWritable.class);job.setMapOutputValueClass(NullWritable.class);job.setOutputKeyClass(IntWritable.class);job.setOutputValueClass(NullWritable.class);FileInputFormat.addInputPaths(job, uri + input);FileOutputFormat.setOutputPath(job, new Path(uri + output));boolean ret = job.waitForCompletion(true);System.out.println(job.getJobName() + "-----" + ret);}
}

Hadoop入门(二十)Mapreduce的最小值程序相关推荐

  1. 2021年大数据Hadoop(二十二):MapReduce的自定义分组

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 MapReduce的自定义分组 需求 分析 实现 第一步: ...

  2. 2021年大数据Hadoop(二十九):​​​​​​​关于YARN常用参数设置

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 关于yarn常用参数设置 设置container分配最小内 ...

  3. 2021年大数据Hadoop(二十六):YARN三大组件介绍

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 Yarn三大组件介绍 ResourceManager No ...

  4. 2021年大数据Hadoop(二十五):YARN通俗介绍和基本架构

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 YARN通俗介绍和基本架构 Yarn通俗介绍 Yarn基本 ...

  5. Hadoop入门(二)——VMware虚拟网络设置+Windows10的IP地址配置+CentOS7静态IP设置(图文详解步骤2021)

    Hadoop入门(二)--VMware虚拟网络设置+Windows10的IP地址配置+CentOS7静态IP设置(图文详解步骤2021) 之前在上一篇文章中讲述了 CentOS7下载+VM上安装(手动 ...

  6. conan入门(二十):封装只包含头文件(header_only)的库示例

    conan: 封装只包含头文件(header_only)的库示例 有的C/C++项目只包含头文件,不需要编译,对于这种情况如何封装为Conan的包呢? Conan官方文档 <Package sc ...

  7. Hadoop入门(十二)Intellij IDEA远程向hadoop集群提交mapreduce作业

    Intellij IDEA远程向hadoop集群提交mapreduce作业,需要依赖到hadoop的库,hadoop集群的配置信息,还有本地项目的jar包. 一.软件环境 (1)window本地安装h ...

  8. 【软件开发底层知识修炼】二十六 ABI-应用程序二进制接口 学习总结文章目录

    前面学习了ABI的知识,感觉受益良多.对底层与编译器有更加深刻的认识,为此这里将前面写过的关于ABI 的文章给列出来,方便学习与翻阅. [软件开发底层知识修炼]二十一 ABI-应用程序二进制接口一 [ ...

  9. Hadoop入门(十九)Mapreduce的最大值程序

    一.简介 最大值是统计中最常使用到的,现在使用Mapreduce在海量数据中统计数据的最大值. 二.例子 (1)实例描述 给出三个文件,每个文件中都存储了若干个数值,求所有数值中的最大值. 样例输入: ...

最新文章

  1. java ResultSet常用操作
  2. 怎么用计算机杀毒,电脑怎样查杀病毒
  3. javascript闭包新认识
  4. 如何在Mac上快速签署PDF
  5. iphone GCDAsyncSocket 详解
  6. WinHttp用法(WinHttp.WinHttpRequest.5.1)
  7. es6入门到五连绝世之双杀(double kill)
  8. 大数据面试题_数据仓库篇
  9. 关于如何取消萤石云视频加密
  10. html如何图片转换成word文档格式,怎样把图片转换成word文档格式
  11. C# ip地址的查询
  12. android内存dump分析,闭眼能敲,Android内存分析command
  13. 计算机基础知识对编程的重要性
  14. 更改计算机用户名批处理,window批处理修改计算机名
  15. FreeMarker标签使用以及精度数字的处理
  16. 编写Makefile:编译当前文件夹以及子文件夹下所有的ccpp文件并生成可执行文件
  17. 不限距离4g/5g信号远程遥控小车
  18. 技术博客1鸿蒙系统和安卓的区别有哪些
  19. inter-因特尔-官网
  20. ranklib java_[LTR] RankLib.jar 包介绍

热门文章

  1. char截取字符串_字符串的排列(滑动窗口)
  2. leetcode209. 长度最小的子数组(滑动窗口)
  3. leetcode347. 前 K 个高频元素
  4. 7-1 作业调度算法--先来先服务 (30 分)(思路+详解+vector+map+map做法)Come Baby!!!!!!!!!!!
  5. Numpy中数组创建函数的辨析
  6. Java 实例 - 队列(Queue)用法
  7. 二叉树-树转二叉树 使用队列,编写transfrom函数,将普通树转换成对应的二叉树。
  8. mmdnn TensorFlow is outdated
  9. CF429E Points and Segments(欧拉回路)
  10. 牛客 CCA的区间 dp + 补集转移