04 Hadoop思想与原理
简要描述Hadoop起源与发展阶段。
Hadoop适合大数据的分布式存储和计算平台,不是指具体一个框架或者组件,它是Apache软件基金会下用Java语言开发的一个开源分布式计算平台。实现在大量计算机组成的集群中对海量数据进行分布式计算。适合大数据的分布式存储和计算平台。Hadoop1.x中包括两个核心组件:MapReduce(负责提供对数据的计算结果的汇总)和Hadoop Distributed File System(HDFS,负责将海量数据进行分布式存储)
狭义上来说,Hadoop就是单独指代Hadoop这个软件(HDFS+MAPREDUCE)
广义上来说,Hadoop指代大数据的一个生态圈(Hadoop生态圈),包括很多其他的软件。

用图与自己的话,简要描述名称节点、第二名称节点、数据节点的主要功能及相互关系。
1、名称节点:负责管理分布式文件系统的命名空间,里面包含了两个核心的数据结构,即FsImage和EditLog。FsImage用户文件树以及所有的文件和文件夹的元数据。EfitLog记录的是文件的增删改查。HDFS的更新都会被写入到FsImage中而不是EditLog,因为对于分布式而言,FsImage非常庞大,直接对FsImage速度非常慢。HDFS的更新都会被写入到FsImage中而不是EditLog,因为对于分布式而言,FsImage非常庞大,直接对FsImage速度非常慢。
2、第二名称节点:完成EditLog合并到FsImage的过程,缩短合并的重启时间,其次作为“检查点”保存元数据的信息。(因为HDFS文件会逐渐地变大,不断变大的EditLog文件通常不会对系统文件产生影响,但是当EditLog很大时,使得在HDFS重启时,将EditLog合并到FsImage中的过程十分缓慢,系统长期处于“安全模式”,用户的使用收到影响)
3、数据节点(DataNode):定期向名称节点发送自己的存储块的列表。数据节点(DataNode):定期向名称节点发送自己的存储块的列表。


分别从以下这些方面,梳理清楚HDFS的 结构与运行流程,以图的形式描述。
- 客户端与HDFS
- 客户端读
- 客户端写
- 数据结点与集群
- 数据结点与名称结点
- 名称结点与第二名称结点
- 数据结点与数据结点
- 数据冗余
- 数据存取策略
- 数据错误与恢复
![]()
![]()
![]()
4.梳理HBase的结构与运行流程,以用图与自己的话进行简要描述。
Master主服务器的功能
(1) 为Region server分配region
(2)负责region server的负载均衡
(3) 发现失效的region server并重新分配其上的region
(4) GFS上的垃圾文件回收
(5) 处理schema更新请求
Region服务器的功能
(1) Region server维护Master分配给它的region,处理对这些region的IO请求
(2) Region server负责切分在运行过程中变得过大的region
可以看到,client访问hbase上数据的过程并不需要master参与(寻址访问zookeeper和region server,数据读写访问regione server),master仅仅维护者table和region的元数据信息,负载很低。
Zookeeper协同的功能
(1) 保证任何时候,集群中只有一个master
(2) 存贮所有Region的寻址入口。
(3) 实时监控Region Server的状态,将Region server的上线和下线信息实时通知给Master
(4) 存储Hbase的schema,包括有哪些table,每个table有哪些column family
Client客户端的请求流程 与HDFS的关联
(1)client维护着一些cache来加快对HBase的访问,比如HRegion的位置信息。读写操作时,客户端直接与HRegionServer通信,建表等管理操作则请求ZooKeeper与HMaster通信

5.理解并描述Hbase表与Region与HDFS的关系。
在Hbase中存在一张特殊的meta表,其中存放着HBase的元数据信息,包括,有哪些表,表有哪些HRegion,每个HRegion分布在哪个HRegionServer中。meta表很特殊,永远有且仅有一个HRegion存储meta表,这个HRegion存放在某一个HRegionServer中,并且会将这个持有meta表的Region的HRegionServer的地址存放在Zookeeper中meta-region-server下。
在进行HBase表的读写操作时,需要先根据表名和行键确 定位到HRegion,这个过程就是HRegion的寻址过程。
HRgion的寻址过程首先由客户端开始,访问zookeeper 得到其中meta-region-server的值,根据该值找到唯一持有meta表的HRegion所在的HRegionServer,得到meta表,从中读取真正要查询的表和行键对应的HRgion的地址,再根据该地址,找到真正的操作的HRegionServer和HRegion,完成HRgion的定位,继续读写操作。客户端会缓存之前已经查找过的HRegion的地址信息,之后的HRgion定位中,如果能在本地缓存中的找到地址,就直接使用该地址提升性能。

HDFS是GFS的一种实现,他的完整名字是分布式文件系统,类似于FAT32,NTFS,是一种文件格式,是底层的。
Hive与Hbase的数据一般都存储在HDFS上。Hadoop HDFS为他们提供了高可靠性的底层存储支持。
6.理解并描述Hbase的三级寻址。
寻址过程:client-->Zookeeper-->-ROOT-表-->.META.表-->RegionServer-->Region-->client

7.假设.META.表的每行(一个映射条目)在内存中大约占用1KB,并且每个Region限制为2GB,通过HBase的三级寻址方式,理论上Hbase的数据表最大有多大?
一个-ROOT-表最多只能有一个Region,也就是最多只能有2GB,按照每行(一个映射条目)占用1KB内存计算,2GB空间可以容纳2GB/1KB=2的21次方行,也就是说,一个-ROOT-表可以寻址2的21次方个.META.表的Region。同理,每个.META.表的 Region可以寻址的用户数据表的Region个数是2GB/1KB=2的21次方。最终,三层结构可以保存的Region数目是(2GB/1KB) × (2GB/1KB) = 2的42次方个Region
8.MapReduce的架构,各部分的功能,以及和集群其他组件的关系。
Hadoop MapReduce采用Master/Slave(M/S)架构,如下图所示,主要包括以下组件:Client、JobTracker、TaskTracker和Task。
MapReduce架构图

(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处理。
split和block的区别
(4-1)Map Task的执行过程
Map Task先将对应的split迭代解析成一个个key/value对,依次调用用户自定义的map()函数进行处理,最终将临时结果存放到本地磁盘上,其中临时数据被分为若干个partition,每个partition将被一个Reduce Task处理。
Map Task执行过程
(4-2)Reduce Task的执行过程
Map Task执行过程分为三个阶段①从远程节点上读取Map Task的中间结果(称为“Shuffle阶段”);②按照key对key/value键值对进行排序(称为“Sort阶段”);③依次读取<key, value list>,调用用户自定义的reduce()函数处理,并将最终结果存放到HDFS上(称为“Reduce阶段”)。
9.MapReduce的工作过程,用自己的例子,将整个过程梳理并用图形表达出来。





浙公网安备 33010602011771号