Hadoop分布式文件系统-HDFS

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010995220/article/details/80052789

Hadoop分布式文件系统-HDFS

一、Hadoop概述

1.  Google集群系统

Hadoop是Google集群系统的开源实现

    (1)Google集群系统:GFS、MapReduce、BigTable

    (2)Hadoop:HDFS、MapReduce、HBase

Hadoop的初衷是解决Nutch海量数据的爬取和存储

Hadoop于2005年作为Lucene子项目Nutch的一部分正式引入Apache基金会

2.  Hadoop核心

(1)分布式文件系统HDFS:提供高可靠性、高扩展性和高吞吐量的数据存储服务

(2)分布式计算框架MapReduce:具有易于编程、高容错性和高扩展性的优点

3.  HDFS解决大数据存储问题

二、Hadoop分布式文件系统-HDFS

1.HDFS特性

(1)高可靠性:HDFS创建多份数据块的副本,并将它们放置在服务器集群的不同计算节点中

(2)高扩展性:支持服务器群节点横向扩展

(3)高吞吐量:访问超大数据集

2.HDFS运行机制

(1)元数据:除文件内容之外的数据,包括文件名、拥有者、权限等。

  • 文件越多,元数据越大。

(2)元数据保存在磁盘中,启动时加载到内存,工作时到内存读数据。

(3)DataNode的副本机制

(4)block副本放置位置:机架感知策略

(5)故障检测

  • NameNode
  1. 镜像文件fsimage
  2. 日志文件edits
  • DataNode
  1. 块报告(安全模式下检测)
  2. 心跳包(检测是否宕机)
  3. 数据完整性检测(比较校验和)

(6)空间回收机制

  • DataNode中是否有多余空间
  • 删除数据的同时删除对应的元数据

3.HDFS优点

(1)高容错性(副本机制)

  • 数据自动保存多个副本
  • 副本丢失后自动恢复

(2)适合批处理

  • 移动计算而不移动数据
  • 数据位置暴露给计算框架

(3)适合大数据处理

  • GB、TB、PB级数据
  • 百万规模以上的文件
  • 10k+节点

(4)可构建在廉价机器上

  • 多副本提高可靠性

4.HDFS缺点

(1)低延迟数据访问

  • 毫秒级:HDFS存储数据量多,在毫秒内出现查询结果的需求不适合HDFS

(2)小文件存取

  • 占用NameNode大量内存:小文件多,元数据大,大大占用内存(对小文件压缩处理)
  • 寻道时间超过读取时间

(3)并发写入、文件随机修改

  • 一个文件同时只能有一个写者(hadoop2.x仅支持append)
  • HDFS不适合做修改,如网盘

5.HDFS架构

  • 客户端请求NameNode读写文件
  • NameNode将DataNode返回给客户端,客户端访问DataNode
  • DataNode以块(block)为单位在磁盘上存储数据
  • 副本数量越多,丢失数据的可能性越小

6.HDFS数据存储单元(block)

(1)文件被切分成固定大小的数据块

  • 默认128MB(可配)
  • 若文件大小不足128MB,则单独为一块(一个块只能存一个文件的数据)

(2)文件存储方式

  • 逻辑上,按大小切分成若干块存储到不同节点上
  • 每个块默认有三个副本(副本越多,磁盘利用率越低,磁盘被副本占用)

(3)块的大小和副本数在上传文件时设置,文件上传成功后副本数可变,块的大小不可变

7.HDFS设计思想

  • 每个块有3个副本分别在不同的机器上
  • 当某个块的副本数<指定的副本数,HDFS自动增加副本,复制缺少的块到空闲节点

8.NameNode(NN)

(1)NN主要功能:接收/处理客户端读写请求

(2)NN保存元数据的信息包括

  1. 文件名、拥有者、权限
  2. 文件包含的块、块编号(每个块都有唯一的编号)
  3. 块的位置信息

(3)元数据信息在NN启动后会加载到内存

  • 元数据存储的磁盘文件名为fsimage
  • 块的位置信息不会保存到fsimage,而是由DN启动时上报给NN,NN收到后保存到内存中
  • edits记录对元数据的操作日志。(增加/删除数据时,不会立即修改fsimage文件,而是在edits中记录一条操作日志,一段时间内把edits日志和fsimage文件合并,合并时增加/删除fsimage中的数据)

9.SecondaryNameNode(SNN)

(1)SNN不是NN的备份,但可以做一部分元数据的备份,不是实时备份

(2)SNN的主要作用是帮助NN合并edits文件
(3)为什么NN不做合并?

  • 合并需要占用大量资源,而NN主要功能是接收处理客户端的读写请求,如果NN处理合并操作,那么用户的读写请求会很慢(使用SNN提高了用户体验)

(4)合并过程有大量IO操作,合并生成新的fsimage,并推送给NN替换原来的fsimage

