04 Hadoop思想与原理,Hbase原理

  • 1.用图与自己的话,简要描述Hadoop起源与发展阶段。

    (1)Hadoop起源于Google的三大论文:
    GFS:Google的分布式文件系统Google File System
    MapReduce:Google的MapReduce开源分布式并行计算框架
    BigTable:一个大型的分布式数据库

    (2)Hadoop的发展:

    0.x系列版本:hadoop当中最早的一个开源版本,在此基础上演变而来的1.x以及2.x的版本
    1.x版本系列:hadoop版本当中的第二代开源版本,主要修复0.x版本的一些bug等
    2.x版本系列:架构产生重大变化,引入了yarn平台等许多新特性

  • 2.用图与自己的话,简要描述名称节点、第二名称节点、数据节点的主要功能及相互关系。

名称结点(NameNode):1.负责文件和目录的创建、删除和重命名等  2.管理着数据结点和文件块的映射关系  3.处理客户端的访问请求

数据结点(DataNode):1.负责数据的存储和读取  2.根据名称结点的命令创建、删除和复制数据块  3.心跳机制,与名称结点保持通信。

第二名称结点(SecondaryNode):1.完成EditLog和FsImage的合并操作,减少EditLog文件大小,缩短名称结点重启时间  

                2.作为名称结点的”检查点“,保存名称结点中的元数据信息。

三者的关系:

