第四次作业

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

 

Hadoop的起源

2003-2004年,Google公布了部分GFS和MapReduce思想的细节,受此启发的Doug Cutting等人用2年的业余时间实现了DFS和MapReduce机制,使Nutch性能飙升。然后Yahoo招安Doug Gutting及其项目。
2005年,Hadoop作为Lucene的子项目Nutch的一部分正式引入Apache基金会。
2006年2月被分离出来,成为一套完整独立的软件,起名为Hadoop
Hadoop名字不是一个缩写,而是一个生造出来的词。是Hadoop之父Doug Cutting儿子毛绒玩具象命名的。
Hadoop的成长过程
Lucene–>Nutch—>Hadoop

hadoop的历史版本

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

 

 

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

 

NameNode:名称节点

(1)职责:

管理、维护HDFS;
接收客户端的请求:上传、下载、创建目录等;
维护两个非常重要的文件:edits文件 –> 记录了操作日志;fsimage文件 –> 记录HDFS元信息
(2)HDFS操作日志:edits文件

位置:find . -name edits* (在当前目录下查找以edits打头的文件)

​ 最新的操作日志以edits_inprogress***开头

记录:Edits文件保存了自最后一次检查点之后所有针对HDFS文件系统的操作,比如:增加文件、重命名文件、删除目录等等

(3)DataNode

DataNode运行在slave节点上,也称为工作节点。它负责存储数据块,也负责为Client端提供读写服务,同时还接收NameNode指令,进行创建、删除和复制等操作。DataNode还通过心跳机制定期向NameNode发送所存储文件块列表信息。并且DataNode还和其他DataNode节点通信,复制数据块已达到冗余的目的。

(4)SecondaryNameNode

NameNode元数据信息存储在FsImage中,NameNode每次重启后会把FsImage读取到内存中,在运行过程中为了防止数据丢失,NameNode的操作会被不断的写入本地EditLog文件中。

当检查点被触发,FsImage会把EditLog文件中的操作应用一遍,然后把新版的FsImage写回磁盘中,删除EditLog文件中旧的事务信息。检查点有两种触发机制:(1)按秒为单位的时间间隔触发(dfs.namenode.checkpoint.period);(2)达到文件系统累加的事务值触发(dfs.namenode.checkpoint.txns)。

相互关系:

1. SencodaryNameNode也是在一定条件下才会触发checkpoint(合并)操作,将文件的元数据加载合并,重新传递到namenode节点

2. SecondaryNameNode询问NameNode是否需要CheckPoint。直接带回NameNode是否检查结果。

2. DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息。

3. 心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。

 

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

  • 客户端与HDFS
  • 客户端读
  • 客户端写
  • 数据结点与集群
  • 数据结点与名称结点
  • 名称结点与第二名称结点
  • 数据结点与数据结点
  • 数据冗余
  • 数据存取策略
  • 数据错误与恢复

 

 

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

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

 (1)HMaster:

  •     监控RegionServer
  •     处理RegionServer故障转移、处理源数据变更
  •     处理region的分配与移除
  •     空闲时进行数据的负载均衡
  •     通过ZK发布自己的位置给客户端连接:

(2)RegionServer

  •     负责与hdfs交互,存储数据到hdfs中
  •     处理hmaster分配的region
  •     刷新缓存到hdfs
  •     维护hlog
  •     执行压缩
  •     处理region分片
  •     处理来自客户端的读写请求

(3)Client

  •     Client包含了访问Hbase的接口
  •     维护对应的cache来加速Hbase的访问,比如MATE表的元数据信息

(4)Zookeeper

  •     Zookeeper主要负责master的高可用
  •     RegionServer的监控
  •     元数据的入口以及集群配置的维护工作。

(5)HDFS

HDFS为Hbase提供最终的底层数据存储服务,同时为HBase提供高可用(Hlog存储在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定位中,如果能在本地缓存中的找到地址,就直接使用该地址提升性能。

HDFS是GFS的一种实现,他的完整名字是分布式文件系统,类似于FAT32,NTFS,是一种文件格式,是底层的。

Hive与Hbase的数据一般都存储在HDFS上。Hadoop HDFS为他们提供了高可靠性的底层存储支持。

 

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

现在假设我们要从Table2里面查询一条RowKey是RK10000的数据。那么我们应该遵循以下步骤:
1. 从.META.表里面查询哪个Region包含这条数据。
2. 获取管理这个Region的RegionServer地址。
3. 连接这个RegionServer, 查到这条数据。

系统如何找到某个row key (或者某个 row key range)所在的region
bigtable 使用三层类似B+树的结构来保存region位置。
第一层: 保存zookeeper里面的文件,它持有root region的位置。
第二层:root region是.META.表的第一个region其中保存了.META.表其它region的位置。通过root region,我们就可以访问.META.表的数据。
第三层: .META.表它是一个特殊的表,保存了hbase中所有数据表的region 位置信息。

 

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

HBase中数据一开始会写入memstore,满128MB(看配置)以后,会flush到disk上而成为storefile。当storefile数量超过触发因子时(可以配置),会启动compaction过程将它们合并为一个storefile。对集群的性能有一定影响。而当合并后的storefile大于max.filesize,会触发分割动作,将它切分成两个region。

 分配合理的region数量,根据写请求量的情况,一般20-200个之间

 

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

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

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

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

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

 

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

 

 

 

posted @ 2021-10-22 09:31  destroyer01  阅读(32)  评论(0编辑  收藏  举报