Hadoop分布式存储系统-HDFS

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解决大数据存储问题

4.  关系型数据库 VS Hadoop

 

关系型数据库

Hadoop

描述

多个独立的关系数据库访问共享资源池

大量服务器网络互连形成集群

优势

多个关系型数据库扩展存储容量和计算能力。单台机器配置高。

计算和存储融合,支持横向扩展

劣势

计算和存储分离,数据访问存在竞争和带宽瓶颈。支持的关系型数据库有限。只能向上扩展,不能横向扩展。

解决数据冲突需要节点间协作

适用范围

需要事务处理的应用

数据仓库、离线数据分析、大规模在线实时应用


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

1.HDFS特性

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

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

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

2.HDFS运行机制

(1)元数据:除文件内容之外的数据,包括文件名、文件大小、权限等。文件越多,元数据越大。

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

(3)数据复制:冗余/副本机制

(4)存放位置:block副本放置策略

(5)故障检测

A.NN(元数据镜像文件fsimage,日志文件edits)

B.DN

a)块报告(安全模式下检测)

b)心跳包(检测是否宕机)

c)数据完整性检测(比较校验和)

(6)空间回收机制:DN中是否有多余空间。

3.HDFS优点

(1)高容错性

a)数据自动保存多个副本

b)副本丢失后自动恢复

(2)适合批处理

a)移动计算而非数据

b)数据位置暴露给计算框架

(3)适合大数据处理

a)GB、TB、PB级数据

b)百万规模以上的文件

c)10k+节点

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

a)多副本提高可靠性

b)容错和恢复机制

4.HDFS缺点

(1)低延迟数据访问

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

(2)小文件存取

占用NN大量内存:小文件多,元数据大,大大占用内存。要对小文件压缩处理。

寻道时间超过读取时间

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

一个文件同时只能有一个写者,仅支持append。

HDFS不适合做修改,如网盘。

5.HDFS架构

(1)客户端请求NN读写文件

(2)NN返回DN,客户端访问DN

(3)DN在磁盘上存储数据是一块一块的

(4)副本越多,丢失数据的可能性越小

6.HDFS数据存储单元

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

a)默认128MB

b)若文件大小不足128MB,则单独为一块。一个块只能存一个文件的数据。

(2)文件存储方式

a)按大小切分成若干块存储到不同节点上。

b)每个块默认有三个副本。副本越多,磁盘利用率越低,磁盘被副本占用。

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

7.HDFS设计思想

(1)每个block有3个副本,这3个副本分别在不同的机器上。

(2)当某块的副本数<指定的副本数,HDFS系统会自动增加副本。复制缺少的block放入空闲节点。

8.NameNode(NN)

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

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

a)文件名、拥有者、权限

b)文件包含哪些块、块编号,每个块都有唯一的编号

c)block位置信息

注:a、b的数据会保存在磁盘中。启动后a、b、c所有数据都加载到内存。

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

① 元数据存储的磁盘文件名为fsimage

② block位置信息不保存到fsimage。HDFS系统启动时DN会把这些数据上报给NN,NN收到后保存在内存中。

③ edits记录对元数据的操作日志。当增加/删除数据时,不立即修改fsimage文件,而是在edits文件中记录一条操作记录,某段时间内把edits中的记录和fsimage文件合并,合并时增加/删除fsimage中数据。

9.SecondaryNameNode(SNN)

(1)SNN不是NN的备份,但可以做一部分元数据的备份,不是实时备份。主要是帮助NN合并edits文件。合并过程有大量IO操作,合并后生成新的fsimage,推送给NN替换原来的fsimage。

(2)SNN合并时机

① 配置文件设置时间间隔fs.checkpoint.period,默认3600s。没有超过edits文件默认最大值64MB,每3600s合并一次。

② 配置文件设置edits文件大小fs.checkpoint.size,规定edits文件的默认最大值64MB。超过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汇报block位置信息

(3)每3sDN主动向NN发送一次心跳,保持与其联系。如果NN10min没有收到DN的心跳,则认为其已经lost,NN立即向对应的DN发送消息告知哪些block缺少副本,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中。

猜你喜欢

转载自blog.csdn.net/u010995220/article/details/80052789