`
韩悠悠
  • 浏览: 839945 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

hadoop学习笔记4

 
阅读更多

Writable接口
1、对java中的int型进行封装那么就是hadoop中的IntWritable类,在写程序的时候可以把IntWritable可以看着是int类型,它实现了WritableComparable接口,WritableComparable又是Writable、java.lang.comparable接口的子接口。
2、我们可以自定义Writable接口,来编写更复杂的结构的类,核心:hadoop有自己一套的I/O机制,I/O类都必须实现Writable接口。
------------------------------------------------------------
mapreduce驱动默认的设置
inputFormat(输入)-----TextInputFormat
MapperClass ------------IdentityMapper
MapRunnerClass(map启动类)---------MapRunner
MapOuputKeyClass-------------LongWritable
MapOutputValueClass--------Text
PartitionerClasss----------HashPartitioner
ReduceClass ---------------IdentityReduce
OutputKeyClass --------------LongWritable
OutputValueClass--------------Text
OutputFormatClass----------TextOutputFormat
---------------------------------------------------
Combiners和Partitioner编程
Combiners的作用
 每一个map可能会产生大量的输出,combiner的作用就是在map端对输出先做一次合并,以减少传输到reducer的数据量,
   1)combiner最基本是实现本地key的聚合,对map输出的key排序,value进行迭代。如下所示:map: (K1, V1) → list(K2, V2)?combine: (K2, list(V2)) → list(K2, V2)?reduce: (K2, list(V2)) → list(K3, V3)
   2)combiner还具有类似本地的reduce功能.例如hadoop自带的wordcount的例子和找出value的最大值的程序,combiner和reduce完全一致。如下所示:map: (K1, V1) → list(K2, V2)?combine: (K2, list(V2)) → list(K3, V3)?reduce: (K3, list(V3)) → list(K4, V4)?
  3)如果不用combiner,那么,所有的结果都是reduce完成,效率会相对低下。使用combiner,先完成的map会在本地聚合,提升速度。
   4)对于hadoop自带的wordcount的例子,value就是一个叠加的数字,所以map一结束就可以进行reduce的value叠加,而不必要等到所有的map结束再去进行reduce的value叠加。

注意:combiner使用的合适,可以在满足业务的情况下提升job的速度,如果不合适,则将导致输出的结果不正确。
Combiner的输出是Reducer的输入,Combiner绝不能改变最终的计算结果。所以从我的想法来看,Combiner只应该用于那种Reduce的输入key/value与输出key/value类型完全一致,且不影响最终结果的场景。比如累加,最大值等。
-------------------------------------------------------------------------------------
 Combiners分析
假设有两个map。
第一个map的输出为:
(1950,0)
 (1950,20)
 (1950,10)
第二个map输出为:
(1950,25)
 (1950,15)
 (1950,30)
Reduce函数被调用是,输入如下:
(1950,[0,20,10,25,15,30])
因为30是最大的值,所以输出如下:
(1950,30)
如果我们使用 combiner:那么reduce调用的时候传入的数据如下:
(1950,[20,30])--?(1950,30)
用表达式表示为:
Max(0,20,10,25,15,30)=max(max(0,20,10),max(25,15,30))=max(20,30)=30
----------------------------------------
使用 Combiners要小心
刚才我们是计算最大值可以使用Combiners能提高效率。
如果我们要是求平均值呢?
Avg(0,20,10,25,15,30) = 15
如果使用Combiner会得到什么样的结果呢?

第一个map输出为:
 avg(0,20,10) = 10
第二个map输出为:
Avg(25,15,30) = 23

输入到reduce出来的结果为:

Avg(10,23) = 17.5

17.5和15?

所以 :使用combiner一定要注意。

分享到:
评论

相关推荐

    Hadoop学习笔记

    Hadoop学习笔记,自己总结的一些Hadoop学习笔记,比较简单。

    Hadoop 学习笔记.md

    Hadoop 学习笔记.md

    最新Hadoop学习笔记

    **Hadoop学习笔记详解** Hadoop是一个开源的分布式计算框架,由Apache基金会开发,主要用于处理和存储海量数据。它的核心组件包括HDFS(Hadoop Distributed File System)和MapReduce,两者构成了大数据处理的基础...

    hadoop学习笔记.rar

    《Hadoop学习笔记详解》 Hadoop,作为大数据处理领域中的核心框架,是Apache软件基金会下的一个开源项目,主要用于分布式存储和并行计算。本文将根据提供的Hadoop学习笔记,深入解析Hadoop的关键概念和实战技巧,...

    3.Hadoop学习笔记.pdf

    Hadoop是一个开源框架,用于存储和处理大型数据集。由Apache软件基金会开发,Hadoop已经成为大数据处理事实上的标准。它特别适合于存储非结构化和半结构化数据,并且能够存储和运行在廉价硬件之上。Hadoop具有高可靠...

    云计算hadoop学习笔记

    云计算,hadoop,学习笔记, dd

    HADOOP学习笔记

    【HADOOP学习笔记】 Hadoop是Apache基金会开发的一个开源分布式计算框架,是云计算领域的重要组成部分,尤其在大数据处理方面有着广泛的应用。本学习笔记将深入探讨Hadoop的核心组件、架构以及如何搭建云计算平台。...

    hadoop学习笔记(三)

    在本篇"Hadoop学习笔记(三)"中,我们将探讨如何使用Hadoop的MapReduce框架来解决一个常见的问题——从大量数据中找出最大值。这个问题与SQL中的`SELECT MAX(NUMBER) FROM TABLE`查询相似,但在这里我们通过编程...

    Hadoop学习笔记.pdf

    在初学者的角度,理解Hadoop的组成部分以及其架构设计是学习Hadoop的基础。 首先,Hadoop的分布式文件系统(HDFS)是其核心组件之一,它具有高吞吐量的数据访问能力,非常适合大规模数据集的存储和处理。HDFS的设计...

    Hadoop学习笔记整理

    "Hadoop学习笔记整理" 本篇笔记对Hadoop进行了系统的介绍和总结,从大数据的基本流程到Hadoop的发展史、特性、集群整体概述、配置文件、HDFS分布式文件系统等方面都进行了详细的讲解。 一、大数据分析的基本流程 ...

    大数据hadoop学习笔记

    这是自己学习大数据时整理的笔记,希望能够不使用资源分,免费分享!

    linux+hadoop笔记(一)

    hadoop学习笔记,分天学习,原创,亲测,放心使用,没问题。

    Hadoop学习笔记AAAAAAAAAAA

    《深入理解Hadoop分布式系统》 ...Hadoop的学习是一个逐步深入的过程,涵盖分布式存储、计算模型、资源调度等多个方面,理解其工作原理和最佳实践,对于在大数据环境中构建高效稳定的系统至关重要。

Global site tag (gtag.js) - Google Analytics