名称节点与第二名称节点:

  名称节点类似于数据目录。其主要有两大构件构成,FsImage和Editlog,FsImage用于存储元数据(长时间不更新、Editlog用于更新数据,但是随着时间推移,Editlog内存储的数据越来越多,导致运行速度越来越慢。所以引入第二名称节点,当第一节点中Editlog到一个临界值时,HDFS会暂停服务,由第二节点将拷贝出Editlog,复制、添加到Fslmage后方并清空原Editlog的内容。这里有一点要注意这种备份是冷备份的形式,即没有实时性,需要停止服务,等数据恢复正常后继续使用。

名称节点与数据节点:

  HDFS集群有两种节点,以管理者-工作者的模式运行,即一个名称节点(管理者)和多个数据节点(工作者)。名称节点管理文件系统的命名空间。它维护着这个文件系统树及这个树内所有的文件和索引目录。数据节点是文件系统的工作者。它们存储并提供定位块的服务(被用户或名称节点调用时),并且定时的向名称节点发送它们存储的块的列表。

第二名称节点与数据节点:

  第二名称节点是HDFS架构中的一个组成部分,它是用来保存名称节点中对HDFS 元数据信息的备份,并减少名称节点重启的时间,而数据节点是分布式文件系统HDFS的工作节点,负责数据的存储和读取,会根据客户端或者是名称节点的调度来进行数据的存储和检索,并且向名称节点定期发送自己所存储的块的列表。

 

  • 3.分别从以下这些方面,梳理清楚HDFS的 结构与运行流程,以图的形式描述。
  • 客户端与HDFS
  • 客户端读
  • 客户端写
  • 数据结点与集群
  • 数据结点与名称结点
  • 名称结点与第二名称结点
  • 数据结点与数据结点


  • 数据冗余


  • 数据存取策略


  • 数据错误与恢复



  • 4.梳理HBase的结构与运行流程,以用图与自己的话进行简要描述。

    • Master主服务器的功能
      1. 为Region server分配region
      2. 负责Region server的负载均衡
      3. 发现失效的Region server并重新分配其上的region。
      4. HDFS上的垃圾文件回收。
      5. 处理schema更新请求。
    • Region服务器的功能
      1. 维护master分配给他的region,处理对这些region的io请求。
      2. 负责切分正在运行过程中变的过大的region。
    • Zookeeper协同的功能
        HBase依赖Zookeeper,默认情况下HBase管理Zookeeper实例(启动或关闭Zookeeper),Master与RegionServers启动时会向Zookeeper注册。
      • 保证任何时候,集群中只有一个master
      • 存储所有Region的寻址入口
      • 实时监控Region server的上线和下线信息。并实时通知给master
      • 存储HBase的schema和table元数据
    • Client客户端的请求流程
      • Hbase写数据流程
        Client请求Zookeeper确定meta表所在的RegionServer所在的地址,接着根据Rowkey找到数据所归属的RegionServer;用户提交put或delete请求时HbaseClient会将put或delete请求添加到本地buffer中,符合一定条件会通过异步批量提交服务器处理。


      • Hbase读数据流程
        RegionServer收到get请求后,对当前Region进行Scan,接着会根据列族对Store进行Scan,同时会对对应的MemStore进行Scan;最后找到我们要的数据返回给Client。注意:一个StoreScanner会对应多个StoreFileScanner,整个过程是一个层级关系。
    • 四者之间的相互关系
    • 与HDFS的关联 
    • Hadoop HDFS为HBase提供了高可靠性的底层存储支持。Hbase底层仍然依赖HDFS来作为其物理存储,并且还需要Zookeeper协助提供部分配置服务,包括维护元信息和命名空间等。


  • 5.理解并描述Hbase表与Region的关系。
      1. 开始只有一个Region,后来不断分裂;
      2. 一个HBase表被划分成多个Region;
      3. 每个Region服务器存储10-1000个Region;
      4. 同一个Region不会被分拆到多个Region服务器;
  • 6.理解并描述Hbase的三级寻址。
      三级寻址为:Zookeeper文件,-ROOT-表,.MEATA.表(简记:ZRM)

  • 7.假设.META.表的每行(一个映射条目)在内存中大约占用1KB,并且每个Region限制为2GB,通过HBase的三级寻址方式,理论上Hbase的数据表最大有多大?

  解:每个Region限制为2GB,.META.表的每行(一个映射条目)在内存中大约占用1KB,则2GB空间可以容纳2GB/1KB=2^21行,也就是说一个-ROOT-表可以寻址2^21个.META.表的Region。同理,每个.META.表的Region可以寻址的用户数据表的Region个数是2G/1KB=2^21。最终,三层结构可以保存的Region数目是(2G/1KB)×(2G/1KB)=2^42个Region。即最大为2^42G=4ZB。

  • 8.MapReduce的架构,各部分的功能,以及和集群其他组件的关系。

  Hadoop MapReduce采用Master/Slave(M/S)架构,如下图所示,主要包括以下组件:Client、JobTracker、TaskTracker和Task。

(1)Client
  用户编写的MapReduce程序通过Client提交到JobTracker端;同时,用户可通过Client提供的一些接口查看作业运行状态。在Hadoop内部用“作业”(Job)表示MapReduce程序。一个MapReduce程序可对应若干个作业,而每个作业会被分解成若干个Map/Reduce任务(Task)。

(2)JobTracker
  JobTracker主要负责资源监控和作业调度。JobTracker监控所有TaskTracker与作业的健康状况,一旦发现失败情况后,其会将相应的任务转移到其他节点;同时JobTracker会跟踪任务的执行进度、资源使用量等,并将这些信息告诉给任务调度器(Task Scheduler),而T调度器会在资源出现空闲时,选择合适的任务使用这些资源。在Hadoop中,任务调度器是一个可插拔的模块,用户可以根据自己的需要设计相应的Scheduler。

(3)TaskTracker
  TaskTracker会周期性地通过Heartbeat将本节点上资源的使用情况和任务的运行进度汇报给JobTracker,同时接收JobTracker发送过来的命令并执行相应操作(如启动新任务、杀手任务等)。TaskTracker使用“slot”等量划分本节点上的资源量。“slot”代表计算资源(CPU、内存等)。一个Task获取到一个slot后才有机会运行,而Hadoop调度器的作用就是将各个TaskTracker上的空闲slot分配给Task使用。slot分为Map slot和Reduce slot两种,分别供Map Task和Reduce Task使用。TaskTracker通过slot数目(可配置参数)限定Task的并发度。

(4)Task
  Task分为Map Task和Reduce Task两种,均由TaskTracker启动。我们知道,HDFS以固定大小的block为基本单位存储数据,而对于MapReduce而言,其处理单位是split。split与block的对应关系如下图所示。split是一个逻辑概念,它只包含一些元数据信息,比如数据起始位置、数据长度、数据所在节点等。它的划分方法完全由用户自己决定。但需要注意的是,split的多少决定Map Task的数目,因为每个split会交由一个Map Task处理。

关系:在hadoop的框架上采取mapreduce的模式处理海量数据。

  • 9.MapReduce的工作过程,用自己的例子,将整个过程梳理并用图形表达出来。

  在MapReduce整个过程可以概括为以下过程:输入 --> map --> shuffle --> reduce -->输出

 

流程说明如下:

1、输入文件分片,每一片都由一个MapTask来处理

2、Map输出的中间结果会先放在内存缓冲区中,这个缓冲区的大小默认是100M,当缓冲区中的内容达到80%时(80M)会将缓冲区的内容写到磁盘上。也就是说,一个map会输出一个或者多个这样的文件,如果一个map输出的全部内容没有超过限制,那么最终也会发生这个写磁盘的操作,只不过是写几次的问题。

3、从缓冲区写到磁盘的时候,会进行分区并排序,分区指的是某个key应该进入到哪个分区,同一分区中的key会进行排序,如果定义了Combiner的话,也会进行combine操作

4、如果一个map产生的中间结果存放到多个文件,那么这些文件最终会合并成一个文件,这个合并过程不会改变分区数量,只会减少文件数量。例如,假设分了3个区,4个文件,那么最终会合并成1个文件,3个区

5、以上只是一个map的输出,接下来进入reduce阶段

6、每个reducer对应一个ReduceTask,在真正开始reduce之前,先要从分区中抓取数据

7、相同的分区的数据会进入同一个reduce。这一步中会从所有map输出中抓取某一分区的数据,在抓取的过程中伴随着排序、合并。

8、reduce输出

posted @ 2021-10-23 00:46  鸢瑾  阅读(143)  评论(0)    收藏  举报