04 Hadoop思想与原理
1-简要描述Hadoop起源与发展阶段
一、Hadoop的起源与发展
Hadoop是道格·卡丁(Doug Cutting)创建的。
2003-2004年,Google公布了部分GFS和MapReduce思想的细节,受此启发的Doug Cutting等人用2年的业余时间实现了DFS和MapReduce机制,使Nutch性能飙升。然后Yahoo招安Doug Gutting及其项目。
2005年,Hadoop作为Lucene的子项目Nutch的一部分正式引入Apache基金会。
2006年2月被分离出来,成为一套完整独立的软件,起名为Hadoop
二、Hadoop1.0、2.0和3.0的区别
Hadoop 1.0由一个分布式文件系统HDFS和一个离线计算框架MapReduce组成,而Hadoop 2.0则包含一个支持NameNode横向扩展的HDFS,一个资源管理系统YARN和一个运行在YARN上的离线计算框架MapReduce。相比于Hadoop 1.0,Hadoop 2.0功能更加强大,且具有更好的扩展性、性能,并支持多种计算框架。Hadoop 3.0和Hadoop2.0的区别有对java版本要求较高、Hadoop2.0在容错方面需要通过复制来处理容错而Hadoop 3.0不需要、数据平衡使用的平衡器不同等等。
三、Hadoop不同公司的发行版本
Hadoop 主要有三大发行版本: Apache、Cloudera、Hortonwork
Apache版本最原始(最基础)的版本,对于入门学习最好。
Cloudera在大型互联网企业中用的较多。
Hortonworks文档较好。
2-简要描述名称节点、数据节点的主要功能及相互关系、名称节点的工作机制。

①名称节点(NameNode)负责管理分布式文件系统的命名空间,保存了两个核心的数据结构:FsImage和EditLog
②数据节点(DataNode)负责数据的存储和读取,会根据客户端或者是名称节点的调度来进行数据的存储和检索,并且向名称节点定期发送自己所存储的块的列表.
③名称节点的启动:
1.在启动时,系统会将FsImage中的内容加载到内存中去,之后再执行EditLog中的操作,使得内存中的数据和实际同步,存在内存中的支持客户端的读。
2.一旦在内存中成功建立文件系统元数据的映射,则创建一个新的FsImage文件和一个空的EditLog文件
3.名称节点起来之后,HDFS中的更新操作会重新写到EditLog文件中,因为FsImage文件一般挺大, 如果所有的更新操作都往FsImage文件中添加,这样会导致系统运行的十分缓慢,但是,如果往EditLog文件里面写就不会, EditLog 要小很多。每次执行写操作之后,且在向客户端发送成功代码之前,edits文件都需要同步更新
其中防止EditLog过大的问题:引入了第二名称节点(SecondaryNameNode)
用来保存名称节点中对HDFS 元数据信息的备份,并减少名称节点重启的时间
3-梳理清楚HDFS的 结构与运行流程

①
HDFS
分布式文件系统,将一个文件分成多个块,分别存储(拷贝)到不同的节点上,它是Hadoop体系中数据存储管理的基础。它是一个高度容错的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行。HDFS简化了文件的一致性模型,通过流式数据访问,提供高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序。
②
NameNode:
管理文件系统的命名空间、记录每个文件数据块在各个Datanode上的位置和副本信息、协调客户端对文件的访问、记录命名空间内的改动或空间本身属性的改动、Namenode使用事务日志记录HDFS元数据的变化。使用映像文件存储文件系统的命名空间,包括文件映射,文件属性等。
SecondaryNameNode:
从NameNode上下载元数据信息(fsimage),然后把二者合并,生成新的fsimage,
在本地保存,并将其推送到NameNode,同时重置NameNode的edits.默认在安装在NameNode节点上
③
DataNode:
负责所在物理节点的存储管理、一次写入,多次读取(不修改)、文件由数据块组成,典型的块大小是64MB、数据块尽量散布到各个节点
读取数据流程
1、客户端要访问HDFS中的一个文件
2、首先从namenode获得组成这个文件的数据块位置列表
3、根据列表知道存储数据块的datanode
4、访问datanode获取数据
5、Namenode并不参与数据实际传输
④
HDFS的可靠性
1、可以在hdfs-site.xml中设置复制因子指定副本数量
2、所有数据块都有副本
3、Datanode启动时,遍历本地文件系统,产生一份hdfs数据块和本地文件的对应关系列表汇报给NameNode
4、集群一般放在不同机架上,机架间带宽要比机架内带宽要小
5、HDFS的“机架感知”
6、一般在本机架存放一个副本,在其它机架再存放别的副本,这样可以防止机架失效时丢失数据,也可以提高带宽利用率
⑤
回收站
1、删除文件时,其实是放入回收站/trash
2、回收站里的文件可以快速恢复
3、可以设置一个时间阈值,当回收站里文件的存放时间超过这个阈值,就被彻底删除,并且释放占用的数据块
⑥元数据保护
1、映像文件刚和事务日志是Namenode的核心数据。可以配置为拥有多个副本
2、副本会降低Namenode的处理速度,但增加安全性
3、Namenode依然是单点,如果发生故障要手工切换
4.简述HBase与传统数据库的主要区别
hadoop是分布式平台,就把计算和存储都由hadoop自动调节分布到接入的计算机单元中。hbase是hadoop上实现的kv数据库。hbase+hadoop无需再与mysql搭配了,而且kv数据库与传统关系数据库区别很大。hadoop+hbase是分布式计算与分布式数据库存储...
5.梳理HBase的结构与运行流程,以用图与自己的话进行简要描述,图中包括以下内容:
- 1.Master主服务器的功能
- 2.Region服务器的功能
- 3.Zookeeper协同的功能
- 4.Client客户端的请求流程
- 5.四者之间的相系关系
- 6.与HDFS的关联

