hadoop介绍

来源:互联网 发布:windows kits 编辑:程序博客网 时间:2024/05/18 00:54

Hadoop

hadoop官网:

http://hadoop.apache.org/

Hadoop的思想之源:Google

面对的数据和计算难题   大量的网页怎么存储   搜索算法带给我们的关键技术和思想   GFS   Map-Reduce

Hadoop创始人介绍

Hadoop作者Doug cutting,就职Yahoo期间开发了Hadoop项目,目前在Cloudera 公司从事架构工作

Hadoop简介

名字来源于Doug Cutting儿子的玩具大象1> 2003~2004年,Google公开了部分GFS和MapReduce思想的细节,以此为基础Doug Cutting等人用了2年业余时间实现了DFS和MapReduce机制,一个微缩版:Nutch2> Hadoop于2005年秋天作为Lucene的子项目Nutch的一部分正式引入Apache基金会。2006年3月份,MapReduce和Nutch Distributed File System(NDFS)分别被纳入成为Hadoop的项目中分布式存储系统HDFS(Hadoop Distriuted File System)   分布式存储系统   提供了高可靠性、高拓展性和高吞吐率的数据存储服务分布式计算框架MapReduce   分布式计算框架   具有已与编程、高容错性和高拓展性等优点

HDFS优点:

1> 高容错性:   数据自动保存多个副本   副本丢失后,自动恢复2> 适合批处理:   移动计算而非数据   数据位子暴露给计算框架3> 适合大数据处理:   GB、TB、甚至PB级数据   百万规模以上的文件数量   10K+ 节点4> 可构建在廉价机器上:   通过多副本提供可靠性   提供了容错和恢复机制

HDFS缺点:

1> 低延时数据访问   比如毫秒级   低延时与高吞吐率2> 小文件存取   占用NameNode大量内存   寻道时间超过读取时间3> 并发写入、文件随机修改    一个文件只能有一个写者    仅支持append

HDFS架构



HDFS架构-文件

1> 文件切分成块(默认大小128M),以块为单位,每个块有多个副本存储在不同的机器上,副本数可在文件生成时指定(默认3)2> NameNode是主节点,存储文件的元数据如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限),以及每个文件的块列表以及块所在的DataNode等等3> DataNode在本地文件系统存储文件块数据,以及块数据的校验和 ,可以创建、删除、移动或重命名文件,当文件创建、写入和关闭之后不能修改文件内容

HDFS架构-组件功能

HDFS架构-可靠性

1> 一个名字节点和多个数据节点2> 数据复制(冗余机制)    存放的位置(机架感知策略)3> 故障检测    数据节点        心跳点(检测是否宕机)        块报告(安全模式下检测)        数据完整性检测(校验和比较)    名字节点(日志文件,镜像文件)4> 空间回收机制


HDFS数据存储单元(block)

文件被切分成固定大小的数据块     默认数据块大小为64MB,可配置     若文件大小不到64MB,则单独存成一个block     Hadoop2.x,默认数据块大小为128MB一个文件存储方式     按大小被切分成若干个block,存储到不同节点上     默认情况下每个block都有三个副本Block大小和副本数通过Client端上传文件时设置,文件上传成功后副本数可以变更,Block Size不可变更

HDFS设计思想:

NameNode(NN)

NameNode:中心服务器,负责文件元数据的操作,跟文件内容相关的数据流不经过NameNode,只会询问它跟哪个DataNode联系,否则NameNode会成为系统的瓶颈NameNode全权管理数据块的复制,它周期性地从集群中的每个DataNode接受心跳信号和块状态报告(Blockreport)。接收到心跳信号意味着该DataNode节点工作正常。块状态报告包含了一个该DataNode上所有数据块的列表NameNode主要功能:接受客户端的读写服务NameNode保存:metadate信息包括     文件owership和permissions     文件包括哪些块     Block保存在哪个DataNode(由DataNode启动时上报)NameNode的metadate信息在启动后会加载到内存     metadata存储到磁盘文件名为"fsimage"     Block的位置信息不会保存到fsimage     edits记录对metadata的操作日志Hadoop NameNode元数据主要是两个文件edits和fsimagefsimage文件是HDFS的最新状态(截止到fsimage文件创建时间的最新状态)文件edits是自fsimage创建后的namespace操作日志NameNode每次启动的时候,都要合并两个文件,按照edits的记录,把fsimage文件更新到最新如果是一个大的、比较繁忙的集群,他的edits文件增长会非常快,这样下次NameNode重启的过程会非常慢,因为它要进行大量的操作

SecondaryNameNode

