Hadoop整体架构

架构

  1. 底层——存储层,文件系统HDFS

  2. 中间层——资源及数据管理层,YARN以及Sentry等

  3. 上层——MapReduce、Impala、Spark等计算引擎

  4. 顶层——基于MapReduce、Spark等计算引擎的高级封装及工具,如Hive、Pig、Mahout等

图片来源于网上

c 设计hdfs架构 hdfs架构图流程_文件系统


这是hadoop1.x的架构图,当时还没有Yarn,导致JobTracker的任务很繁重,节点数有上限。

在hadoop2.x中增量Yarn(资源调度),对MapReduce的计算资源做了优化。

Hadoop两大核心,hdfs和mapreduce(不管hadoop的生态圈如何发展,这两个一直是核心)

核心一

Hdfs架构图:


c 设计hdfs架构 hdfs架构图流程_hadoop_02




关于hdfs需要清楚的几个概念

hahoop是M/S架构,namenode是master,管理节点,它并不负责数据的存储,存放文件元数据。

datanode是slaver,工作节点,负责存放数据块。

secondarynamenode是namenode的备份,后面再详细讲。

client是客户端,负责切分文件,输入命令。

block是块,在hdfs中文件都会被切分成块,默认为64M或128M,它是文件存储处理的逻辑单元。默认冗余存储3份。


回到上面那张图,rack代表机架,机架1中有三个datanode,机架2中有两个datanode,ABCDE是文件块(block)。

聪明的朋友看了这张图就能理解hadoop为什么视硬件故障为常态了。

前面说过在hdfs同一份文件会被切分成块,图中可以明显看出,以A为示例,一个DN上只有一个块,另一个块在相同机架的另一个DN上,剩余一个块在另一个机架的节点上。

这样假设我有一份数据,它被切分为ABC三个块,每个块都有三个副本,如果DN1挂掉了,没关系,别的DN上还保留有数据(NN会很快检测出哪些节点是好的,哪些是挂掉的,并及时地将挂掉节点上的数据移到别的空闲节点上)。

这是因为hdfs默认副本存放策略:假如client在节点上,第一个副本块放在client当前节点,另一个副本块放在另一个机架的其中一个节点,剩余一个副本块放在与第二个节点相同机架的另一个节点上。


接着说一下namenode,这个节点相当于平时工作中的领导,负责分配任务给个人(DN),并且很清楚各个任务(数据)具体对应到各人,如果有人生病了或者离职了(DN挂了或者网络阻塞),会及时将任务(DN)转移给其他有空闲的人。这样说并不能体现副本冗余的特点,所以需要再加上一点,领导希望认为事情分配给组员能有备份,这样即使其中一个人有问题做不了,另外的人也能做。