Hadoop MapReduce解析

这篇具有很好参考价值的文章主要介绍了Hadoop MapReduce解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Hadoop MapReduce是一个用于处理大量数据的编程模型和一个相应的实现框架。MapReduce作业通常分为两个阶段:Map阶段和Reduce阶段。

Map阶段

在Map阶段,你编写的Map函数会对输入数据进行处理。每个输入数据片段(例如一行文本)都会被Map函数处理,并产生中间键值对。

以单词计数为例,如果输入数据是一句话,如 “hello world hello”,Map函数会产生以下中间键值对:

(hello, 1) (world, 1) (hello, 1) 

Reduce阶段

在Reduce阶段,所有Map阶段输出的中间键值对会被组合起来。具有相同键的值会一起处理。Reduce函数接收一个键和与该键相关的值的集合,然后合并这些值。

在单词计数的例子中,“hello” 这个键有两个值 “1”,Reduce函数将它们加起来,得到最终结果:

(hello, 2) (world, 1) 

Hadoop MapReduce的工作流程

  1. 输入:输入数据被分割成固定大小的片段,每个片段由一个Map任务处理。
  2. Map任务:每个Map任务读取输入片段,并执行Map函数,输出中间键值对。
  3. Shuffle和Sort:系统会自动将所有Map任务的输出按键排序,并将相同键的值发送到同一个Reduce任务。
  4. Reduce任务:每个Reduce任务处理一组具有相同键的值,执行Reduce函数,并输出最终结果。
  5. 输出:Reduce任务的输出被写入到文件系统(通常是HDFS)。

示例代码

以下是一个简单的MapReduce程序示例,该程序计算文本文件中各个单词的出现频率。

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapreduce.*;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class WordCount {

    // Map类
    public static class TokenizerMapper
       extends Mapper<Object, Text, Text, IntWritable>{

        private final static IntWritable one = new IntWritable(1);
        private Text word = new Text();

        public void map(Object key, Text value, Context context
                        ) throws IOException, InterruptedException {
            StringTokenizer itr = new StringTokenizer(value.toString());
            while (itr.hasMoreTokens()) {
                word.set(itr.nextToken());
                context.write(word, one);
            }
        }
    }

    // Reduce类
    public static class IntSumReducer
       extends Reducer<Text,IntWritable,Text,IntWritable> {
        private IntWritable result = new IntWritable();

        public void reduce(Text key, Iterable<IntWritable> values,
                           Context context
                           ) throws IOException, InterruptedException {
            int sum = 0;
            for (IntWritable val : values) {
                sum += val.get();
            }
            result.set(sum);
            context.write(key, result);
        }
    }

    // 主方法,配置MapReduce作业
    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf, "word count");
        job.setJarByClass(WordCount.class);
        job.setMapperClass(TokenizerMapper.class);
        job.setCombinerClass(IntSumReducer.class);
        job.setReducerClass(IntSumReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        FileInputFormat.addInputPath(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));
        System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
}

让我们对上面给出的WordCount MapReduce示例代码进行更加深入的分析:

主要组件

  • TokenizerMapper: 这是自定义的Mapper类,它继承自Hadoop的Mapper类。它的作用是读取文本数据,分割成单词,并为每个单词输出一个键值对,键是单词本身,值是整数1。
  • IntSumReducer: 这是自定义的Reducer类,继承自Hadoop的Reducer类。它的作用是将Mapper输出的键值对中,相同键(单词)的值(出现次数)进行累加,得到每个单词的总出现次数。

Mapper内部逻辑
TokenizerMappermap方法接收输入数据,每次调用处理一行文本。map方法使用StringTokenizer将文本行分割成单词,并为每个单词输出一个(Text, IntWritable)键值对,其中Text是单词,IntWritable是数字1。

Reducer内部逻辑
IntSumReducerreduce方法接收所有具有相同键的值的集合(Iterable<IntWritable>),并对这些值进行累加,得到这个键(单词)的总出现次数。之后,它输出一个(Text, IntWritable)键值对,其中Text是单词,IntWritable是该单词的总出现次数。

