Google 分布式系统与Hadoop

名称 Google Hadoop

分布式文件系统

Google file system(GFS)

Hadoop Distributed File System(HDFS )

分布式计算

Google MapReduce

MapReduce

分布式存储

Google BigTable

HBase

分布式协同服务

Google Chubby

ZooKeeper

数据仓库工具

 

Hive

其他

 

Avro,Hadoop Common,Pig,Chukwa,CloudBASE等

 

分布式文件系统术语对比

术语

GFS中的术语

HDFS中的术语

术语解释

主控服务器

Master

NameNode

整个文件系统的大脑,它提供整个文件系统的目录信息,并且管理各个数据服务器。

数据服务器

Chunk Server

DataNode

分布式文件系统中的每一个文件,都被切分成若干个数据块,每一个数据块都被存储在不同的服务器上,此服务器称之为数据服务器。

数据块

Chunk

Block

每个文件都会被切分成若干个块,每一块都有连续的一段文件内容,是存储的基恩单位,在这里统一称做数据块。

数据包

 

Packet

客户端写文件的时候,不是一个字节一个字节写入文件系统的,而是累计到一定数量后,往文件系统中写入一次,每发送一次的数据,都称为一个数据包。

传输块

Chunk

在每一个数据包中,都会将数据切成更小的块,每一个块配上一个奇偶校验码,这样的块,就是传输块。

备份主控服务器

 

SecondaryNameNode

备用的主控服务器,在身后默默的拉取着主控服务器 的日志,等待主控服务器牺牲后被扶正。

 

Hadoop服务器的基本架构、各服务所使用的协议、调用方向、以及协议中的基本内容

 

image

 

Hadoop 服务器简介

 

      分布式文件系统不是将这些数据放在一块磁盘上,由上层操作系统来管理。而是存放在一个服务器集群上,由集群中的服务器,各尽其责,通力合作,提供整个文件系统的服务。其中重要的服务器包括:主控服务器(Master/NameNode),数据服务器(ChunkServer/DataNode) ,和客户服务器。HDFS和GFS都是按照这个架构模式搭建的。其中设计的最核心内容是:文件的目录结构独立存储在一个主控服务器上,而具体文件数据,拆分成若干块,冗余的存放在不同的数据服务器上。存储目录结构的主控服务器,在GFS中称为Master,在HDFS中称为NameNode。

    每一个文件的具体数据,被切分成若干个数据块,冗余的存放在数据服务器。通常的配置,每一个数据块的大小为64M,在三个数据服务器上冗余存放,数据服务器其主要的工作模式就是定期向主控服务器汇报其状况,然后等待并处理命令,更快更安全的存放好数据。整个分布式文件系统还有一个重要角色是客户端。它不和主控服务和数据服务一样,在一个独立的进程中提供服务,它只是以一个类库(包)的模式存在,为用户提供了文件读写、目录操作等APIs。

 

分布式文件系统

uFault-tolerant, 容错性

uRun on commodity hardware,在通用的机器上运行

uScalable 可扩缩的

 

image

 

分布式文件系统

       数据分布

       一个文件系统中,最重要的数据,其实就是整个文件系统的目录结构和具体每个文件的数据。具体的文件数据被切分成数据块,存放在数据服务器上。每一个文件数据块,在数据服务器上都表征为出双入队的一对文件(普通的Linux文件),一个是数据文件,一个是附加信息的元文件,这对文件简称为数据块文件。数据块文件存放在数据目录下,它有一个名为current的根目录,然后里面有若干个数据块文件和从dir0-dir63的最多64个的子目录,子目录内部结构等同于current目录,依次类推。

      主控服务器的数据量不大,但逻辑更为复杂。主控服务器主要有三类数据:文件系统的目录结构数据,各个文件的分块信息,数据块的位置信息(数据块放置在哪些数据服务器上)。在GFS和HDFS的架构中,只有文件的目录结构和分块信息才会被持久化到本地磁盘上,而数据块的位置信息则是通过动态汇总过来的,仅仅存活在内存数据结构中,机器宕机数据就消失了。每一个数据服务器启动后,都会向主控服务器发送注册消息,将其上数据块的状况都告知于主控服务器。

      服务器间协议

     在Hadoop的实现中,部署了一套RPC机制,以此来实现各服务间的通信协议。在Hadoop中,每一对服务器间的通信协议,都定义成为一个接口。服务端的类实现该接口,并且建立RPC服务,监听相关的接口,在独立的线程处理RPC请求。客户端则可以实例化一个该接口的代理对象,调用该接口的相应方法,执行一次同步的通信,传入相应参数,接收相应的返回值。基于此RPC的通信模式,是一个消息拉取的流程,RPC服务器等待RPC客户端的调用,而不会先发制人主动把相关信息推送到RPC客户端去。

      数据结构

        NameNode

–存贮HDFS的元数据(metadata)

–管理文件系统的命名空间(namespace)

创建、删除、移动、重命名文件和文件夹

–接收从DataNode来的Heartbeat和Blockreport

       DataNode

–存贮数据块

–执行从Namenode来的文件操作命令

–定时向NameNode发送Heartbeat和Blockreport

 

分布式计算(Map/Reduce)

     uJobtraker(Master)

–接收任务(job)的提交

–提供任务的监控(monitoring)和控制(control)

–把job划分成多个tasks,交给Tasktracker执行,并管理这些tasks的执行

     uTasktracker(Worker)

–管理单个task的map任务和reduce任务的执行

 

  分布式存储

image

Client

1包含访问hbase的接口,client维护着一些cache来加快对hbase的访问,比如regione的位置信息。

Master

1.为Region server分配region

2.负责region server的负载均衡

3.发现失效的region server并重新分配其上的region

4.GFS上的垃圾文件回收

5.处理schema更新请求

Region Server

1.Region server维护Master分配给它的region,处理对这些region的IO请求

2.Region server负责切分在运行过程中变得过大的region

 

Zookeeper

1.保证任何时候,集群中只有一个master

2.存贮所有Region的寻址入口。

3.实时监控Region Server的状态,将Region server(管理区域服务器)的上线和下线信息实时通知给Master

4.存储Hbase的schema,包括有哪些table,每个table有哪些column family

 

image

ZooKeeper 是Google的Chubby一个开源的实现。它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。