阅读目录(Content)

  • 一、背景
  • 二、大数据的并行计算
  • 三、Hadoop的MapReduce概述
    • 3.1、需要MapReduce原因
    • 3.2、MapReduce简介 
    • 3.3、MapReduce编程模型
  • 四、编写MapReduce程序
    • 4.1、数据样式与环境
    • 4.2、需求分析
    • 4.3、代码实现

前言

  前面以前把关于HDFS集群的所有知识给讲解完了,接下来给大家分享的是MapReduce这个Hadoop的并行计算框架。

一、背景

1)爆炸性增长的Web规模数据量

  

2)超大的计算量/计算复杂度

  

3)并行计算大趋所势

  

二、大数据的并行计算

1)一个大数据若可以分为具有同样计算过程的数据块,并且这些数据块之间不存在数据依赖关系,则提高处理速度最好的办法就是并行计算。

  

2)大数据并行计算

  

三、Hadoop的MapReduce概述

3.1、需要MapReduce原因

  

3.2、MapReduce简介 

  1)产生MapReduce背景

    

  2)整体认识

    MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算,用于解决海量数据的计算问题。
    MapReduce分成了两个部分:
      1)映射(Mapping)对集合里的每个目标应用同一个操作。即,如果你想把表单里每个单元格乘以二,那么把这个函数单独地应用在每个单元格上的操作就属于mapping。
      2)化简(Reducing)遍历集合中的元素来返回一个综合的结果。即,输出表单里一列数字的和这个任务属于reducing。
        你向MapReduce框架提交一个计算作业时,它会首先把计算作业拆分成若干个Map任务,然后分配到不同的节点上去执行,
        每一个Map任务处理输入数据中的一部分,当Map任务完成后,它会生成一些中间文件,这些中间文件将会作为Reduce任务的输入数据。
    Reduce任务的主要目标就是把前面若干个Map的输出汇总到一起并输出。
    MapReduce的伟大之处就在于编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。

3.3、MapReduce编程模型

  1)MapReduce借鉴了函数式程序设计语言Lisp中的思想,定义了如下的Map和Reduce两个抽象的编程接口。由用户去编程实现:

    

    注意:Map是一行一行去处理数据的。

  2)详细的处理过程

    

四、编写MapReduce程序

4.1、数据样式与环境

  1)环境   

    我使用的是Maven,前面 有我配置的pom.xml文件。

  2)数据样式

    这是一个专利引用文件,格式是这样的:

    专利ID:被引用专利ID

    1,2

    1,3

    2,3

    3,4

    2,4

4.2、需求分析

  1)需求

    计算出被引用专利的次数

  2)分析

    从上面的数据分析出,我们需要的是一行数据中的后一个数据。分析一下:

    在map函数中,输入端v1代表的是一行数据,输出端的k2可以代表是被引用的专利,在一行数据中所以v2可以被赋予为1。

    在reduce函数中,k2还是被引用的专利,而[v2]是一个数据集,这里是将k2相同的键的v2数据合并起来。最后输出的是自己需要的数据k3代表的是被引用的专利,v3是引用的次数。

    画图分析:

      

4.3、代码实现

  1)编写一个解析类,用来解析数据文件中一行一行的数据。

import org.apache.hadoop.io.Text;public class PatentRecordParser {//1,2//1,3//2,3//表示数据中的第一列private String patentId;//表示数据中的第二列private String refPatentId;//表示解析的当前行的数据是否有效private boolean valid;public void parse(String line){String[]  strs = line.split(",");if (strs.length==2){patentId = strs[0].trim();refPatentId = strs[1].trim();if (patentId.length()>0&&refPatentId.length()>0){valid = true;}}}public void parse(Text line){parse(line.toString());}public String getPatentId() {return patentId;}public void setPatentId(String patentId) {this.patentId = patentId;}public String getRefPatentId() {return refPatentId;}public void setRefPatentId(String refPatentId) {this.refPatentId = refPatentId;}public boolean isValid() {return valid;}public void setValid(boolean valid) {this.valid = valid;}
}

  2)编写PatentReference_0011去实现真正的计算

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.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;import java.io.IOException;public class PatentReference_0011 extends Configured implements Tool {//-Dinput=/data/patent/cite75_99.txtpublic static class PatentMapperextends Mapper<LongWritable,Text,Text,IntWritable>{private PatentRecordParser parser = new PatentRecordParser();private  Text key = new Text();//把进入reduce的value都设置成1private IntWritable value = new IntWritable(1);//进入map端的数据,每次进入一行。//MapReduce都是具有一定结构的数据,有一定含义的数据。//进入时候map的k1(该行数据首个字符距离整个文档首个字符的距离),v1(这行数据的字符串)@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {parser.parse(value);if (parser.isValid()){this.key.set(parser.getRefPatentId());context.write(this.key,this.value);}}}public static class PatentReducerextends Reducer<Text,IntWritable,Text,IntWritable>{@Overrideprotected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {int count = 0;for (IntWritable iw:values){count+=iw.get();}context.write(key,new IntWritable(count));//注意:在map或reduce上面的打印语句是没有办法输出的,但会记录到日志文件当中。}}@Overridepublic int run(String[] args) throws Exception {//构建作业所处理的数据的输入输出路径Configuration conf = getConf();Path input = new Path(conf.get("input"));Path output = new Path(conf.get("output"));//构建作业配置Job job = Job.getInstance(conf,this.getClass().getSimpleName()+"Lance");//如果不指定取的名字就是当前类的类全名//设置该作业所要执行的类job.setJarByClass(this.getClass());//设置自定义的Mapper类以及Map端数据输出时的类型job.setMapperClass(PatentMapper.class);job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(IntWritable.class);//设置自定义的Reducer类以及输出时的类型job.setReducerClass(PatentReducer.class);job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(IntWritable.class);//设置读取最原始数据的格式信息以及//数据输出到HDFS集群中的格式信息job.setInputFormatClass(TextInputFormat.class);job.setOutputFormatClass(TextOutputFormat.class);//设置数据读入和写出的路径到相关的Format类中TextInputFormat.addInputPath(job,input);TextOutputFormat.setOutputPath(job,output);//提交作业return job.waitForCompletion(true)?0:1;}public static void main(String[] args) throws Exception {System.exit(ToolRunner.run(new PatentReference_0011(),args));;}
}

  3)使用Maven打包好,上传到安装配置好集群客户端的Linux服务器中

  4)运行测试

    

    执行上面的语句,注意指定输出路径的时候,一定是集群中的路径并且目录要预先不存在,因为程序会自动去创建这个目录。

  5)然后我们可以去Web控制页面去观察htttp://ip:8088去查看作业的进度

