第四次作业

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

Hadoop是一个对海量数据存储和海量数据分析计算的分布式系统,是Apache软件基金会下用Java语言开发的一个开源分布式计算平台。实现在大量计算机组成的集群中对海量数据进行分布式计算。适合大数据的分布式存储和计算平台。

hadoop的发展史:

Hadoop是道格·卡丁(Doug Cutting)创建的,2004年,Doug Cutting开始基于Google的三篇论文开发Hadoop,Hadoop是一个虚构的名字,来源是Doug Cutting儿子有一个大象玩偶,名字就叫做Hadoop,所以后来Hadoop的logo也是一只大象。Hadoop起源于开源网络搜索引擎Apache Nutch,后者本身也是Lucene项目的一部分。Nutch项目面世后,面对数据量巨大的网页显示出了架构的灵活性不够。当时正好借鉴了谷歌分布式文件系统,做出了自己的开源系统NDFS分布式文件系统。第二年谷歌又发表了论文介绍了MapReduce系统,Nutch开发人员也开发出了MapReduce系统。随后NDFS和MapReduce命名为Hadoop,成为了Apache顶级项目。

Hadoop的成长过程Lucene–>Nutch—>Hadoop。

Hadoop开始商用,是在Cutting跳槽到Cloudera之后,Cloudera 是一个为那些在咨询和技术上有需求的公司提供服务的平台。它的客户大多来自于传统行业,希望通过 Hadoop 来处理之前只能被直接抛弃的大规模数据。该公司推出的CDH是Hadoop发型版本中的一个。包含了ApacheHadoop。

Hadoop三大发行版本:Apache、Cloudera、Hortonworks。

Hadoop大事记:

 

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

HDFS:分布式文件系统把文件分布存储到多个计算机节点上,成千上万的计算机节点构成计算机集群

这些节点分为主从节点,主节点可叫作名称节点(NameNode),从节点可叫作数据节点(DataNode)

 

 

 名称节点:

名称节点最主要功能:名称节点记录了每个文件中各个块所在的数据节点的位置信息。

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

 

 

 数据节点:

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

 

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

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

hdfs的储存结构

 

 

hdfs的文件读流程

hdfs的文件写流程

 

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

  • Master主服务器的功能
    1. 为Region server分配region
    2. 负责Region server的负载均衡
    3. 发现失效的Region server并重新分配其上的region。
    4. HDFS上的垃圾文件回收。
    5. 处理schema更新请求。

  • Region服务器的功能
    1. 负责与hdfs交互,存储数据到hdfs中
    2. 处理hmaster分配的region
    3. 刷新缓存到hdfs
    4. 维护hlog
    5. 执行压缩
    6. 处理region分片
    7. 处理来自客户端的读写请求
  • Zookeeper协同的功能
    1.保证任何时候,集群中只有一个master
    2.存储所有Region的寻址入口
    3.实时监控Region server的上线和下线信息。并实时通知给master
    4.存储HBase的schema和table元数据
  • Client客户端的请求流程
    首先Client通过访问hbase:meta元数据表找到指定范围row所处的regions,以及对应的RegionServers;
    在确定region之后,Client不会与Master进行交互,而是直接与RegionServer交互,让其开启对指定region的服务;
    然后RegionServer开始处理对应的read and write请求;
    同时Client会将这些region的交互信息缓存在内存中,以保证下次请求服务端就不用再查询hbase:meta重新定位;
    一旦一个被请求的region被重新负载均衡分配到其它的RegionServer上,那么Client下次查询的时候才会重新访问hbase:meta,并且更新缓存的region信息
  • 四者之间的相系关系
  • 与HDFS的关联
    hbase是一个内存数据库,而hdfs是一个存储空间;是物品和房子的关系。

5.理解并描述Hbase表与Region与HDFS的关系。

HBase是由三种类型的服务器以主从模式构成的。这三种服务器分别是:Region server,HBase HMaster,ZooKeeper。

其中Region server负责数据的读写服务。用户通过沟通Region server来实现对数据的访问。

