hadoop系列教程第一讲:基本概念

2003-2004年,Google公开了部分GFS(分布式文件系统)和Mapreduce思想的细节,以此为基础Doug Cutting等人用了2年业余时间实现了DFS和Mapreduce机制,一个微缩版:Nutch
Hadoop 于 2005 年秋天作为 Lucene的子项目 Nutch的一部分正式引入Apache基金会。2006 年 3 月份,Map-Reduce 和 Nutch Distributed File System (NDFS) 分别被纳入称为 Hadoop 的项目。

什么是hadoop?

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。hadoop使得用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

hadoop为什么可以处理海量数据?

Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。

hadoop的主要模块是哪些?
Hadoop Common(公共子模块): 公共的部件,用来支持hadoop的其他模块。
Hadoop Distributed File System (HDFS):hadoop分布式文件系统,提供了 高可靠性、高扩展性和高吞吐率的数据存储服务。
Hadoop YARN: 负责集群资源的管理和调度。
Hadoop MapReduce: 分布式计算框架(计算向数据移动)具有易于编程、高容错性和高扩展性等优点。

hadoop的存储模型是怎样的?

hadoop的存储模型是字节。
文件被线性切割成块,即Block。Block分散存储在集群的节点中。单一文件Block大小一致。Block可以设置副本数,副本分散存储在不同的节点中。在向HDFS上传文件时,可以设置Block的大小和副本的数量。已经上传的文件Block副本数可以调整,大小不变。HDFS只支持一次写入,但可以多次读取。且同一时刻只能有一个写入者。虽然不能修改数据,但是可以使用append追加数据。
hadoop的存储架构中,主要分为两种节点。第一种是NameNode(NN),第二种是DataNode(DN)。
在hadoop中,一个文件的数据被分为MetaData和数据本身。MetaData主要用来存储数据的位置,名称,大小目录等信息。MetaData被存储在NameNode中,而文件数据本身被存储在DataNode中。NameNode知道一个文件具体存放在哪几个DataNode中。
DataNode与NameNode保持心跳,并提交Block列表。这样NameNode就知道应该去哪些节点上读取数据本身的信息。
HDFS的客户端与NameNode交互元数据信息,然后
HDFS的客户端与DataNode交互文件Block数据。一个大致的架构图就像下面这样:
HDFS架构图
在这个图中,可能你已经发现了一个叫做SecondaryNameNode的节点,关于这个节点我们稍后再做解释。

到底什么是NameNode?

正如上面已经讲到的一样,NameNode主要用来接受客户端的读写服务并收集DataNode汇报的Block列表信息。NameNode的MetaData中主要存在着下面这些数据:

  • 文件owership和permissions
  • 文件大小,时间
  • (Block列表:Block偏移量),位置信息
  • Block每个副本位置(由DataNode上报)

NameNode是基于内存存储的。NameNode的持久化是通过两个文件来完成的。分别为fsimage和edits。MetaData存储到磁盘文件名为”fsimage”的文件中,注意fsimage文件中不保存Block块的位置信息。位置信息是通过DataNode上报的。而edits记录了每一次对MetaData的操作日志。这样一来,我们就可以通过fsimage文件和edits文件来恢复HDFS最新的状态信息。

到底什么是DataNode?

DataNode是Block真正存储的地方。DataNode的本地磁盘以文件形式存储着Block信息。同时还存储着Block的元数据信息文件。
HDFS在启动时,DataNode会向NameNode汇报block的信息。
DataNode通过向NameNode发送心跳保持与其联系(3秒一次),如果NameNode 10分钟没有收到DataNode的心跳,则认为其已经lost,并复制其上的block到其它DataNode。

HDFS的优点是什么?

通过上面的介绍,我们可以得出HDFS的优点:

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

HDFS的缺点是什么?

  • 不适合低延迟数据访问,比如毫秒级
  • 不适合小文件存取,会占用NameNode 大量内存
  • 寻道时间超过读取时间
  • 不支持并发写入和文件随机修改
  • 仅支持append,即只能向文件末尾追加数据

SecondaryNameNode是什么?

初看名字,你可能会以为SecondaryNameNode是NameNode的备份,实际上,SecondaryNameNode的主要作用并不是这个,当然它也可以用来做备份。
要了解SecondaryNameNode的作用,就不得不说一下HDFS的启动过程。
上面我们已经提到了两个文件fsimage和edits。fsimage是当前HDFS系统的快照。edits记录了对HDFS的各种操作日志。
HDFS在启动的时候,根据fsimage和edits日志可以得到系统当前最新的状态,并产生一个新的fsimage文件。这样的启动时很耗时间的。尤其是当edits文件非常大的时候,合并会占用很多额外的时间。SecondaryNameNode就是为了解决这个问题而设立的。SecondaryNameNode会定时的合并NameNode的edit logs到fsimage文件中,产生一个新的fsimage文件,然后拷贝给NameNode。这样HDFS在启动的时候,就不用每次都合并大量的edits操作到fsimage中,大大的加快了启动速度。

HDFS写流程具体是怎样的?

  1. 客户端请求NameNode
  2. NameNode返回是否可以上传
  3. 客户端将文件切分成块,请求NameNode第一个Block应该存储到哪些DataNode上。
  4. NameNode返回给客户端可以上传的文件的DataNode的服务器
  5. 客户端请求其中一台DataNode服务器,然后这台DataNode将调用第二台DataNode,第二台DataNode将调用第三台DataNode,直到最后一台DataNode,这样就建立了一个RPC调用的pipeline。
  6. 客户端开始以packet的方式上传第一个Block给第一个DataNode,第一个DataNode再给第二个DataNode,以此类推,直到所有的DataNode都上传成功。
  7. 第一个Block上传完成后,DataNode向NameNode汇报Block信息,并向客户端汇报完成,客户端向NameNode汇报完成。
  8. 按照1-7的顺序以此上传第二个Block,第三个Block……。直到所有的Block上传成功。

HDFS的读流程具体是怎样的?

  1. 客户端发送文件路径个NameNode。
  2. NameNode返回给客户端文件具体存储在哪些DataNode中。
  3. 客户端请求其中一台DataNode读取数据
  4. DataNode返回数据给客户端
  5. 客户端通过这中方式以此获取Block块,并在本地合并成一个完整的文件。

什么是Hadoop的安全模式?

NameNode启动的时候,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作。
一旦在内存中成功建立文件系统元数据的映射,则创建一个新的fsimage文件(这个操作不需要SecondaryNameNode)和一个空的编辑日志。
此刻NameNode运行在安全模式。即NameNode的文件系统对于客户端来说是只读的。(显示目录,显示文件内容等。写、删除、重命名都会失败)。
在此阶段NameNode收集各个DataNode的报告,当数据块达到最小副本数以上时,会被认为是“安全”的, 在一定比例(可设置)的数据块被确定为“安全”后,再过若干时间,安全模式结束
当检测到副本数不足的数据块时,该块会被复制直到达到最小副本数,系统中数据块的位置并不是由NameNode维护的,而是以块列表形式存储在DataNode中。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值