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

1、起源

Hadoop起源于Apache Nutch项目,始于2002年,是Apache Lucene的子项目之一。

2、发展

  Hadoop最早起源于lucene下的Nutch,后由Doug Cutting基于谷歌发布的三篇论文完成了相应的开源实现HDFS和Map Reduce,到2008年一月成为Apache顶级项目。

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

名称节点负责管理分布式文件系统的命名空间,记录每个文件中各个块所在的数据节点的位置信息;

数据节点是分布式文件系统HDFS的工作节点,负责数据的存储和读取,会根据客户端或者名称节点的调度来进行数据的存储和检索,并向名称节点定期发送自己所存储的块的列表。

在名称节点启动时,因为EditLog 要小很多。每次执行写操作之后,且在向客户端发送成功代码之前,edits文件都需要同步更新。为了防止Editl og过大的问题,引入了数据节点。

三、分别从以下这些方面,梳理清楚HDFS的 结构与运行流程,以图的形式描述。

1、客户端与HDFS

2、客户端读

  客户端向NameNode发出写文件请求。

  检查是否已存在文件、检查权限。若通过检查,直接先将操作写入EditLog,并返回输出流对象。

  client端按128MB的块切分文件。

  client将NameNode返回的分配的可写的DataNode列表和Data数据一同发送给最近的第一个DataNode节点,此后client端和NameNode分配的多个DataNode构成pipeline管道,client端向输出流对象中写数据。client每向第一个DataNode写入一个packet,这个packet便会直接在pipeline里传给第二个、第三个…DataNode。

  每个DataNode写完一个块后,会返回确认信息。

  写完数据,关闭输输出流。

  发送完成信号给NameNode

3、客户端写

  client访问NameNode,查询元数据信息,获得这个文件的数据块位置列表,返回输入流对象。

  就近挑选一台datanode服务器,请求建立输入流 。

  DataNode向输入流中中写数据,以packet为单位来校验。

  关闭输入流

4.梳理HBase的结构与运行流程,以用图与自己的话进行简要描述,图中包括以下内容:

  • Master主服务器的功能
  • Region服务器的功能。
  • Zookeeper协同的功能.
  • Client客户端的请求流程
  • 四者之间的相系关系
  • 与HDFS的关联

 

 

(1)Master主服务器的功能

管理用户对Table表的增、删、改、查操作;

管理HRegion服务器的负载均衡,调整HRegion分布; 

(2)Region服务器的功能

HRegion部分由很多的HRegion组成,存储的是实际的数据。每一个HRegion又由很多的Store组成,每一个Store存储的实际上是一个列簇(ColumnFamily)下的数据。 

(3)Zookeeper协同的功能

zookeeper是hbase集群的"协调器"。由于zookeeper的轻量级特性,因此我们可以将多个hbase集群共用一个zookeeper集群,以节约大量的服务器.

(4)Client客户端的请求流程

Client请求Zookeeper确定meta表所在的RegionServer所在的地址,接着根据Rowkey找到数据所归属的RegionServer;用户提交put或delete请求时HbaseClient会将put或delete请求添加到本地buffer中,符合一定条件会通过异步批量提交服务器处理。

(5)与HDFS的关联

HDFS是GFS的一种实现,他的完整名字是分布式文件系统,类似于FAT32,NTFS,是一种文件格式,是底层的,Hadoop HDFS为HBase提供了高可靠性的底层存储支持。

HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统

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定位中,如果能在本地缓存中的找到地址,就直接使用该地址提升性能。

6.理解并描述Hbase的三级寻址。

Region标识符:表名+开始主键+RegionId

元数据表(又名.META.表),存储了Region和Region服务器的映射关系:Region标识符+Region服务器标识

当HBase表很大时, .META.表会被分裂成多个Region

根数据表(又名-ROOT-表),记录所有元数据(即Region和Region服务器的映射关系)的具体位置。-ROOT-表只有唯一一个Region,名字在程序中被写死,Master主服务器永远知道它的位置。Zookeeper文件记录了-ROOT-表的位置

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的架构,各部分的功能,以及和集群其他组件的关系。

 

 

(1)client客户端
每一个Job都会在用户端通过Client类将应用程序以及参数配置Configuration打包成Jar文件存储在HDFS,并把路径提交到JobTracker的master服务,然后由master创建每一个Task(即MapTask和ReduceTask),将它们分发到各个TaskTracker服务中去执行。

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

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

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

9.MapReduce的工作过程,用自己词频统计的例子,将split, map, partition,sort,spill,fetch,merge reduce整个过程梳理并用图形表达出来。