Job配置
main方法中配置了MapReduce作业:

  • setJarByClass: 设置作业的JAR文件,这样Hadoop可以将其发送到集群中的节点上执行。
  • setMapperClass: 设置Map阶段使用的Mapper类。
  • setCombinerClass: 设置Combiner类,用于在Map阶段之后和Reduce阶段之前对输出进行局部合并。在这个例子中,它和Reducer类是相同的,因为单词计数的合并操作是可交换的和可结合的。
  • setReducerClass: 设置Reduce阶段使用的Reducer类。
  • setOutputKeyClass: 设置作业输出的键类型。
  • setOutputValueClass: 设置作业输出的值类型。
  • FileInputFormat.addInputPath: 设置输入数据的路径。
  • FileOutputFormat.setOutputPath: 设置输出数据的路径。
    在MapReduce中,Combiner的作用是对Map阶段的输出进行局部合并,以减少网络传输的数据量。Reducer的作用是对所有Map任务的输出进行全局合并,得到最终结果。
    WordCount的例子中,Combiner和Reducer可以是同一个类,因为它们执行的操作是相同的:简单的整数求和。这个操作是可结合的(combine-able)和可交换的(commutative),意味着无论操作的顺序如何,或者如何分组执行这些操作,最终结果都是一样的。

运行作业
job.waitForCompletion(true)方法会提交作业到Hadoop集群并等待其完成。它返回一个布尔值,表示作业是否成功完成。

输入和输出

  • 输入: MapReduce作业的输入通常是文本文件或其他文件格式,存储在HDFS上。在这个例子中,每一行文本都会被作为一个记录传递给一个TokenizerMapper实例。
  • 输出: 输出是处理过后的结果,通常也是存储在HDFS上的文本文件。在这个例子中,输出文件包含了单词和对应的出现次数。

注意事项

  • 数据类型: 在MapReduce中使用的键值对数据类型必须实现Writable接口,因此Hadoop提供了一些基本数据类型的Writable版本,例如IntWritable用于整数,Text用于字符串。
  • 性能优化: Combiner可以显著减少Map和Reduce之间数据传输量,因为它在Map端进行局部合并,减少了网络传输的数据。
  • 容错与可扩展性: MapReduce框架本身具有处理节点失败的能力。如果某个节点执行失败,作业会被重新调度到另一个节点上执行。

这个WordCount程序是学习MapReduce的一个经典入门示例,它展示了MapReduce编程模型的基本概念:分解任务、处理数据并在集群中并行执行。

要运行这个MapReduce作业,需要将代码打包成一个JAR文件,并将其提交到Hadoop集群上运行。命令行参数提供输入和输出路径。例如:

hadoop jar wordcount.jar WordCount /input/path /output/path

这个例子展示了MapReduce编程模型的基本概念,实际的MapReduce作业可能会更复杂,包括自定义数据类型、多个Map和Reduce阶段、数据排序和分区等。文章来源地址https://www.toymoban.com/news/detail-851049.html

