【漫谈】从分布式引出Hadoop云计算框架
Hello,欢迎来到苏黎世的民谣,这是一名大三在读学生,同时也是原清华大学刘鹏教授的小迷弟,相关专业知识绝大多数来自于他的丛书。
目录:
Part1 什么是分布式,为什么要引入它?
Part2 Hadoop体系架构
2.1 Common——制片人
2.2 HDFS——编剧
2.3 MapReduce——导演
2.4 Yarn——后勤
Part1 分布式
书中模拟了一个场景,提出了四个划时代的问题。
场景:我们现在有一些完全相同的计算机C1~Cn,每台计算机可以存5GB内容。另有两个均为2GB的文件f0和f1。
Q1:将f0和f1分别存入不同计算机,但对外显示存储在同一块硬盘;
Q2:另有一个6GB的文件f2,将它存入计算机,但对外显示为一个完整文件;
Q3:在Q1的前提下,统计f0和f1每个单词的出现次数(以下简称词频);
Q4:如果某个机器宕机,如何保证数据不丢失。
这四个问题,如果我们按照常规思路,似乎都是很难解决的。哎不对,Q3可以哦,只需要把f0复制到存储f1的计算机上,把它们放在一起统计即可,这确实没错。但如果是100个文件,每个文件1TB,就是复制文件这一步,我们都很难做到。这四个问题似乎没有了解决方法~
在这种情况下,分布式应运而生,下面是分布式思想来解决问题:
如图,整个集群就像是一台机器Master、一片云。对外显示为一个硬盘空间,Q1、Q2解决。
A3:针对计算问题,Google提出“移动计算比移动数据更划算”,想想也是,数据动辄几个TB,代码一般就几个MB。基于此,我们假设f0存储在Slave0,f1存储在Slave1,先让两个文件在它们自己所在的机器中计算词频,将得到的结果在另一台机器中将同一个词的词频求和,就得到了这个词在两个文件中的词频,Q3解决(具体实现方法见MapReduce)。
A4:要想数据不丢失,唯一的办法就是备份。我们再取两台机器,记为Slave2和Slave3,Slave2存储文件f0,Slave3存储文件f1,将它们也归于Master管理。当Master启动计算时,四台机器同时工作,因为Slave0和Slave2的作用相同,当其中一台完成计算任务提交给Master,Master立即停止另一台的计算,使用前者提交的结果即可。
这样的话,我们岂不是白白浪费了很多资源?
确实是这样,但在绝大多数情况下,冗余存储和计算是必要的,因为数据丢失是不可逆过程,一旦出现,对企业甚至国家造成的影响太大了。
Part2 Hadoop体系架构
简单说一句,Hadoop是现在一种主流云计算框架,之后的博客会详细出一期漫谈Hadoop生态圈。
下面介绍它的四个组成成分:
Hadoop公共组件Common
分布式文件系统HDFS
分布式计算框架MapReduce
分布式操作系统Yarn
2.1 Common——制片人
可以说,没有Common,就没有这部“电影”。Common的定位是其他模块的公共组件,为其他模块提供公用API,观众看不到他,而他,一直在后台为剧组人员默默付出~
Common通过设计方式,降低了Hadoop设计的复杂性,减少了其他模块之间的耦合性,大大增强了Hadoop的健壮性。
2.2 HDFS——编剧
电影开拍前,HDFS会将所有的文件妥善存储,作为”剧本“,方便导演后期导戏。
首先引入两个实体:namenode和datanode,Master运行主进程namenode,所有Slave运行从属进程datanode。namenode只存储元数据信息:文件块位置、大小、拥有者信息;datanode以块(block)为单位存储实际数据,这里的块通常为128MB,要存入的文件被切分成块,存入不同的datanode中。
当客户端(Client)要访问一个文件,先“拜访”namenode,问问数据在哪个datanode中?然后直接去相应的datanode读取数据。(不再需要namenode引荐)
事务日志(EditLog)记录HDFS元数据的变化,存储在namenode本地文件系统中。
2.3 MapReduce——导演
有了编剧的剧本,导演就可以用它开始工作了,MapReduce需要非常大的计算资源来最终完成这部电影。
承接引例中的回答A3,下面说说MapReduce的详细过程(以统计词频为例)
假设文件f0和f1的内容分别为:
Baidu Tencent Huawei Huawei
Alibaba Tencent Huawei
引入“键值对”概念,即<key,value>,key表示单词,value为其出现次数。所以在单机中计算结果分别为:
<Baidu,1><Tencent,1><Huawei,2>
<Alibaba,1><Tencent,1><Huawei,1>
通过shuffle(洗牌)操作,将相同key的键值对放入同一台机器(这里需要4台),然后将value相加,此时得到的结果为:
<Baidu,1>
<Alibaba,1>
<Tencent,2>
<Huawei,3>
这个即为最终结果,将其存入分布式文件系统即可,下面附图详细过程:
MapReduce说白了就是Map和Reduce两个很简单的过程,别看它原理很简单,但应用范围非常广。
2.4 Yarn——后勤
正如后勤人员一样,Yarn管理着计算机资源并进行统一调配,同时提供用户程序访问系统资源的应用程序接口(API)。
Yarn在执行时包含以下实体:
Client:客户端,负责向集群提交作业;
ResourceManager:集群的主进程,负责资源管理和任务调度;
NodeManager:集群的从进程,管理和监视Containers,执行具体任务;
Container:资源的独立单位;
Scheduler:资源仲裁模块;
ApplicationManager:选定,启动和监管ApplicationManager;
ApplicationMaster:任务执行和监管中心。
工作过程如图:
由于小弟水平有限,所述不周之处还请大家在评论区指出,共同进步~