详解Hadoop核心架构

详解Hadoop核心架构

本文主要介绍Hadoop分布式计算平台最核心的分布式文件系统HDFS,计算框架MapReduce,以及数据仓库工具Hive和分布式数据库Hbase的相关结构。

HDFS的体系架构
  1. Hadoop的体系结构主要是通过HDFS来实现对分布式存储的底层支持,并通过MR来实现对分布式并行任务处理的程序支持。
  2. HDFS采用主从(Master/Slave)结构模型,一个HDFS集群是由一个NameNode和若干个DateNode组成的,其中NameNode作为主服务器,管理文件系统命名空间和客户端对文件的访问操作。而DataNode管理存储的数据。
  3. 从本质上来看,文件是被分成若干个数据块,存放在一组DataNode上,而NameNode执行文件系统的命名空间,如打开,关闭,重命名文件或目录等,也负责数据块到具体DataNode的映射,与此同时NameNode是所有HDFS元数据的管理者,用户数据不会经过NameNode。而DataNode负责处理文件系统客户端的文件读写,并在NameNode的统一调度下进行数据库的创建,删除和复制工作。
  4. 体系架构如下图
    详解Hadoop核心架构
文件写入
  1. Client向NameNode发起文件写入的请求
  2. NameNode根据文件大小和文件块配置情况,返回给Client它管理的DataNode的信息
  3. Client将文件划分为多个block,根据DataNode的地址,按顺序将block写入DataNode块中
文件读取
  1. Client向NameNode发起读取文件的请求
  2. NameNode返回文件存储的DataNode信息
  3. Client读取文件信息
  4. 文件块的放置:一个block会有三份备份,一份在NameNode指定的DataNode上,一份放在与指定的DataNode不在同一台机器的DataNode上,另一个放在指定的DataNode在同一个Rack上的DataNode上,目的是采用备份,数据安全
MapReduce体系架构
  1. MR框架是由一个单独运行在主节点上的JobTracker和运行在每个集群从节点上的TaskTracker共同组成
  2. 主节点负责调度构成一个作业的所有任务,这些任务分布在不同的从节点上。主节点监视它们的执行情况,并重新执行之前失败的任务
  3. 从节点仅负责由主节点指派的任务,当一个job被提交时,JobTracker接受到提交作业和配置信息后,就会将配置信息等分发给从节点,同时调度任务并监控 TaskTracker的执行
  4. JobTracker可以运行与集群中的任意一台计算机上,TaskTracker负责执行任务,并且必须运行在DataNode上,因为DataNode既是数据存储节点,也是计算节点
  5. JobTracker将map任务和reduce任务分发给空闲的TaskTracker,这些任务并行运行,同时监控任务运行的情况,如果JobTracker出了故障,它会把任务转交给另一个空闲的TaskTracker重新运行
  6. HDFS在集群上实现了分布式文件系统,MR在集群上实现了分布式计算和任务处理,同时HDFS在MR任务处理过程中提供了文件操作和存储等支持,MR在HDFS的基础上实现了任务的分发,跟踪,执行等工作,并收集结果,两者相互完成分布式集群的主要任务
  7. MR编程模型原理:利用一个输入的key-value对集合来产生一个输出的key-value对集合,通过map和reduce两个函数来实现,用户自定义一个map函数接受一个输入的key-value对,然后产生一个中间的key-value对集合,MR把所有具有相同的key值的value结合起来,然后传递个reduce函数,reduce函数接受key和相关value结合,reduce函数合并这些value值,形成一个较小的value集合
  8. reduce数据之前,可以先对中间数据进行数据合并(combine),即将中间有相同的key对合并,combine的过程与reduce的过程类似,但是combine作为map任务的一部分,在执行完map函数后仅接着执行,combine能减少中间结果key-value对的数目,从而降低网络流量
  9. Map任务的中间结果在做完combine和partition后,以文件的形式存于本地磁盘上,中间结果文件的位置会通知主控JobTracker,再通知reduce任务到哪一个DataNode上去取中间结果,所有的map任务产生的中间结果均按其key值按hash函数划分成R份,R个reduce任务各自负责一段key区间。每个reduce需要向多个map任务节点取的落在其负责的key区间内的中间结果,然后执行reduce函数,最后形成一个最终结果,有R个reduce任务,就会有R个最终结果
Hbase数据管理
  1. Hbase适合大量插入同时又有读的情况,输入一个key获取一个value或输入一些key获得一些value
  2. Hbase的瓶颈是硬盘传输速度,它可以向数据里insert,也可以update一些数据,但update的实际上也是insert,只是插入一个新的时间戳的一行,delete数据,也就是insert,只是insert一行带有delete标记的一行,并且hbase的所有操作都是追加插入操作
  3. Hbase是一种日志集数据库,存储方式就是批量大量的往硬盘中写,通常都是以文件形式来读写,这个读写速度,就取决与硬盘与机器之间的传输有多快
  4. Hbase数据可以保存许多不同时间戳的版本,即同一数据可以复制许多不同的版本,准许数据冗余,数据按时间排序,因此适合寻找按照时间排序寻找top n的场景
  5. Hbase的局限,只能做很简单的key-value查询,适合有高速插入,同时又有大量读的操作场景
  6. Oracle的瓶颈是硬盘寻道时间,它的操作是随机读写,比如要update一个数据,先要在硬盘中找到这个block,然后把它读入内存,在内存中的缓存中修改,过段时间再写回去,但是寻找的block不同,这就存在一个随机的读,而硬盘的寻道时间主要要转速来决定。
  7. Hbase是列式数据库,Oracle是行式数据库,而列式数据库通常在于数据分析,经常是一个列作为查询条件,返回的结果也经常是某些列,不是全部的列。而行式数据库,比如oracle,数据文件的基本组成单位是块/页。块中数据是按照一行行写入的,当我们读取一个块中的某些列的时候,不能只读这些列,必须把这个块整个的读入内存,再把这些列的内容读出来
Hive数据管理
  1. Hive是建立在Hadoop上的数据仓库基础架构,用来进行数据提取,转化,加载,是一种可以存储,查询和分析存储的数据机制,可以将结构化数据文件映射为一张成hive的表,并提供类似sql查询功能,除了不支持更新,索引和事务,sql其他功能都支持,因为可以将sql语句转化为Mapreduce任务进行运行,作为sql到Mapreduce的映射器
  2. hive没有专门的数据存储格式,也没有为数据建立索引,只需要在创建表的时候告诉hive数据中的列分隔符和行分隔符
  3. 所有数据都存储在HDFS中,包含4中数据模型,table,externaltable,partition,bucket,其中table类似与传统数据库中的table,每一个table在hive中都有一个相应的目录来存储数据,比如一个表a,它在hdfs中的路径为:/ss/a。其中ss是hive-site.xml中指定的数据仓库的目录。而partition类似与传统数据库中划分列的索引,在hive中,表中的一个partition对应于表下的一个目录。erternaltable只有一个过程,因为加载数据和创建表是同时完成的,数据是存储在localtion指定的hdfs路径,并不会移动到数据仓库中