到了这里,关于Hadoop MapReduce解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大数据课程D4——hadoop的MapReduce

    文章作者邮箱:yugongshiye@sina.cn              地址:广东惠州 ⚪ 了解MapReduce的作用和特点; ⚪ 掌握MapReduce的组件; ⚪ 掌握MapReduce的Shuffle; ⚪ 掌握MapReduce的小文件问题; ⚪ 掌握MapReduce的压缩机制; ⚪ 掌握MapReduce的推测执行机制; ⚪ 掌握MapReduce的数据倾斜问题; 1.

    2024年02月15日
    浏览(47)
  • 大数据课程D3——hadoop的MapReduce

    文章作者邮箱:yugongshiye@sina.cn              地址:广东惠州 ⚪ 了解MapReduce的作用和特点; ⚪ 掌握MapReduce的组件; ⚪ 掌握MapReduce的Shuffle; ⚪ 掌握MapReduce的小文件问题; ⚪ 掌握MapReduce的压缩机制; ⚪ 掌握MapReduce的推测执行机制; ⚪ 掌握MapReduce的数据倾斜问题; 1.

    2024年02月14日
    浏览(43)
  • 【大数据】Hadoop_MapReduce➕实操(附详细代码)

    MapReduce是hadoop的核心组件之一,hadoop要分布式包括两部分,一是分布式文件系统hdfs,一是分布式计算框,就是mapreduce,二者缺一不可,也就是说,可以通过mapreduce很容易在hadoop平台上进行分布式的计算编程 sftp命令:Windows下登录Hadoop102 xftp root@hadoop102 , lcd 切换Windows路径,

    2024年02月01日
    浏览(38)
  • 大数据技术之Hadoop:MapReduce与Yarn概述(六)

    目录 一、分布式计算 二、分布式资源调度 2.1 什么是分布式资源调度 2.2 yarn的架构 2.2.1 核心架构 2.2.2 辅助架构 前面我们提到了Hadoop的三大核心功能:分布式存储、分布式计算和资源调度,分别由Hadoop的三大核心组件可以担任。 即HDFS是分布式存储组件,MapReduce是分布式计算

    2024年02月09日
    浏览(38)
  • Hadoop mapreduce课程设计-全球历史平均气温数据分析

    文章目录 前言 一、工具介绍 二、mapreduce数据处理 1.数据集准备  2.要求:对不同洲的平均温度处理--得到各大洲的平均温度 2.1 mapper阶段 2.2 reduce阶段 2.3 分区 2.4 Driver阶段 3.结果展示  4.将数据放入mongodb数据库 4.1 ktr展示 4.2 mongodb数据展示 ​编辑  5.使用pandas和pyecharts将数据

    2024年02月03日
    浏览(50)
  • 大数据面试题集锦-Hadoop面试题(三)-MapReduce

    你准备好面试了吗?这里有一些面试中可能会问到的问题以及相对应的答案。如果你需要更多的面试经验和面试题,关注一下\\\"张飞的猪大数据分享\\\"吧,公众号会不定时的分享相关的知识和资料。 目录 1、谈谈Hadoop序列化和反序列化及自定义bean对象实现序列化? 2、FileInputForma

    2024年02月11日
    浏览(57)
  • 大数据:Hadoop基础常识hive,hbase,MapReduce,Spark

    Hadoop是根据Google三大论文为基础研发的,Google 三大论文分别是: MapReduce、 GFS和BigTable。 Hadoop的核心是两个部分: 一、分布式存储(HDFS,Hadoop Distributed File System)。 二、分布式计算(MapReduce)。 MapReduce MapReduce是“ 任务的分解与结果的汇总”。 Map把数据切分——分布式存放

    2024年04月25日
    浏览(55)
  • 大型数据集处理之道:深入了解Hadoop及MapReduce原理

    在大数据时代,处理海量数据是一项巨大挑战。而Hadoop作为一个开源的分布式计算框架,以其强大的处理能力和可靠性而备受推崇。本文将介绍Hadoop及MapReduce原理,帮助您全面了解大型数据集处理的核心技术。 Hadoop简介 Hadoop是一个基于Google MapReduce论文和Google文件系统的分布

    2024年02月07日
    浏览(41)
  • 大数据技术之Hadoop:提交MapReduce任务到YARN执行(八)

    目录 一、前言 二、示例程序 2.1 提交wordcount示例程序 2.2 提交求圆周率示例程序 三、写在最后 我们前面提到了MapReduce,也说了现在几乎没有人再写MapReduce代码了,因为它已经过时了。然而不写代码不意味着它没用,当下很火的HIve技术就到了MapReduce,所以MapReduce还是相当重要

    2024年02月08日
    浏览(43)
  • 【云计算与大数据技术】大数据系统总体架构概述(Hadoop+MapReduce )

    企业级大数据应用框架需要满足业务的需求,一是要求能够满足基于数据容量大,数据类型多,数据流通快的大数据基本处理需求,能够支持大数据的采集,存储,处理和分析,二是要能够满足企业级应用在可用性,可靠性,可扩展性,容错性,安全性和隐私性等方面的基本

    2024年02月09日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包