HBase HMaster负责Region的分配及数据库的创建和删除等操作。

ZooKeeper作为HDFS的一部分,负责维护集群的状态(某台服务器是否在线,服务器之间数据的同步操作及master的选举等)。

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

(1) ZooKeeper找到-ROOT-表地址
(2) -ROOT-表中找到需要的.META.表地址
(3) .META.表找到所需的用户数据表地址
(4) 最后从用户数据表取出目标数据

另外,为了加速寻址,客户端会缓存已查数据的位置信息(在客户端自己的缓存中),下次取相同的数据就可以快速访问。——但随Region的更新,缓存记录可能失效。对于这个问题,HBase采用惰性解决机制,即首先使用缓存的位置,如果在那个位置查不到目标数据,则按三级寻址重新查询,再更新缓存。

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

1MB = 2(10)次方KB

2GB = 2048MB = 2(11)次方MB

2048MB/1KB=2(21)次方大小;

三层结构可以保存的region数为:2048MB/1KB * 2048MB/1KB = 2(42)次方大小

8.MapReduce的架构,各部分的功能,以及和集群其他组件的关系。
Hadoop MapReduce也采用了Master/Slave(M/S)架构,主要有以下几个组件构成:Client、JobTracker、TaskTracker和Task。

1)Client:
用户编写的Mapreduce程序通过Client提交到JobTracker端;同时,用户可通过Client提供的一些接口查看作业运行状态。在Hadoop内部用“作业”(Job)表示Mapreduce程序。一个Mapreduce程序可对应若干个作业,而每个作业会被分解成若干个Mapreduce任务(Task)。
2)JobTracker:
JobTracker主要负责资源监控和作业调度。JobTracker监控所有TaskTracker与作业的健康状况,一旦发现失败情况后,会将 相应的任务转移到其他节点;同时,JobTracker会跟踪任务的执行进度、资源使用量等信息,并将这些信息告诉任务调度器,而调度器会在资源出现空闲时,选择合适的任务使用这些资源。在hadoop中,任务调度器是一个可插拔的模块,用户可以根据自己的需要设计相应的调度器。
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文档中知道,HDFS以固定大小的block为基本单位存储数据,而对于Mapreduce而言,其处理单位是split。split是一个逻辑概念,它只包含一些元数据信息,比如数据起始位置、数据长度、数据所在节点等。它的划分方法完全由用户自己决定。但需要注意的是,split的多少决定了Map Task的数目,因为每个split会交由一个Map Task处理。
Map Task执行过程:先将对应的split迭代解析成一个个key/value对,依次调用用户自定义的map()函数进行处理,最终将临时结果存放到本地磁盘上,其中临时数据被分成若干个partition,每个partition 将被一个Reduce Task处理。
Reduce Task执行过程:该过程分为三个阶段①从远程节点上读取Map Task中间结果(称为“Shuffle阶段”);②按照key对key/value对进行排序(称为“Sort阶段”);③依次读取,调用用户自定义的reduce()函数处理,并将最终结果存到HDFS上(称为“Reduce阶段”)。

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

 

 

1、Splitting部分
把要读取的文件分成几个部分,分到不同的机器上实现并行处理。

2、Map和Combine部分
从Splitting部分接收到文件的一部分,Map将字符切割后得到了一些键值对<key,value>,key就是每一个单词,value就是根据单词的出现频次得到的:(1,1,1,1,1…)出现多少次就有多少个1。
然后再由Combine进行局部的统计后,又得到了一些键值对<key,value>,这里的value就是Map中的1相加的结果。
3、Shuffle/Sort部分
这里是Mapper和Reducer的中间部分,它的每一个处理步骤都分散在map task和reduce task节点上,整体看来,就是对Map的结果进行分区、排序、分割。也就是对Combine中的value进行分区,排序后合并。

4、Reduce部分
接受经过Shuffle后得到的<key,value>,把各value的值相加,得到最后每一个单词的出现次数。



 

posted on 2021-10-22 14:58  pear今天打代码了没  阅读(81)  评论(0编辑  收藏  举报