04 Hadoop思想与原理
一、用图与自己的话,简要描述Hadoop起源与发展阶段。
从与谷歌系统的关系,关键时间节点,1.x,2.x与3.x的区别,不同公司发行版本等方面来讲。
答:Hadoop是一个对海量数据存储和海量数据分析计算的分布式系统。
Hadoop 1.x
海量数据存储 ------->HDFS
海量数据分析计算 -------> MapReduce
Hadoop 2.x 增加
资源调度系统 -------> Yarn
从hadoop最初的原型来看,hadoop已经远远超过了本身的批处理。从广义上来说,hadoop现在可以是指更广泛的一个hadoop生态了,而不仅仅是HDFS,MapReduce和Yarn。例如Hive,Hbase,Flume,Sqoop等等项目都属于这个生态。下图展示为Hadoop的生态圈。
1、Hadoop的发展
Hadoop起源于开源网络搜索引擎Apache Nutch,后者本身也是Lucene项目的一部分。Nutch项目面世后,面对数据量巨大的网页显示出了架构的灵活性不够。当时正好借鉴了谷歌分布式文件系统,做出了自己的开源系统NDFS分布式文件系统。第二年谷歌又发表了论文介绍了MapReduce系统,Nutch开发人员也开发出了MapReduce系统。随后NDFS和MapReduce命名为Hadoop,成为了Apache顶级项目。
从Hadoop的发展历程来看,它的思想来源于Google的三篇技术性论文,一是GFS:Goolgle File System分布式处理系统,这解决了Hadoop的存储问题;二是Mapreduce:分布式计算模型,这解决了Hadoop对数据进行计算处理的问题;三是BigTable,这解决了查询分布式存储文件慢的问题。
2、Hadoop的发行版本
Hadoop的三大发行版本,分别为Apache、Cloudera、Hortonworks。
其中,Apache为最基础的版本,可以基于此做二次开发。下图为Hadoop的历史版本发展图。
3、Hadoop的架构模型
- x的版本架构模型介绍
文件系统核心模块(HDFS):
NameNode:集群当中的主节点,主要用于管理集群当中的各种数据;
secondaryNameNode:主要能用于hadoop当中元数据信息的辅助管理;
DataNode:集群当中的从节点,主要用于存储集群当中的各种数据;
数据计算核心模块(MapReduce):
JobTracker:接收用户的计算请求任务,并分配任务给从节点;
TaskTracker:负责执行主节点JobTracker分配的任务。
2.x的版本架构模型介绍
第一种:NameNode与ResourceManager单节点架构模型
文件系统核心模块(HDFS):
NameNode:集群当中的主节点,主要用于管理集群当中的各种数据;
secondaryNameNode:主要能用于hadoop当中元数据信息的辅助管理;
DataNode:集群当中的从节点,主要用于存储集群当中的各种数据;
数据计算核心模块(MapReduce):
ResourceManager:接收用户的计算请求任务,并负责集群的资源分配,以及计算任务的划分;
NodeManager:负责执行主节点ResourceManager分配的任务。
第二种:NameNode单节点与ResourceManager高可用架构模型
文件系统核心模块(HDFS):
NameNode:集群当中的主节点,主要用于管理集群当中的各种数据;
secondaryNameNode:主要能用于hadoop当中元数据信息的辅助管理;
DataNode:集群当中的从节点,主要用于存储集群当中的各种数据;数据计算核心模块(MapReduce):
ResourceManager:接收用户的计算请求任务,并负责集群的资源分配,以及计算任务的划分,通过zookeeper实现ResourceManager的高可用;
NodeManager:负责执行主节点ResourceManager分配的任务。
第三种:NameNode高可用与ResourceManager单节点架构模型
文件系统核心模块(HDFS):
NameNode:集群当中的主节点,主要用于管理集群当中的各种数据,其中nameNode可以有两个,形成高可用状态;
DataNode:集群当中的从节点,主要用于存储集群当中的各种数据;
JournalNode:文件系统元数据信息管理;
数据计算核心模块(MapReduce):
ResourceManager:接收用户的计算请求任务,并负责集群的资源分配,以及计算任务的划分;
NodeManager:负责执行主节点ResourceManager分配的任务。
第四种:NameNode与ResourceManager高可用架构模型
文件系统核心模块(HDFS):
NameNode:集群当中的主节点,主要用于管理集群当中的各种数据,一般都是使用两个,实现HA高可用;
JournalNode:元数据信息管理进程,一般都是奇数个;
DataNode:从节点,用于数据的存储;
数据计算核心模块(MapReduce):
ResourceManager:Yarn平台的主节点,主要用于接收各种任务,通过两个,构建成高可用;
NodeManager:Yarn平台的从节点,主要用于处理ResourceManager分配的任务。
4、Hadoop的优势
(1)高可靠性
Hadoop在出现故障时可以对失败的节点重新分布处理。
(2)高扩展性
在集群间分配任务数据,可以方便地扩展数以千计的节点。
(3)高效性
Hadoop并行工作,以加快任务处理速度。
(4)高容错性
Hadoop自动保存多副本数据,并且可以将失败的任务重新分配。
二、用图与自己的话,简要描述名称节点、第二名称节点、数据节点的主要功能及相互关系
答:数据节点是分布式文件系统HDFS的工作节点,它的主要功能包括负责数据的存储和读取,根据客户端或者是名称节点的调度来进行数据的存储和检索,然后向名称节点定期发送自己所存储的块的列表。
在HDFS中,名称节点的主要功能为存储元数据,负责管理分布式文件系统的命名空间,其内保存了两个核心的数据结构,FsImage和EditLog。
第二名称节点:是HDFS架构中的一个组成部分,它用来保存名称节点中对HDFS元数据信息的备份,并减少名称节点重启的时间,第二名称节点通过HTTPGET方式从名称节点上获取到FsImage和EditLog文件,并下载到本地的相应目录下。
三、分别从以下这些方面,梳理清楚HDFS的 结构与运行流程,以图的形式描述。
(1)客户端与HDFS
(2)客户端读
(3)客户端写
(4)数据结点与集群
(5)数据结点与名称结点
(6)名称结点与第二名称结点
(7)数据结点与数据结点
(8)数据冗余
(9)数据存取策略
(10)数据错误与恢复
五、梳理HBase的结构与运行流程,以用图与自己的话进行简要描述,图中包括以下内容:
(1)Master主服务器的功能
①监控RegionServer;
②处理RegionServer故障转移、处理源数据变更;
③处理region的分配与移除;
④空闲时进行数据的负载均衡;
⑤通过Zookeeper发布自己的位置给客户端连接
(2)Region服务器的功能
①负责与HDFS的交互,存储数据到HDFS中;
②处理Master分配的region;
③刷新缓存到HDFS;
④维护HLog;
⑤执行压缩;
⑥处理region分片;
⑦处理来自客户端的读写请求
(3)Zookeeper协同的功能
①负责Master的高可用;
②Region服务器的监控;
③元数据的入口以及集群配置的维护工作
(4)Client客户端的请求流程
①HBase写数据流程
Client请求Zookeeper确定meta表所在的Region服务器所在的地址,接着根据Rowkey找到数据所归属的Region服务器;用户提交put或delete请求时,HBase Client会将put或delete请求添加到本地buffer中,符合一定条件会通过异步批量提交服务器处理。
数据到达Region后,服务端处理流程如下所示:
Region服务器获取RowLock,region更新共享锁,接着HBase写日志WAL(数据可靠性),再写缓存MemStore,然后释放锁,将日志落到HDFS;如果MemStore达到阈值将缓存数据落磁盘Store File,最后多个Store File发生合并,若Store File很大则触发split操作,将当前的region分割程2个Region,并且同步至HMaster。
②HBase读数据流程
Region服务器收到get请求后,对当前的Region进行Scan,接着根据列族对Store进行Scan,同时会对对应的MemStore进行Scan,最后找到需要的数据返回给Client。
(5)四者之间的相系关系
①Hbase集群有两种服务器:一个Master服务器和多个RegionServer服务器;
②Master服务负责维护表结构信息和各种协调工作,比如建表、删表、移动region、合并等操作;
③客户端获取数据是由客户端直连RegionServer的,所以Master服务挂掉之后依然可以查询、存储、删除数据,就是不能建新表了;
④RegionServer非常依赖Zookeeper服务,Zookeeper管理Hbase所有的RegionServer信息,包括具体的数据段存放在那个RegionServer上;
⑤客户端每次与Hbase连接,其实都是先于Zookeeper通信,查询出哪个RegionServer需要连接,然后再连接RegionServer;客户端从Zookeeper获取了RegionServer的地址后,会直接从RegionServer获取数据;
⑥RegionServer保存的数据直接存储在Hadoop的HDFS上。
总的来说 ,Client访问HBase上的数据的过程并不需要Master的参与,Master仅仅维护着table和region的元数据信息,负载很低。
(6)与HDFS的关联
HDFS为HBase提供最终的底层数据存储服务,同时为HBase提供高可用的支持。
六、完整描述Hbase表与Region的关系,三级寻址原理。