Hadoop权威指南笔记-第2章-关于MapReduce

2.1 气象数据集

没啥可读的,就是说有一组数据,然后呢,要从这些数据里找到每一年的最高气温

2.2 使用unix工具来分析数据

也没啥可看的,就是说可以用awk工具来处理这个数据,要运行42分钟

2.3使用hadoop来分析数据

2.3.1 map和reduce

  敲黑板啦,这个重点!!

看上面这个图,

map阶段:入参就是一行一行的原始数据,然后经过map之后,会输出一个一个的键值对,key是年份,value是温度。

shuffle阶段:把key相同的数据整理一下,value就合并在一起,然后发给reduce

reduce阶段:把value的值做个排序,输出结果

 

2.3.2 java MapReduce

此处主要是讲java如何开发mr程序。主要是三个类,map, reduce,job

map:

reduce:

job:

2.4横向扩展

2.4.1 数据流

作业(job): 是客户端要执行的一个工作单元,包含 数据,mr程序,配置信息

分片:将rm程序的输入数据分成等长的数据块,每个分片会构造一个map程序,分片越小,负载均衡水平越好。分片太小,管理分片和构建map程序会耗时变多。默认是128m.

数据本地化:在存储有数据的节点上运行map任务,就可以避免网络开销,可以获得最佳性能。如果存储副本的节点正在运行其他任务,那么会把作业调度到某存储节点的同一机架的空闲节点上运行map。在存储节点的不同机架运行的情况几乎不可能。

map任务的结果,是存储在硬盘中的,而不是hdfs,因为是中间结果,最终是要删除的,为了减小开销。map任务把中间结果传输给reduce时失败,会在其他节点重新map一次,再发给reduce。

reduce任务没有数据本地化,一般reduce结果会存入hdfs,一个副本也会存在reduce运行的节点上。

reduce任务的数量并非由输入的数据量大小决定,而是独立指定的,第8章会讲

如果有多个reduce任务,每个map任务就会针对输出进行分区(partition),每个分区有很多key。分区可以由用户的自定义分区函数来控制,一般使用默认的hash算法来分区,比较高效。

shuffle:混洗,map和reduce之间的数据流。调整混洗参数对作业的运行时间影响非常大

无reduce任务: 当任务完全并行,无需混洗,可能会出现无reduce任务,这时,map把结果直接写入hdfs

 

2.4.2 combiner函数

提前reduce,属于优化方案,对于那些combiner多次,reduce结果还是一样的。比如:

假如加了combiner

 好处,可以减少map到reduce的数据传输量,减少reduce的计算量。但是不能完全取代reduce,因为不同map之间,就不能combiner了。

2.4.3运行分布式的mapReduce作业

这里没啥可说的

2.5 hadoop streaming

开始我以为是讲流式计算,结果我错了,这里讲的是:

因为hadoop streaming使用标准的unix标准流来作为hadoop和应用程序的接口,所以可以使用任何标准语言来编写mr程序。

然后演示了:ruby和python如何来写mr程序

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值