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中。