转载于:https://www.cnblogs.com/jstarseven/p/7890911.html

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系列四:mapreduce的使用(二)

    转载请在页首明显处注明作者与出处 一:说明 此为大数据系列的一些博文,有空的话会陆续更新,包含大数据的一些内容,如hadoop,spark,storm,机器学习等. 当前使用的hadoop版本为2.6 ...

  6. Hadoop基础--HDFS/Yarn/MapReduce概述

    HDFS概述==> 1. Hadoop优势(4高): 1.高可靠性: Hadoop底层维护多个数据副本,所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失: 2.高扩展型: 在 ...

  7. 【零基础学Java】—Random的基本概述和使用(十二)

    [零基础学Java]-Random的基本概述和使用(十二) Random类用来生成随机的数字,使用起来也是三个步骤 导包:import java.util.Random; 创建:Random r=ne ...

  8. Hadoop技术(二)资源管理器YARN和分布式计算框架MapReduce

    资源管理器YARN和分布式计算框架MapReduce 第一章 Hadoop MapReduce 是什么 一 MapReduce 介绍 1. 基本介绍 2. MR数据流程方向 3. MR 原语/ 核心思 ...

  9. 【Hadoop】Hadoop生态系列之MapReduce概述及MapReduce任务开发与发布

    上一篇:Hadoop生态系列之HDFS常用Shell命令实践及Java API操作HDFS 这里写目录标题 MapReduce 概述 流程分析 环境搭建 MapReduce任务开发 背景 实现 任务发 ...

  10. Hadoop系列二:Hadoop单节点伪分布部署并执行mapreduce示例wordcount

    HDFS在集群上实现分布式文件系统,MapReduce在集群上实现了分布式计算和任务处理.HDFS在MapReduce任务处理过程中提供了文件操作和存储等支持,MapReduce在HDFS的基础上实现 ...

最新文章

  1. 3种团队分组适应项目_暴利生意:3种适合农村夫妻创业致富的项目,年赚10多万...
  2. 技巧打开网页进行客户个性化信息提交(代码编写)
  3. 回溯法解整数的划分问题(C语言)
  4. S3C2440 偷学
  5. 大数据发展的问题与机遇
  6. Spark- SparkSQL中 Row.getLong 出现NullPointerException错误的处理方法
  7. 【Spring】Spring 自定义scope
  8. azure blob_如何在Azure Blob存储中恢复意外删除
  9. 5 kvm虚拟磁盘扩容
  10. 什么是 Service Mesh?
  11. c# access oledb helper class
  12. Mac安装PyQt4
  13. 从三本院校到斩获字节跳动后端研发Offer
  14. 如何检测文档里含有非英字符_知网检测是算字数还是字符
  15. 学术英语阅读与写作6:讨论和结论discussion and conclusion
  16. 姓舒男孩名字简单大气,帮你解决起名的烦恼!
  17. 全球及中国生物农药行业投资状况与十四五运行态势研究报告2022版
  18. 《BackTrack 5 Cookbook中文版——渗透测试实用技巧荟萃》目录—导读
  19. Excel批量调整行高
  20. Privacy Definitions - (alpha, beta)-privacy

热门文章

  1. 三十二 、K8s审计
  2. 华为系列设备优先级总结(三)
  3. 课程设计——企业网络项目搭建(上)
  4. Subversion使用手記
  5. router阻止telnet自身的两种方法
  6. crm创建启用停用用户
  7. 卡巴斯基发现ATM病毒Skimmer改进版
  8. zabbix+ldap认证故障解决一例
  9. 算法-求两个有序数组两两相加的值最小的K个数
  10. 华为MA5200G实现radius认证登陆