我的在作hadoop有关的开发,做为这种国宝始祖级别的论文不管如何都是要拜读一下的,正好能够从中了解到一些hadoop内部运行机制,读罢不得不掩卷而叹,精,精巧,精准 算法
1.GFS(Google File System) 数据库
GFS提供了一个与位置无关的名字空间,这使得数据能够为了负载均衡或灾难冗余等目的在不一样位置间透明迁移。 服务器
GFS并无在文件系统层面提供任何Cache机制。 数据结构
GFS没有正对每一个目录实现可以列出目录下全部文件的数据结构。 架构
GFS文件以分层目录的形式组织,用路径名来表示。支持的经常使用操做:建立新文件,删除文件,打开文件,关闭文件,读和写文件。 负载均衡
Chunk服务器: 分布式
Chunk服务器上的元数据,大部分是用户数据(Chunk块所切分的64kb块)的Checksun,和Chunk的版本号。 oop
Chunk服务器上保存有大量Chunk副本。 性能
对新加入的Chunk服务器负载的调整:周期性检查,逐步调整。 google
Master服务器与Chunk服务器的心跳中,Chunk服务器在心跳信息中报告它所存储的Chunk子集,Master则经过比较版本号来肯定那些Chunk块已通过期,Chunk服务器进行删除。
Chunk块(64MB):
GFS存储文件分割成固定大小的Chunk(64MB)。
每一个Chunk有不变,惟一的64位标识。
每一个Chunk副本都以普通Linux文件的形式保存在Chunk服务器上。
元数据:之前缀压缩模式存放的文件名,文件的全部者和权限,文件到Chunk的映射关系,每个Chunk的当前版本号。
Master服务器内存中拥有完整的从文件到块的映射表。
元数据所有保存在内存中。
经过checkpoint和重演日志操做来进行灾难恢复。
Master节点将主Chunk及副本位置返回给客户机。以后的数据传输,检验都在Chunk和客户机之间进行。
主Chunk服务器定义写顺序。
2.BigTable
BigTable使用Google的分布式文件系统(GFS)
BigTable的客户没必要经过Master服务器来获取Tablet的位置信息。
BigTable:系数,分布式,持久化存储的多维度排序Map。
一个BigTable集群有不少表,每一个表是一个Tablet的集合。
1.行:行操做是原子操做。
一个表按行划分为不一样的Tablet。
一个Tablet只能分给一个Tablet
一个Tablet服务器上能够有几十到上千个Tablet。
对Tablet能够作的操做有读写,合并,分割。
2.列:
一个列族由多个列组成,存放在同一个列族下的全部数据一般都数据同一个类型。
一张表能够有几百个列族,一张表能够有无限多个列。
Tablet能够按照列族的相关性分类存储为不一样的SSTable(数据的逻辑相关性决定其物理相关性)
3.行+列:数据项
表中每个数据项均可以包含同一数据的不一样版本(经过时间戳来进行索引)
Master服务器的工做:
为Tablet服务器分配Tablets
监测新加入的或者过时失效的Table服务器
对Tablet服务器进行负载均衡
模式相关:新建表和列族
针对系统工做负载的变化状况,BigTable能够动态的想集群中添加删除Tablet服务器。
Master服务器记录了当前有哪些活跃的Tablet服务器,哪些Tablet分配给了那些Tablet服务器,那些Tablet尚未被分配。
问题:Table分红Tablet是Master作的嘛?
GFS是分布式文件系统,BigTable 是创建在GFS之上的。就像文件系统须要数据库来存储结构化数据同样,GFS也须要Bigtable来存储结构化数据,每一个Table都是一个多维的稀疏图,为了管理巨大的Table,把Table根据行分割,这些分割后的数据统称为:Tablets。每一个Tablets大概有 100-200 MB,每一个机器存储100个左右的 Tablets。底层的架构是:GFS。因为GFS是一种分布式的文件系统,采用Tablets的机制后,能够得到很好的负载均衡。好比:能够把常常响应的表移动到其余空闲机器上,而后快速重建。
3.Hadoop与google三大件:
Hadoop是不少组件的集合,主要包括但不限于MapReduce,HDFS,HBase,ZooKeeper。
MapReduce模仿了Google的MapReduce,
HDFS模仿了Google File System,
HBase模仿了BigTable,
因此下文只出现MapReduce、HDFS和HBase。
简单来说, HDFS和HBase是依靠外存(即硬盘)的存储模型和实现。HDFS是一个云存储的文件系统,它会把一个文件分块并分别保存,取用时分别取出再合并。重要的是,这些分块一般会在3台节点(即机群内的电脑)上有3个备份,因此即便出现少数电脑的失效(硬盘损坏、掉电等),文件也不会失效。若是说HDFS是文件级别的存储,那HBase则是表级别的存储。HBase是一个表模型,但比SQL数据库的表要简单的多,没有链接、汇集等功能。HBase表的物理存储是依赖HDFS的,好比把一个表分红4个文件,存到HDFS中。因为HDFS级会作备份,因此HBase级再也不备份。
MapReduce则是一个计算模型,而不是存储模型;MapReduce与HDFS紧密配合,而非HBase。举个场景:若是你的手机通话信息保存在一个HDFS的文件callList.txt中,你想找到你与你同事A的全部通话记录并排序。由于HDFS会把callLst.txt分红几块分别存,好比说5块,那么对应的Map过程就是找到这5块所在的5台节点,让他们分别找本身存的那块中关于A的通话记录,对应的Reduce过程就是把5个节点过滤过的通话记录合并在一块并按时间排序。可见MapReduce的计算模型须要HDFS,但与HBase没有任何关系。
ZooKeeper自己是一个很是牢靠的记事本,最好用于记录一些概要信息。Hadoop依靠这个记事原本记录当前哪些节点正在用,哪些已掉线,哪些还备用等,以此来管理机群。
3大论文中文版下载:http://yunpan.cn/QDhPcnYVQt2hM