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主服务器的功能
- 为Region server分配region
- 负责Region server的负载均衡
- 发现失效的Region server并重新分配其上的region。
- HDFS上的垃圾文件回收。
- 处理schema更新请求。
- Region服务器的功能
- 负责与hdfs交互,存储数据到hdfs中
- 处理hmaster分配的region
- 刷新缓存到hdfs
- 维护hlog
- 执行压缩
- 处理region分片
- 处理来自客户端的读写请求
- 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) 最后从用户数据表取出目标数据
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。
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的值相加,得到最后每一个单词的出现次数。