注意,我会使用第三人称以朋友的角度介绍大数据中必须要学会的框架Hadoop,阅读时间需要五分钟。
Hadoop之父Doug Cutting和他手上拿的Hadoop
大家好,介绍一下我的朋友,它的名字叫Hadoop,它和其它大数据框架一样,都是出生于计算机。特殊的是,它所有的细胞都是由二进制组成的,每一个细胞都是由0和1组成特定的串。
它跟我说,它最感激的是它的父亲,没有他不放弃的研究,很难有现在强大的自己。
它父亲当时为了爬虫项目如何存储以及计算,刚好,谷歌三大论文发布出来。谷歌三大论文分别是GFS谷歌分布式文件系统、MapReduce分布式计算框架和BigTable分布式存储系统。
(想要知道谷歌三大论文可以到后台回复“谷歌三大论文”获取,谷歌三大论文的翻译资料最开始是由CSDN博客出现的,很惊讶吧,现在CSDN这个状况很难和原创有一点点的关系)
爬虫项目数据量非常多,不是一台计算机简单能存下了,所以他转战花了时间去研究谷歌的三大论文,给予了他很多的灵感,得出了HDFS、MapReduce和HBase三个项目。HBase最初确实是Hadoop的一部分,之后,HBase逐渐成为Apache软件基金会旗下的顶级项目,具备Apache软件许可证,现在目前是2.x版本。
但如何给它起一个名字似乎不是一个难题,因为Doug Cutting在生活中有孩子,他的孩子非常喜欢一个玩偶,叫它哈杜。所以Doug Cutting就给它起了一个名字,就叫Hadoop。
那玩偶就是Hadoop之父手上拿的,是瘦瘦的黄色小象,不想现在Logo标志上这么胖胖的
Hadoop项目的Logo标志
名字有了,Hadoop之父就开始干,发决心狠狠地将它扔进到黑暗的小盒子里。谁都不知它未来会是什么样子,只知道它的父亲正在将它进行重新改造,又重新改造,一直如此。这其中的艰难很难想象。
也是正因为如此,它才会越发的强大。当它出来的时候,它的一切重新变了模样。GFS变成了HDFS,BigTable变成了HBase,MapReduce还是MapReduce但都进行了改进。所以Hadoop一出生就有了三个玩伴。后来HBase逐渐分离了Hadoop,渐渐地成为Apache的顶级项目,当然Hadoop也是Apache的顶级项目。Hadoop还是替HBase高兴的,又一个儿时玩伴成为了顶级项目。
Hadoop还有两个伙伴中间是通过什么组件来进行资源联系的,恐怕它自己也不知道。等到起跑运行才发现没有这个组件是会出问题的。
Hadoop如果没有谷歌三大论文的帮助,它到现在也不会分身,只能在一台服务器上存储和计算着越来越多的数据量,而且会非常缓慢,因为一台服务器的CPU数量和内存都有限。
有了谷歌三大论文的帮助,Hadoop除了得出HDFS和MapReduce组件,还有Yarn资源管理器组件。它们都极具有分身的能力,也没必要在一台服务器上分身,它们的目的是联合多台服务器扩大CPU数量和增大内存容量。
作为Hadoop的第三人称以朋友的角度,我会介绍Hadoop的三个组件——HDFS架构、MapReduce模型和Yarn资源管理器。
Hadoop项目的三个组件
HDFS分布式存储架构每一个工作节点DataNode都会占据一台服务器(也可以是虚拟机),多个DataNode不可能会在同一台服务器上,因为没必要要两个DataNode在一台服务器上争夺资源,这会乱套的,服务器上只需要一个DataNode汇报给管理节点NameNode就可以了。NameNode可以和任何一个DataNode共存在一台服务器上。
真正存储数据的是在DataNode,而且不管数据的大小都会切割成固定的块大小,默认为128M。一个不满128M的文件会给128M的虚拟空间,一个满128M的块大小会被切割,目的是为了NameNode更好的管理文件系统,以及MapReduce更好的读取。后面会出处理多个小文件的案例,所以请关注大数据绅探,避免走失哦。
NameNode还有一个辅助节点SecondaryNameNode,它是专门记录NameNode所有的操作,但不能接替NameNode成为一个NameNode节点。只是有了SecondaryNameNode,NameNode挂掉重启的时候可以恢复最新的数据。SecondaryNameNode和NameNode一样,也可以和任何一个DataNode共存在一台服务器上,当然,SecondaryNameNode和NameNode也一样可以共存在一台服务器上。
MapReduce分布式计算框架是用Java编写的,读取HDFS上的数据会使用输入格式类生成一个Map任务进行,一个Map根据数据块的大小进行设置的,也可以自己设置。但我的建议是和HDFS的数据块的大小一致,是为了减少服务器之间的I/O传输。
数据进入到Map任务之后会有Shuffle过程,然后聚合到Reduce任务上,再使用Java的输出格式类写入到某个路径上。
MapReduce简单的过程
那如何让MapReduce跑起来计算呢,则就需要Yarn资源管理器。Yarn和HDFS一样,也有很多个组件。Yarn除了没有辅助节点,都有管理节点ResourceManager和工作节点NodeManager。而NodeManager和HDFS中的DataNode是一一对应的,不多不少。
简单的介绍就到这里,后面会出几篇文章分别详细介绍Hadoop的三个组件的。