(5)SNN合并时机

  1. fs.checkpoint.period设置合并操作的时间间隔(默认3600s,若edits文件没有超过默认的最大值,则每3600s合并一次)
  2. fs.checkpoint.size设置edits文件的大小(默认最大值64MB,若edits文件超过64MB、没有达到3600s,同样也会合并)

10.SNN合并流程

(1)拷贝时若用户正在读写文件,则产生新的edits文件记录在合并时间内用户的操作日志

(2)合并edits和fsimage文件,生成新的fsimage并推送给NN替换原来的fsimage文件

(3)新的edits文件默认每3600s产生一次

(4)NN的工作数据都在内存中;NN中edits、fsimage文件及合并机制帮助磁盘上数据随着用户操作进行更新

(5)SNN为NN做一定量的数据备份,但不是热备。NN挂掉后只能找到一部分拷贝的fsimage文件(建议NN和SNN放在不同的机器上)

11.DataNode(DN)

(1)存储数据

(2)启动时DN向NN汇报块的位置信息

(3)DN每隔3s主动向NN发送心跳;如果NN10min内没有收到DN的心跳,则认为其已经lost,NN立即向对应的DN发送消息告知哪些块缺少副本,DN复制副本到其他的DN上

12.Block副本放置策略

(1)第一个副本:文件上传时NN就近随机挑选一台磁盘不满、CPU不忙的DN存储

(2)第二个副本:与第一个副本不同机架的节点上(同一个机架一般是一个电源,电源断掉,则整个机架的服务器都会断掉,那么此机架上所有服务器的副本都将丢失,所以要存在另一个机架上),两个不同的机架保证安全性

(3)第三个副本:与第二个副本相同机架的节点上(保证安全性的同时保证速度,同一个机架传输速度快,同一个机架一般是一个交换机)

(4)更多副本:随机节点

13.HDFS读流程

1. 初始化FileSystem,客户端调用FileSystem的open函数打开文件。

2. FileSystem通过RPC请求NN得到block位置信息,NN返回block对应的DN地址。

3. FileSystem返回FSDataInputStream给客户端,客户端调用Stream的read函数开始读取数据。

4. FSDataInputStream连接保存该文件的第一个最近的数据块的DN,数据从DN读到客户端。

5. 此块读取完毕,关闭与该DN的连接,然后连接此文件的下一个最近的数据块的DN。

6. 客户端读取完毕,调用Stream的close函数。

注:读取数据时,如果客户端与DN通信出现错误,则尝试连接包含此数据块的下一个DN,并且记录失败的DN,以后不再连接。

14.HDFS写流程

1. 初始化FileSystem,客户端调用create函数创建文件。

2. FileSystem通过RPC请求NN创建新文件。

3. FileSystem返回FSDataOutputStream给客户端,客户端调用Stream的write函数开始写入数据。

4. FSDataOutputStream将数据分块、写入队列,Data Streamer到队列读取数据,并通知NN分配DN存储数据块。分配的DN放在pipeline中。Data Streamer将数据块写入pipeline的第一个DN,第一个DN将数据块发送给第二个DN,第二个DN将数据块发送给第三个DN。

5. 等待pipeline中DN数据写入成功,返回ack给FSDataOutputStream。

6. 客户端调用Stream的close函数结束写入数据。

7. FileSystem通知NN写入完毕。

注:若数据写入失败,则关闭pipeline,将ack中数据块写入数据队列的开始。错误节点重启会删除过时的数据块。失败的DN从pipeline中移除,数据块写入pipeline的另外两个DN。NN则被通知此数据块副本不足,将会创建第三个备份。

15.HDFS文件权限

(1)文件的拥有者是文件上传时的用户名

(2)如果windows默认用户Adminstrator上传文件到HDFS,那么这个文件在HDFS上的拥有者就是Adminstrator。与Linux有无这个用户无关,只要文件系统上有这个用户即可。

(3)HDFS权限目的:阻止好人做错事,而不是阻止坏人做坏事。HDFS相信,你告诉我你是谁,我就认为你是谁。无密码认证,导致Hadoop安全性差。

16.安全模式

(1)安全模式:启动HDFS时进入,理解为检查初始化阶段。

(2)安全模式下不能对HDFS进行操作,只能查看目录、文件名。

(3)安全模式下所有DN刚启动,同时DN上block位置信息要汇报给NN,这一过程就是安全模式时间。

(4)安全模式时间内NN要检测DN上副本数是否正确。

(5)NN启动时将映像文件fsimage载入内存,并执行edits日志中各项操作。

(6)一旦在内存中成功建立HDFS元数据映射,则创建一个新的fsimage和edits文件。

(7)在安全模式下,文件系统对于客户端来说是只读,NN收集各个DN的报告。当数据块达到最小副本数以上,被认为安全。在一定比例的数据块被确定为安全后若干时间,安全模式结束。

(8)当副本数不足时,该块会被复制直至达到最小副本数。系统中数据块的位置不是由NN维护,而是以块列表形式存储DN中。

展开阅读全文

没有更多推荐了,返回首页