Master
在1.2小节中提到过,客户端从 ZooKeeper获取了RegionServer的地址后,会直接从RegionServer获取数据。其实不光是获取数据,包括插入、删除等所有的数据操作都是直接操作RegionServer,而不需要经过Master。
不像Hadoop等其他分布式系统,在HBase中,Master更像是一个打杂的。Master只负责各种协调工作,比如建表、删表、 移动Region、合并等操作。它们的共性就是需要跨RegionServer,这些 操作由哪个RegionServer来执行都不合适,所以HBase就将这些操作放 到了Master上了。
这种结构的好处是大大降低了集群对Master的依赖。Master节点一般只有一个到两个,一旦宕机,如果集群对Master的依赖度很大,那么就会产生单点故障问题。在HBase中,即使Master宕机了,集群依然 可以正常地运行,依然可以存储和删除数据。
Region
Region就是一段数据的集合。HBase中的表一般拥有一个到多个Region。Region具有以下特性:
Region不能跨服务器,一个RegionServer上有一个或者多个 Region。
数据量小的时候,一个Region足以存储所有数据;但是,当数据 量大的时候,HBase会拆分Region。
当HBase在进行负载均衡的时候,也有可能会从一台 RegionServer上把Region移动到另一台RegionServer上。
Region是基于HDFS的,它的所有数据存取操作都是调用了HDFS的 客户端接口来实现的。
RegionServer
RegionServer就是存放Region的容器,直观上说就是服务器上的一 个服务。当客户端从ZooKeeper获取RegionServer的地址后,它会直接从 RegionServer获取数据。
Zookeeper
Zookeeper 对于 HBase的作用是至关重要的。
Zookeeper 提供了 HBase Master 的高可用实现,并保证同一时刻有且仅有一个主 Master 可用。
Zookeeper 保存了 Region 和 Region Server 的关联信息(提供寻址入口),并保存了集群的元数据(Schema/Table)。
Zookeeper 实时监控Region server的上线和下线信息,并实时通知Master。
除了 HBase之外,有许多分布式大数据相关的开源框架,都依赖于 Zookeeper 实现 HA。
Client访问交互
Hbase的Client怎么与Server端进行交互的呢?具体步骤可以分为以下几步
首先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信息
Client进行读数据的时候,首先还是找zookeeper,找元数据表的入口点,最终找到元数据表,要找你要找的数据的Regoin,在哪个RegoinServer里面,吧Regoin读过之后,然后真正地去找目标表的RegoinServer,因为所有的活动都是和RegoinServer有关的,RegoinServer是一个进程,Regoin是虚拟的,RegoinServer和cli连接之后,然后客户端将请求给到RegoinServer,RegoinServer会冲一堆Regoin当中找到所需要的Regoin内存空间,先是从写换缓存当中去读数据,如果写缓存中没有的话就去读缓存中去找,读缓存中没有的话就去磁盘中去找,取完了之后就放在读缓存中去做缓存,方便后续的操作更快一点。

Master、RegionServer、Zookeeper、Client、Hdfs之间的关系与联系
Hbase集群有两种服务器:一个Master服务器和多个RegionServer服务器;Master服务负责维护表结构信息和各种协调工作,比如建表、删表、移动region、合并等操作;客户端获取数据是由客户端直连RegionServer的,所以Master服务挂掉之后依然可以查询、存储、删除数据,就是不能建新表了;RegionServer非常依赖Zookeeper服务,Zookeeper管理Hbase所有的RegionServer信息,包括具体的数据段存放在那个RegionServer上;客户端每次与Hbase连接,其实都是先于Zookeeper通信,查询出哪个RegionServer需要连接,然后再连接RegionServer;客户端从Zookeeper获取了RegionServer的地址后,会直接从RegionServer获取数据;RegionServer保存的数据直接存储在Hadoop的HDFS上;
6.完整描述Hbase表与Region的关系,三级寻址原理。
浙公网安备 33010602011771号