它并不是NN的备份(但可以做备份),他的主要工作是帮助NameNode合并edits log,减少NN启动时间SNN执行合并时间   根据配置文件设置的时间间隔fs.checkpoint.period 默认3600秒/(1个小时)   根据配置文件设置edits log大小fs.checkpoint.size规定edits文件的最大值默认是64MB

Secondary NameNode操作流程:

1> Secondary NameNode定期地从NameNode上获取元数据。当它准备获取元数据的时候,就通知NameNode暂停写入edits文件2> NameNode收到请求后停止写入edits文件,之后的log记录写入一个名为edits.new的文件3> Secondary NameNode获取到元数据以后,把edits文件和fsimage文件在本机进行合并,创建出一个新的fsimage文件,然后把新的fsiamge文件发送会NameNode4> NameNode收到Secondary NameNode发回的fsimage后,就拿它覆盖掉原来的fsimage文件,并删除edits文件,把edits.new重命名为edits

SNN(Secondary NameNode)合并流程

DateNode(DN)

DataNode负责处理文件内容的读写请求存储数据(Block)启动DataNode线程的时候会向NameNode汇报block信息通过向NameNode发送心跳保持与联系(3秒一次),如果NameNode10分钟没有收到DataNode的心跳,则认为其已经lost,并copy其上的block到其他DN1> 一个数据块在DataNode以文件存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块长度,块数据的校验和,以及时间戳2> DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有块信息3> DataNode在本地文件系统存储文件块数据,以及块数据的校验和4> 可以创建、删除、移动或重命名文件,当文件创建、写入和关闭之后不能修改文件内容

HDFS副本放置策略


HDFS写流程

HDFS读流程

HDFS文件权限

与Linux文件权限类似r:read;w:write;x:execute,权限x对于文件忽略,对于文件夹表示是否允许访问其内容如果Linux系统用户zhangsan使用hadoop命令创建一个文件,那么这个文件在HDFS中owner就是zhangsan。HDFS的权限目的:阻止好人错错事,而不是阻止坏人做坏事。HDFS相信,你告诉我你是谁,我就认为你是谁。不安全的好处:速度快

安全模式

namenode启动的时候,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作。1> 一旦在内存中成功建立文件系统元数据的映射,则创建一个新的fsimage文件(这个操作不需要SecondaryNameNode)和一个空的编辑日志。2> 此刻namenode运行在安全模式。即namenode的文件系统对于客服端来说是只读的。(显示目录,显示文件内容等。写、删除、重命名都会失败)。3> 在此阶段Namenode收集各个datanode的报告,当数据块达到最小副本数以上时,会被认为是“安全”的, 在一定比例(可设置)的数据块被确定为“安全”后,再过若干时间,安全模式结束4> 当检测到副本数不足的数据块时,该块会被复制直到达到最小副本数,系统中数据块的位置并不是由namenode维护的,而是以块列表形式存储在datanode中NameNode启动时间取决于:1> DataNode的数量2> fsimage文件的大小->文件的大小很大、文件的数量很多解决很多小文件问题:将这些小文件进行压缩,这样空间会大量的减少,但是你解压的时间会变长(没人这么做,都是用空间换时间)一般情况下将小文件合成大文件

SNN恢复NN

模拟NameNode故障以从SecondaryNameNode恢复场景假设:如果NameNode上除了最新的检查点以外,所有的其他的历史镜像和edits文件都丢失了,NameNode可以引入这个最新的检查点以恢复。具体模拟步骤如下:1> 在配置参数dfs.name.dir指定的位置建立一个空文件夹2> 把检查点目录的位置复制给配置参数fs.checkpoint.dir3> 启动NameNode,并加上-importCheckpointNameNode会从fs.checkpoint.dir目录读取检查点,并把它保存在dfs.name.dir目录下。如果dfs.name.dir目录下有合法的镜像文件,NameNode会启动失败NameNode会检查fs.checkpoint.dir目录下镜像文件的一致性,但是不会去改动它

Backup Node

Secondary NameNode 和 CheckPoint Node都只是提供一个fsimage更新和检查点备份(备份数据较旧,数据不一致),并不提供NameNode服务

Backup Node工作原理:

1> Backup Node在内存中维护了一份从NameNode同步过来的fsimage,同时它还从NameNode接受edits文件的日志流,并把它们持久化硬盘2> Backup Node把收到的这些edits文件和内存中的fsimage文件进行合并,创建一份元数据备份 3> Backup Node高效的秘密就在这儿,它不需要从NameNode下载fsimage和edit,把内存中的元数据持久化到磁盘然后进行合并即可Hadoop集群只支持一个Backup Node,如果Backup Node出了问题,元数据的备份机制也就失效了


1 0
原创粉丝点击