MapReduce分布式计算框架

MapReduce是一种适用于离线计算的框架,与Storm的实时计算不同。其核心理念是移动计算而不是移动数据,通过HDFS上的数据作为输入进行处理。Map阶段将文件切分为split,并使用map线程执行;Shuffle阶段则负责数据的分区、排序和溢写到磁盘。Reduce阶段可能面临数据倾斜问题,需要定制分区策略。默认排序按字典序进行,而Shuffle过程包括内存缓冲区溢写和排序操作。MapReduce采用主从结构,由JobTracker协调TaskTracker执行任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MapReduce适合离线计算

Storm适合流式计算,实时计算


MapReduce——移动计算    不移动数据

移动计算:把写好的计算程序分别拷贝一份到不同的机器上


HDFS上存储的数据,作为MapReduce的输入


每一个片段split,由一个map线程执行   (如何把hdfs上的文件切分成split,按照怎样的规则去切分)



例子 word count


shuffling阶段是mapper和reducer中间步骤

可以吧mapper的输出按照某种key,value重新切分和组合成n份,把key值符合某种范围的输出送到特定的ereducer去处理,可以简化reducer过程

                                                   分区、排序、溢写到磁盘,由于map输出的结果存在内存中,内存有溢值,超过这个值,就写到磁盘中


默认分区partition方式是:哈希摸运算,模reduce的个数。partition把map的数据分成一块块区域,每一个区域对应一个reduce去执行

reduce阶段的“数据倾斜”,整数模reduce的个数之后,得到的0或1的数量不同,可能产生数据倾斜。

为避免数据倾斜,需要更改partition规则,重新定义分区方式


默认排序sort方式是:按照对象对应的ask码排序————字典排序


merge步骤为了减少map阶段网络输出


shuffle过程详解:

——每个map task都有一个内存缓冲区(默认100MB),存储map的输出结果

——缓冲区快满的时候,需要将缓冲区的数据以一个临时文件的方式存到磁盘(spill溢写 to disk)

——溢写由单独线程完成,不影响往缓冲区写map结果的线程

——当溢写线程启动后,需要对着80MB空间内的key排序(sort)


MapReduce的主从结构

主:JobTracker(随意指定)

从:TaskTracker


以71机器作为JobTracker,在71机器上修改配置文件


再把配置文件同步到其他机器


启动mapreduce

71机器


72机器

访问


通过eclipse插件,连接HDFS,以下是eclipse插件的源码所在位置




http://my.oschina.net/allman90/blog/296841跑wordcount,参考参考,谢谢分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值