别问是fw

导航

04 Hadoop思想与原理

1-简要描述Hadoop起源与发展阶段 

①Hadoop最早起源于lucene下的Nutch。Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取、索引、查询等功能,但随着抓取网页数量的增加,遇到了严重的可扩展性问题——如何解决数十亿网页的存储和索引问

Hadoop 1.x
       海量数据存储 ----> HDFS
       海量数据分析计算 ----> MapReduce
Hadoop 2.x 增加
       资源调度系统 ----> Yarn 

②2003年、2004年谷歌发表的三篇论文为该问题提供了可行的解决方案。
分布式文件系统(GFS),可用于处理海量网页的存储
分布式计算框架MAPREDUCE,可用于处理海量网页的索引计算问题。
分布式的结构化数据存储系统Bigtable,用来处理海量结构化数据。

③Doug Cutting基于这三篇论文完成了相应的开源实现HDFS和MAPREDUCE,并从Nutch中剥离成为独立项目HADOOP,到2008年1月,HADOOP成为Apache顶级项目

 

Hadoop1.0、2.0和3.0的区别

0.x Hadoop当中最早的一个开源版本,在此基础上演变而来的1.x以及2.x的版本
1.x 版本系列:Hadoop版本当中的第二代开源版本,主要修复0.x版本的一些bug等
2.x 版本系列:架构产生重大变化,引入了yarn平台等许多新特性

 

 

 

 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依然是单点,如果发生故障要手工切换

posted on 2021-10-23 12:39  夹心气泡水  阅读(80)  评论(0编辑  收藏  举报