Hadoop高性能集群

一:概述

hadoop是一个由apache基金会所开发的分布式系统基础架构,利用集群进行高速运算和存储。

hadoop的框架最核心的设计就是:HDFS和MapReduce.HDFS分布式文件系统为海量的数据提供了存储,则MapReduce

为海量的数据提供了计算。

hadoop包括两大核心。分布式存储系统和分布式计算系统。

1.分布式系统

因为处理数据时,必须从一台一台服务器分别读取和写入数据,而分布式文件系统可以管辖很多服务器用于存储

数据。通过这个文件存储系统数据时,感觉不到是存储到不同服务器上。当读取数据时,感觉不到是从不同服务

器上读取的。

 

如图:

Hadoop高性能集群

分布式文件系统管理的是一个服务器集群。在这个集群中,数据存储在集群的节点(即集群中的服务器)中,

但是该文件系统把服务器的差异屏蔽了,那么,我们就可以像使用普通的文件系统一样使用,但是数据却分散

在不同的服务器中。

命名空间(namespace):在分布式存储系统中,分散在不同节点中的数据可能属于同一文件,为了组织众多

的文件,把文件可以放到不同的文件夹中,文件夹可以一级一级的包含。我们把这种组织形式称为命名空间(namespace)

。命名空间管理着整个服务器集群中的所有文件,命名空间的职责与存储真实数据的职责是不一样的。

负责命令空间职责的节点称为主节点(master node或name node),负责存储真实数据职责的节点称为从节点(

slave node或data node)。

主/从节点:主节点负责管理文件系统的文件结构,从节点负责存储真实的数据,称为主从式结构(master-slaves).

用户操作时,也应该先和主节点打交道,查询数据在哪些从节点上存储,然后再从从节点读取。在主节点,为了加快

用户访问的速度,会把整个命名空间信息都放在内存中,当存储的文件越多时,那么主节点就需要越多的内存空间。

block:在从节点存储数据时,有的原始数据文件可能很大,有的可能很小,大小不一的文件不容易管理,那么可以

抽象出一个独立的存储文件单位,称为块(block)。

工作流程:

Hadoop高性能集群

hadoop运行架构:

Hadoop高性能集群

名词解释

(1)Hadoop:Apache开源的分布式框架。

(2)HDSF:Hadoop的分布式文件系统。 

(3)NameNode:Hadoop HDFS元数据主节点服务器,负责保存DataNode 文件存储元数据信息,这个服务器是单点的。 Namenode记录着每个文件中各个块所在的数据节点的位置信息   

(4)DataNode:Hadoop数据节点,负责存储数据。

(5)JobTracker:Hadoop的Map/Reduce调度器,负责与TaskTracker通信分配计算任务并跟踪任务进度,这个服务器也是单点的。   Tracker   [ˈtrækə(r)]   跟踪器

(6)TaskTracker:Hadoop调度程序,负责Map,Reduce任务的启动和执行。 [tɑ:sk]  作业 任务

 

Hadoop1的组件依赖关系图

Hadoop高性能集群

SecondaryNameNode它的职责是合并NameNode的edit logs到fsimage文件中。SecondaryNameNode为HDFS中提供一个检查点。它只是NameNode的一个助手节点。它不是要取代掉NameNode也不是NameNode的备份。

在以上的主从式结构中,由于主节点含有整个文件系统的目录结构信息,因为非常重要。另外,由于主节点运行时会把命名空间信息都放到内存中,因此存储的文件越多,主节点的内存就需要的越多。

 

2、分布式计算

对数据进行处理时,我们会把数据读取到内存中进行处理。如果我们对海量数据进行处理,比如数据大小是100GB,我们要统计10T文件中一共有多少个单词。要想把数据都加载到内存中几乎是不可能的,称为移动数据。

 

那么是否可以把程序代码放到存放数据的服务器上哪?因为程序代码与原始数据相比,一般很小,几乎可以忽略的,所以省下了原始数据传输的时间了。现在,数据是存放在分布式文件系统中,100GB的数据可能存放在很多的服务器上,那么就可以把程序代码分发到这些服务器上,在这些服务器上同时执行,也就是并行计算,也是分布式计算。这就大大缩短了程序的执行时间。我们把程序代码移动到数据节点的机器上执行的计算方式称为移动计算。

分布式计算需要的是最终的结果,程序代码在很多机器上并行执行后会产生很多的结果,因此需要有一段代码对这些中间结果进行汇总。Hadoop中的分布式计算一般是由两阶段完成的。第一阶段负责读取各数据节点中的原始数据,进行初步处理,对各个节点中的数据求单词数。然后把处理结果传输到第二个阶段,对中间结果进行汇总,产生最终结果,求出100GB文件总共有多少个单词,如图所示:

Hadoop高性能集群

在hadoop中,分布式计算部分称为MapReduce。

MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",和它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。

 

主节点称为作业节点(jobtracker),

从节点称为任务节点(tasktracker)。

在任务节点中,运行第一阶段的代码称为map任务(map task),运行第二阶段的代码称为reduce任务(reduce task)。