1.用图与自己的话,简要描述Hadoop起源与发展阶段。
Hadoop之父
Doug Cutting
- Hadoop最早起源于lucene下的Nutch。Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取、索引、查询等功能,但随着抓取网页数量的增加,遇到了严重的可扩展性问题——如何解决数十亿网页的存储和索引问题。
- 2003年、2004年谷歌发表的三篇论文为该问题提供了可行的解决方案。
——分布式文件系统(GFS),可用于处理海量网页的存储
——分布式计算框架MAPREDUCE,可用于处理海量网页的索引计算问题。
——分布式的结构化数据存储系统Bigtable,用来处理海量结构化数据。 - Doug Cutting基于这三篇论文完成了相应的开源实现HDFS和MAPREDUCE,并从Nutch中剥离成为独立项目HADOOP,到2008年1月,HADOOP成为Apache*项目(同年,cloudera公司成立),迎来了它的快速发展期。
为什么叫Hadoop? Logo为什么是黄色的大象?
狭义上来说,Hadoop就是单独指代Hadoop这个软件(HDFS+MAPREDUCE)
广义上来说,Hadoop指代大数据的一个生态圈(Hadoop生态圈),包括很多其他的软件。
Hadoop的历史版本介绍
0.x系列版本:Hadoop当中最早的一个开源版本,在此基础上演变而来的1.x以及2.x的版本
1.x版本系列:Hadoop版本当中的第二代开源版本,主要修复0.x版本的一些bug等
2.x版本系列:架构产生重大变化,引入了yarn平台等许多新特性
Hadoop的模块组成
1、HDFS:一个高可靠、高吞吐量的分布式文件系统。
(海量数据的存储)
HDFS集群包括,NameNode和DataNode以及Secondary Namenode。
2.对比操作三个文件系统:分别用命令行与窗口方式查看windows,Linux和Hadoop的文件系统的用户主目录。
2.用图与自己的话,简要描述名称节点、第二名称节点、数据节点的主要功能及相互关系。
主要功能
1. NameNode
NameNode管理HDFS文件系统的命名空间,它维护文件系统树及树中的所有文件和目录。同时NameNode也负责这些文件和目录的打开、关闭、移动和重命名等操作。而实际文件数据的操作是由DataNode负责。
当Client端发起请求,该请求首先会到达NameNode,NameNode分析请求,然后告诉Client该去哪个DataNode上找什么位置的数据块。得到消息后的Client会直接和DataNode进行交互。
NameNode中元数据种类有:
(1)文件名目录及它们的层级关系;(2)文件目录的所有者及其权限;(3)每个文件块的名称及文件有哪些块组成。
需要注意的是,NameNode保存的元数据信息并不包含每个数据块的位置信息,只包含块的名称及文件由哪些块组成。块的位置信息会在NameNode每次重启时从DataNode获取,并且NameNode通过心跳机制和DataNode保持通信,实时监控文件系统是否在正常运行。
2. DataNode
DataNode运行在slave节点上,也称为工作节点。它负责存储数据块,也负责为Client端提供读写服务,同时还接收NameNode指令,进行创建、删除和复制等操作。DataNode还通过心跳机制定期向NameNode发送所存储文件块列表信息。并且DataNode还和其他DataNode节点通信,复制数据块已达到冗余的目的。
3. SecondaryNameNode
NameNode元数据信息存储在FsImage中,NameNode每次重启后会把FsImage读取到内存中,在运行过程中为了防止数据丢失,NameNode的操作会被不断的写入本地EditLog文件中。
当检查点被触发,FsImage会把EditLog文件中的操作应用一遍,然后把新版的FsImage写回磁盘中,删除EditLog文件中旧的事务信息。检查点有两种触发机制:(1)按秒为单位的时间间隔触发(dfs.namenode.checkpoint.period);(2)达到文件系统累加的事务值触发(dfs.namenode.checkpoint.txns)。
FsImage和EditLog文件的合并就用到了SecondaryNameNode组件,它的工作过程如下:
(1)合并之前通知NameNode把所有操作写入新的EditLog文件中,并将其命名为edits.new;
(2)SecondaryNameNode从NameNode处请求合并FsImage和EditLog;
(3)SecondaryNameNode把FsImage和EditLog合并为新的FsImage文件;
(4)NameNode从SecondaryNameNode获取合并好的新的FsImage并将旧的替换掉,并把EditLog用(1)中创建的edits.new替换。
(5)更新Fstime中的检查点。
相互关系
1)SencodaryNameNode也是在一定条件下才会触发checkpoint(合并)操作,将文件的元数据加载合并,重新传递到namenode节点
2)SecondaryNameNode询问NameNode是否需要CheckPoint。直接带回NameNode是否检查结果。
2)DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息。
3)心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。