`
sunasheng
  • 浏览: 122753 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

读书笔记2:Hadoop组件-(2)剖析MapReduce程序

阅读更多

 

3,剖析 MapReduce 程序

<1>hadoop的数据类型

实现Writable 接口额类可以是值,而实现 WritableComparable 接口的类既可以是键也可以是值。

以下这些是常用的数据类型,均用于实现WritableComparable 借口:

BooleanWritable

ByteWritable

DoubleWritable

FloatWritable

IntWritable

LongWritable

Text 使用UTF8 格式的文本封装

NullWritable 无键值时的占位符

也可以自定义数据类型,但要实现Writable 接口或者 WritableComparable 接口。

<2>Mapper

一个类要作为mapper ,需要继承 MapReduceBase 基类和实现 Mapper 借口。

mapper reducer 的基类均为 MapReduceBase ,它包含类的构造和解构方法:

void configure(JobConf job);该函数提取 XML 配置文件或者应用程序主类中的参数,在数据处理之前调用该函。

void close();作为 map 任务结束前的最后一个操作,该函数完成所有的结尾工作,如关闭数据库、打开文件等。

Mapper借口负责数据处理阶段,采用的形式是 Mapper<K1,V1,K2,V2>java 泛型,键类和值类分别实现 WritableComparable Writable 借口。

Mapper只有一个方法 map 用于处理一个单独的键值对。

void map(K1 key,V1 value,OutputCollector<K2,V2> output,Reporter reporter)

该函数处理一个给定的键值对(K1,V1), 生成一个键值对 (K2,V2) 的列表。

OutputCollector接收这个映射过程的输入。

Reporter 可提供对 Mapper 相关附加信息的记录,形成任务进度。

 

Hadoop预定义的 Mapper 的实现 :

IdentityMapper<K,V>

实现Mapper<K,V,K,V> 就输入直接映射到输出

InverseMapper<K,V>

实现Mapper<K,V,K,V> 发转键值对

RegexMapper<K>

实现Mapper<K,Text,Text,LongWritable>, 为每个常规表达式的匹配项生成一个 (mathc,1)

TokenCountMapper<K>

实现Mapper<K,Text,Text,LongWritable>, 当输入的值为分词时,生成一个 (token,1)

<3>Reducer

reducer的实现也必须继承 MapReduceBase 类和实现 Reducer 接口。

Reducer接口只有一个方法,及时 reduce:

Void reduce (K2,key,Iterator<V2> values,OutputCollector<K3,V3> output,Reporter r)

Reducer任务接收来自各个 mapper 的输出时,按照键对输入数据进行排序,并将相同的键的值归并,然后调用 reduce 函数,并通过迭代处理那些与指定键相关联的值,生成一个列表 <K3,V3>

OutputCollector接收 reduce 阶段的输出,并写入输出文件。

Reporter 可提供对 Mapper 相关附加信息的记录,形成任务进度。

 

Hadoop预定义的 Reducer 的实现 :

IdentityReducer<K,V>

实现Reducer<K,V,K,V> ,将输入直接映射到输出

LongSumReducer<K>

实现<K,LongWritable,K,LongWritable>, 计算与给定键相对应的所有值的和

<4>Partitioner:重定向 Mapper 输出

其实在mapper reducer 之间有一个非常重要的环节,就是将 mapper 的结果输出给不同的 reducer ,这就是 Partitioner 的工作:(此工作常被称为: 洗牌

一般reducer 是多个,那么 mapper 应该将键值的输出给谁呢? Hadoop 默认的机制是对键进行散列来确定 reducer Hadoop 通过 HashPartitioner 类强制执行此策略。但是有的时候 HashPartitioner 会使得程序出错,即他的分发策略不符合实际的要求,那么此时就需要我们定制自己的 Partitioner ( 例如针对自定义的数据类型 Edge)

public   class  EdgePartitioner  implements  Partitioner<Edge,Writable>

{

@override

public   int  getPartition(Edge key,Writable value, int  numPartitions)

{

return  key.getDepartureNode().hashCode() % numPartitions;

}

@override

public   void  configure(JobConf conf)

{

}

}

自己定制的Partitioner 只需要实现 getPartition 方法和 configure 方法即可。前者将 Hadoop对作业的配置应用在 Partitioner上,而后者返回一个介于 0 reducer 任务数之间的整数,指向键值对要发送到的 reducer

Partitioner的形象的表达:(如下图)

<5>Combiner :本地 reduce

在分发mapper 之前先做一下“本地 reduce ”,也被成为合并,后面详细讲述。

<6>预定义 Mapper Reducer

使用预定义Mapper Reducer 改写前面的统计单词数量的程序: WordCount2.java

public   class  WordCount2 {

public   static   void  main(String args[])

{

JobClient client =  new  JobClient();

JobConf conf =   new  JobConf(WordCount2. class );

FileInputFormat.addInputPath(conf, new  Path(args[0]));

FileOutputFormat.setOutputPath(conf, new  Path(args[1]));

conf.setOutputKeyClass(Text. class );

conf.setOutputValueClass(LongWritable. class );

conf.setMapperClass(TokenCountMapper. class ); //hadoop自己的TokenCountMapper

conf.setCombinerClass(LongSumReducer. class ); //hadoop自己的LongSumReducer

conf.setReducerClass(LongSumReducer. class );

client.setConf(conf);

try

{

JobClient.runJob(conf);

} catch (Exception e)

{

e.printStackTrace();

}

}

}

分享到:
评论

相关推荐

    hadoop完全分布式集群搭建笔记

    ### Hadoop完全分布式集群搭建详解 #### 一、概述 Hadoop是一款开源的大数据处理框架,主要用于处理海量数据...通过这些步骤,可以成功搭建一个功能完备的Hadoop分布式集群,为后续的大数据分析任务提供坚实的基础。

    hadoop-2.6.0-cdh5.4.3:基于hadoop-2.6.0-cdh5.4.3版本的二进制阅读,以注释和博客的形式记录阅读笔记

    在这个版本中,CDH5.4.3基于Hadoop的核心版本2.6.0,包含了多个关键组件,如HDFS、MapReduce、YARN、HBase、Hive等。 1. **Hadoop分布式文件系统(HDFS)**:HDFS是Hadoop的核心组件,设计为运行在廉价硬件上,提供...

    Hadoop平台技术 模块1 Hadoop概述-单元设计.docx

    反思实践,整理学习笔记课后作业(1) 在职教云平台上完成相关练习题(2) 写一篇关于 Hadoop 集群搭建的心得体会教师讲解职教云教师:布置作业,提供指导学生:深入思考,完成作业 【知识点详解】 Hadoop 是一个开源...

    Hadoop笔记(word版).zip_Hadoop配置_大数据

    它主要由两个核心组件构成:Hadoop Distributed File System (HDFS) 和 MapReduce。HDFS为数据提供了高容错性的分布式存储,而MapReduce则用于分布式计算,使得大数据处理变得高效且可靠。 **Hadoop配置**是使用...

    HADOOP学习笔记

    6. 测试Hadoop集群:通过hadoop fs -ls 命令检查HDFS是否正常运行,或运行一个简单的MapReduce程序验证计算功能。 四、Hadoop实战应用 1. 数据备份与恢复:Hadoop可以作为企业的数据备份系统,利用其分布式特性...

    基于hadoop-2.6.0-cdh5.4.3版本的源码阅读,以注释及博客的形式记录阅读笔记.zip

    《Hadoop 2.6.0-cdh5.4.3 源码解析与学习笔记》 在当今大数据处理领域,Hadoop 是一个至关重要的开源框架,它为大规模数据处理提供了分布式计算的能力。本资料主要针对 Hadoop 2.6.0-cdh5.4.3 版本进行源码阅读,...

    传智黑马赵星老师hadoop七天课程资料笔记-第七天(全)

    这些笔记可能包括了对Hadoop核心组件的深度解析,如HDFS(Hadoop分布式文件系统)和MapReduce计算框架,以及可能涵盖YARN(Yet Another Resource Negotiator)资源调度器的使用。 【标签】"hadoop" 明确了这个...

    hadoop 笔记

    Hadoop的核心组件包括HDFS(Hadoop Distributed File System)和MapReduce。HDFS是一个分布式文件系统,可以存储海量数据并提供高吞吐量的数据访问能力;而MapReduce则是一种编程模型,用于处理和生成大规模数据集的...

    hadoop学习总结1-5

    它的核心由两个主要组件组成:Hadoop Distributed File System (HDFS) 和 MapReduce。 2. **HDFS(Hadoop分布式文件系统)**: HDFS是一种高度容错性的文件系统,旨在运行在廉价的硬件上。它将大文件分割成块并...

    hadoop3.1.3学习资料

    这个学习资料包含的"笔记"可能涵盖了Hadoop的核心组件、生态系统、安装配置以及实际操作等多个方面。以下是对Hadoop 3.1.3的一些关键知识点的详细说明: 1. **Hadoop核心组件**: - **HDFS(Hadoop Distributed ...

    hadoop文档

    - **hadoop笔记.ppt**:这可能是一个PPT形式的学习笔记,整理了Hadoop的关键概念、核心组件的工作原理以及一些实例分析。 总之,Hadoop作为一个强大的分布式计算框架,对于大数据处理和分析有着至关重要的作用。...

    hadoop常识讲义+笔记.zip

    2. Hadoop组件: - HDFS(Hadoop Distributed File System):Hadoop的核心组成部分之一,是一个分布式文件系统,具备高容错性和高吞吐量,用于存储大量数据。 - MapReduce:Hadoop的计算引擎,通过将大规模数据集...

    big-data-101:大数据101 Hadoop-Python-Jupyter Notebook-Sqoop-Hive

    Hive通过将SQL查询转换为MapReduce任务运行在Hadoop上,简化了大数据的分析工作,使得非Java背景的分析师也能处理Hadoop集群上的数据。 在“big-data-101-main”这个压缩包中,可能包含了关于如何安装配置这些工具...

    传智黑马赵星老师hadoop七天课程资料笔记-第二天(全)

    2. **HDFS(Hadoop Distributed File System)**:Hadoop的核心组件之一,是一个高容错性的分布式文件系统。HDFS的设计目标是处理PB级别的数据,通过将数据分布在大量的廉价硬件上,实现高可用性和高吞吐量的数据...

    传智黑马赵星老师hadoop七天课程资料笔记-第四天(全)

    3. **Shuffle过程**:"hadoop的shuffle中1和2的不同.jpg"可能解释了MapReduce中的Shuffle阶段,它是数据从Map阶段到Reduce阶段的中间处理步骤,包括分区、排序和合并,确保相同键值的数据聚集在一起。 4. **...

    Hadoop学习网址

    - **Hadoop简介**: 包括Hadoop的历史背景、核心组件介绍(如HDFS、MapReduce等)以及它们如何协同工作。 - **安装指南**: 提供了详细的步骤来指导用户如何在本地或集群环境中安装和配置Hadoop。 - **API文档**: ...

    hadoop安装及详细学习笔记

    ### Hadoop 安装及详细学习笔记 #### Hadoop 概述 Hadoop 是一个能够对大量数据进行分布式处理的软件框架,它旨在提供高扩展性、可靠性和高效性,适用于处理PB级别的数据集。Hadoop 的核心组件包括 HDFS(Hadoop ...

    hadoop笔记

    本笔记将深入探讨Hadoop的相关知识点,包括其设计理念、核心组件、工作原理以及实际应用。 一、Hadoop设计理念 Hadoop的设计源于Google的MapReduce论文和GFS(Google文件系统)。它遵循“廉价硬件”和“容错性”的...

Global site tag (gtag.js) - Google Analytics