Hadoop及MapReduce介绍

一、Hadoop的整体框架

Hadoop由HDFS、MapReduce、HBase、Hive和ZooKeeper等成员组成,其中最基础最重要元素为底层用于存储集群中所有存储节点文件的文件系统HDFS(Hadoop Distributed File System)来执行MapReduce程序的MapReduce引擎。
在这里插入图片描述
1、HDFS是一个分布式文件系统,有着高容错性的特点,适合那些超大数据集的应用程序;
2、HBase是一个开源的,基于列存储模型的分布式数据库;
3、MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。

二、Hadoop的核心

在这里插入图片描述
1、HDFS
HDFS:Hadoop分布式文件系统,主要用来解决海量数据的存储问题。在HDFS中,NameNode节点被称为名称节点,DataNode节点被称为数据节点。DataNode节点通过心跳机制与NameNode节点进行定时的通信。
2、NameNode
可以看作是分布式文件系统中的管理者,存储文件系统的meta-data,主要负责管理文件系统的命名空间,集群配置信息,存储块的复制。
3、DataNode
是文件存储的基本单元。它存储文件块在本地文件系统中,保存了文件块的meta-data,同时周期性的发送所有存在的文件块的报告给NameNode。
4、MapReduce
MapReduce是一种编程模型,用于大规模数据集的并行运算。Map(映射)和Reduce(化简),采用分而治之思想,先把任务分发到集群多个节点上,并行计算,然后再把计算结果合并,从而得到最终计算结果。

三、MapReduce原理

在这里插入图片描述
对照上图可以理解成:

第一阶段:

在不同的DataNode中有着多个分片,可以理解为多个线程;
启动map tasks;
确定读入类型TextInputFormat,通过TextInputFormat读取流,读取当前的切片(InputFormat是个接口,TextInputFormat是接口的实现类);
BufferedReader 一行一行读数据,每读一行就是一个切片(切片其实就是个包装类,包装了行的偏移量和值);
读一次就是一行,用RecordReader来读;
并且将这两个信息(K,V)也就是行偏移量和值作为map中的map方法的入口传入,在map中计算,将计算结果发送到OutPutColloctor中。(K:行的偏移量 V:这一行的内容)
Map中不存数据,只负责计算,就来一行,计算一行,然后快速发出去,也就是OutPutColloctor;

第二阶段:

OutPutColloctor将搜集到的内容逐条发送到环形缓冲区中,当一轮的发送量达到环形缓冲区的80%的时候,一次性将80%的内容进行分区计算和快速排序,之后溢出。
(环形缓冲区默认是100M)
溢出之前会对数据根据Key值进行快速排序。
每次溢出会形成一个小文件,此时的小文件是分区有序,键值有序;
对多个小文件进行归并排序,排序后将内容写到一个大文件里;
当所有的map完成统计过程,形成了分区有序,内容有序的大文件后,reduce tasks启动

第三阶段:

reduce tasks根据自己的分区号从各个map tasks中提取属于自己当前分区号的内容;
将从各个map tasks获取到的内容再进行一次归并排序,对合并后隶属于当前分区的内容分组,将分组的结果依次作为reduce方法的入口参数传入到reduce方法里,在reduce方法中形成最终结果,并且依次落盘;
根据OutPutFormat,指定的方式进行输出,形成最终文件。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值