`

MapReduce高级编程——自定义InputFormat——深入理解

 
阅读更多

0、本文承接上文 MapReduce高级编程——自定义InputFormat

1、环境配置,本文的开发环境请直接参考 基于Eclipse的Hadoop应用开发环境的配置

2、Mapper,Reducer参数解释

 

import java.io.IOException;

import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;

public class Point3DMapper extends Mapper<Text, Point3D, Text, Point3D>{
	protected void map(Text key, Point3D value, Context context) throws IOException, InterruptedException{
		context.write(key, value);
	}
}

 

   进入Mapper源代码可以看到

 

public class Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT> {

  public class Context 
    extends MapContext<KEYIN,VALUEIN,KEYOUT,VALUEOUT> {
    public Context(Configuration conf, TaskAttemptID taskid,
                   RecordReader<KEYIN,VALUEIN> reader,
                   RecordWriter<KEYOUT,VALUEOUT> writer,
                   OutputCommitter committer,
                   StatusReporter reporter,
                   InputSplit split) throws IOException, InterruptedException {
      super(conf, taskid, reader, writer, committer, reporter, split);
    }
  }
  
  /**
   * Called once at the beginning of the task.
   */
  protected void setup(Context context
                       ) throws IOException, InterruptedException {
    // NOTHING
  }

  /**
   * Called once for each key/value pair in the input split. Most applications
   * should override this, but the default is the identity function.
   */
  @SuppressWarnings("unchecked")
  protected void map(KEYIN key, VALUEIN value, 
                     Context context) throws IOException, InterruptedException {
    context.write((KEYOUT) key, (VALUEOUT) value);
  }
 

 

即,/**

* Text      -> KEYIN
* Point3D  -> VALUEIN
* Text       -> KEYOUT
* Point3D  -> VALUEOUT
**/
Mapper<Text, Point3D, Text, Point3D>

 

而,// Text -> ball etc. -> KEYOUT

// value -> .5, 12.7, 9.0 etc. -> VALUEOUT

context.write(key, value);

 

同理,我们查看Reducer源代码,可以看到,Mapper的KEYOUT类型和VALUEOUT类型,必须对应Reducer的KEYIN类型和VLUEIN类型。

 

public class Reducer<KEYIN,VALUEIN,KEYOUT,VALUEOUT> {

  public class Context 
    extends ReduceContext<KEYIN,VALUEIN,KEYOUT,VALUEOUT> {
    public Context(Configuration conf, TaskAttemptID taskid,
                   RawKeyValueIterator input, 
                   Counter inputKeyCounter,
                   Counter inputValueCounter,
                   RecordWriter<KEYOUT,VALUEOUT> output,
                   OutputCommitter committer,
                   StatusReporter reporter,
                   RawComparator<KEYIN> comparator,
                   Class<KEYIN> keyClass,
                   Class<VALUEIN> valueClass
                   ) throws IOException, InterruptedException {
      super(conf, taskid, input, inputKeyCounter, inputValueCounter,
            output, committer, reporter, 
            comparator, keyClass, valueClass);
    }
  }

  /**
   * Called once at the start of the task.
   */
  protected void setup(Context context
                       ) throws IOException, InterruptedException {
    // NOTHING
  }

  /**
   * This method is called once for each key. Most applications will define
   * their reduce class by overriding this method. The default implementation
   * is an identity function.
   */
  @SuppressWarnings("unchecked")
  protected void reduce(KEYIN key, Iterable<VALUEIN> values, Context context
                        ) throws IOException, InterruptedException {
    for(VALUEIN value: values) {
      context.write((KEYOUT) key, (VALUEOUT) value);
    }
  }

 

 

本文的目的是因为有些时候文档不是很清楚,而最好的方法是看源代码。“源码之前,了无秘密”。

 

对于MapReduce的细致执行流程,我推荐看例子经典,博客作者一流的Map Reduce – the Free Lunch is not over?。相信看完会有所收获!

 

 

0
0
分享到:
评论

相关推荐

    自定义MapReduce的InputFormat

    这是一项重要的编程任务,要求开发者深入理解Hadoop的输入处理机制,以及数据的内部结构。通过自定义InputFormat,你可以优化数据读取,使得MapReduce作业更好地适应你的数据集,从而提升整体的计算性能。

    Hadoop高级编程——构建与实现大数据解决方案.rar

    本压缩包“Hadoop高级编程——构建与实现大数据解决方案”将深入探讨如何利用Hadoop进行高效的数据操作,构建实际的大数据解决方案。 一、Hadoop概述 Hadoop是由Apache基金会开发的开源项目,主要由Hadoop ...

    Hadoop高级编程- 构建与实现大数据解决方案

    3. **MapReduce编程模型**:深入理解Map函数和Reduce函数的工作原理,以及Combiner和Partitioner的角色。编写Java MapReduce程序,实现自定义Mapper和Reducer类。 4. **YARN资源管理**:了解下一代JobTracker——...

    实验项目 MapReduce 编程

    实验项目“MapReduce 编程”旨在让学生深入理解并熟练运用MapReduce编程模型,这是大数据处理领域中的核心技术之一。实验内容涵盖了从启动全分布模式的Hadoop集群到编写、运行和分析MapReduce应用程序的全过程。 ...

    大数据实验 实验五:MapReduce 初级编程实践

    大数据实验 实验五:MapReduce 初级编程实践

    mapreduce wc单词计数 自定义分区 自定义排序实现

    在MapReduce框架中,"WordCount"是一个经典的例子,用于演示如何处理大数据并进行简单的统计。这个任务的主要目标是计算文本文件中每个单词...通过深入理解并掌握这些高级特性,开发者可以更好地驾驭大数据处理的任务。

    大数据实验5实验报告:MapReduce 初级编程实践

    【MapReduce初级编程实践】是大数据处理中的一项基础任务,主要应用于大规模数据集的并行计算。...通过这种方式,学习者能够深入理解大数据处理中的并行化计算原理,为后续更复杂的分布式数据处理任务打下基础。

    大数据实验四-MapReduce编程实践

    1. **掌握基本的MapReduce编程方法**:理解MapReduce的基本原理和编程流程,学会如何使用Java编写MapReduce程序。 2. **实现统计HDFS系统中多个文本文件中的单词出现频率**:通过实际操作,体验MapReduce在处理大...

    Hadoop高级编程之构建与实现大数据解决方案

    8. **案例实战**:通过实际项目或案例,例如日志分析、推荐系统、用户行为追踪等,深入理解和应用Hadoop编程技巧。 在提供的“Hadoop高级编程之构建与实现大数据解决方案.pdf”文件中,你将详细了解到以上所述的...

    【MapReduce篇03】MapReduce之InputFormat数据输入1

    在MapReduce编程模型中,InputFormat是至关重要的组件,它负责将存储在HDFS(Hadoop Distributed File System)上的数据转化为可以被MapTask处理的键值对。本文将深入讲解MapReduce的InputFormat,特别是默认的...

    MapReduce暑假大作业——基于紫荆的种子推荐.zip

    在这个“MapReduce暑假大作业——基于紫荆的种子推荐”项目中,我们将会深入理解并实践如何利用MapReduce来解决实际问题,特别是针对大数据环境下的推荐系统。这个项目涉及到的核心知识点包括MapReduce的工作原理、...

    MapReduce模型--自定义数据类型

    首先,了解Java和Hadoop之间的基本字段映射关系是理解自定义数据类型的基础。例如,在Java中常用的String类型,在Hadoop中对应的是Text类型。这种映射关系简化了数据在Hadoop生态系统中的处理流程,但当遇到特殊需求...

    MapReduce高级编程之本地聚集与Combinner

    在分布式计算领域,MapReduce是一种广泛使用的编程模型,主要用于处理和生成大规模数据集。本篇文章将深入探讨MapReduce中的本地聚集(Local Aggregation)和Combinner的概念,这两个特性是优化MapReduce性能的关键...

    MapReduce操作实例-倒排索引.pdf

    在计算机科学领域,尤其是大数据处理和搜索引擎技术中,倒排索引(Inverted Index)是一种高效的数据结构,常用于...通过理解这个实例,你可以更好地掌握MapReduce的工作原理,并将其应用于其他大规模数据处理任务。

    MapReduce操作实例-数据去重.pdf

    MapReduce是分布式计算的一种编程模型,常用于处理大规模数据集。在这个实例中,我们看到的是一个基于MapReduce的数据去重操作,这个操作在大数据处理中非常常见,尤其是当处理的数据源包含重复记录时。下面将详细...

    大数据技术原理及应用课实验5 :MapReduce初级编程实践

    **大数据技术原理及应用——MapReduce初级编程实践** MapReduce是一种分布式计算模型,由Google提出,主要用于处理和生成大规模数据集。在这个实验中,我们将学习如何利用MapReduce编程解决实际问题,包括数据去重...

    Hadoop之MapReduce编程实例完整源码

    一个自己写的Hadoop MapReduce实例源码,网上看到不少网友在学习MapReduce编程,但是除了wordcount范例外实例比较少,故上传自己的一个。包含完整实例源码,编译配置文件,测试数据,可执行jar文件,执行脚本及操作...

Global site tag (gtag.js) - Google Analytics