大数据基础总结 |
您所在的位置:网站首页 › hdfs的元数据存储在 › 大数据基础总结 |
HDFS分布式文件系统
文件系统的基本概述
文件系统定义:文件系统是一种存储和组织计算机数据的方法,它使得对其访问和查找变得容易。
文件名:在文件系统中,文件名是用于定位存储位置。
元数据(Metadata):保存文件属性的数据,如文件名,文件长度,文件所属用户组,文件存储位置等。
数据块(Block):存储文件的最小单元。对存储介质划分了固定的区域,使用时按这些区域分配使用。
HDFS的概述
HDFS(Hadoop Distributed File System)基于Google发布的GFS论文设计开发。HDFS是Hadoop技术框架中的分布式文件系统,对部署在多台独立物理机器上的文件进行管理。 可用于多种场景,如: 网站用户行为数据存储。 生态系统数据存储。 气象数据存储。 HDFS的优点和缺点其除具备其它分布式文件系统相同特性外,还有自己特有的特性: 高容错性:认为硬件总是不可靠的。 高吞吐量:为大量数据访问的应用提供高吞吐量支持。 大文件存储:支持存储TB-PB级别的数据。 不适用场景[1] 低时间延迟数据访问的应用,例如几十毫秒范围。 原因:HDFS是为高数据吞吐量应用优化的,这样就会造成以高时间延迟为代价。[2] 大量小文件 。 原因:NameNode启动时,将文件系统的元数据加载到内存,因此文件系统所能存储的文件总数受限于NameNode内存容量。,那么需要的内存空间将是非常大的。[3] 多用户写入,任意修改文件。 原因:现在HDFS文件只有一个writer,而且写操作总是写在文件的末尾。 流式数据访问 流式数据访问:在数据集生成后,长时间在此数据集上进行各种分析。每次分析都将涉及该数据集的大部分数据甚至全部数据,因此读取整个数据集的时间延迟比读取第一条记录的时间延迟更重要。 与流数据访问对应的是随机数据访问:它要求定位、查询或修改数据的延迟较小,比较适合于创建数据后再多次读写的情况,传统关系型数据库很符合这一点。 HDFS的架构HDFS架构包含三个部分:NameNode,DataNode,Client。 NameNode:NameNode用于存储、生成文件系统的元数据。运行一个实例。 DataNode:DataNode用于存储实际的数据,将自己管理的数据块上报给NameNode ,运行多个实例。 Client:支持业务访问HDFS,从NameNode ,DataNode获取数据返回给业务。多个实例,和业务一起运行。 HDFS数据的写入流程ZKFC控制NameNode主备仲裁 ZKFC作为一个精简的仲裁代理,其利用zookeeper的分布式锁功能,实现主备仲裁,再通过命令通道,控制NameNode的主备状态。ZKFC与NN部署在一起,两者个数相同。元数据同步 主NameNode对外提供服务。生成的Editlog同时写入本地和JN,同时更新主NameNode内存中的元数据。 备NameNode监控到JN上Editlog变化时,加载Editlog进内存,生成新的与主NameNode一样的元数据。元数据同步完成。 主备的FSImage仍保存在各自的磁盘中,不发生交互。FSImage是内存中元数据定时写到本地磁盘的副本,也叫元数据镜像。 元数据持久化 EditLog:记录用户的操作日志,用以在FSImage的基础上生成新的文件系统镜像。 FSImage:用以阶段性保存文件镜像。 FSImage.ckpt:在内存中对fsimage文件和EditLog文件合并(merge)后产生新的fsimage,写到磁盘上,这个过程叫checkpoint.。备用NameNode加载完fsimage和EditLog文件后,会将merge后的结果同时写到本地磁盘和NFS。此时磁盘上有一份原始的fsimage文件和一份新生成的checkpoint文件:fsimage.ckpt. 而后将fsimage.ckpt改名为fsimage(覆盖原有的fsimage)。 EditLog.new: NameNode每隔1小时或Editlog满64MB就触发合并,合并时,将数据传到Standby NameNode时,因数据读写不能同步进行,此时NameNode产生一个新的日志文件Editlog.new用来存放这段时间的操作日志。Standby NameNode合并成fsimage后回传给主NameNode替换掉原有fsimage,并将Editlog.new 命名为Editlog。 HDFS联邦(Federation)副本距离计算公式: Distance(Rack1/D1, Rack1/D1)=0,同一台服务器的距离为0。 Distance(Rack1/D1, Rack1/D3)=2,同一机架不同的服务器距离为2。 Distance(Rack1/D1, Rack2/D1)=4,不同机架的服务器距离为4。副本放置策略: 第一个副本在本节点。 第二个副本在远端机架的节点。 第三个副本看之前的两个副本是否在同一机架,如果是则选择其他机架,否则选择和第一个副本相同机架的不同节点,第四个及以上,随机选择副本存放位置。如果写请求方所在机器是其中一个DataNode,则直接存放在本地,否则随机在集群中选择一个DataNode。 Rack1:表示机架1。 D1:表示DataNode节点1。 B1:表示节点上的block块1。 配置HDFS数据存储策略默认情况下,HDFS NameNode自动选择DataNode保存数据的副本。在实际业务中,存在以下场景: DataNode上存在的不同的存储设备,数据需要选择一个合适的存储设备分级存储数据。 DataNode不同目录中的数据重要程度不同,数据需要根据目录标签选择一个合适的DataNode节点保存。 DataNode集群使用了异构服务器,关键数据需要保存在具有高度可靠性的节点组中。 配置HDFS数据存储策略--分级存储配置DataNode使用分级存储 配置DataNode使用标签存储: 支持用户将数据块的各个副本存放在指定具有不同标签的节点,如某个文件的数据块的2个副本放置在标签L1对应节点中,该数据块的其他副本放置在标签L2对应的节点中。支持选择节点失败情况下的策略,如随机从全部节点中选一个。简单的说:给DataNode设置标签,被存储的数据也有标签。当存储数据时,数据就会存储到标签相同的DataNode中。 配置HDFS数据存储策略--节点组存储配置DataNode使用节点组存储: 使用约束: 第一份副本将从强制机架组(机架组2)中选出,如果在强制机架组中没有可用节点,则写入失败。 第二份副本将从本地客户端机器或机架组中的随机节点中(当客户端机器机架组不为强制机架组时)选出。 第三份副本将从其他机架组中选出。 各副本应存放在不同的机架组中。如果所需副本的数量大于可用的机架组数量,则会将多出的副本存放在随机机架组中。 由于副本数量的增加或数据块受损导致再次备份时,如果有一份以上的副本缺失或无法存放至强制机架组,将不会进行再次备份。系统将会继续尝试进行重新备份,直至强制组中有正常节点恢复可用状态。 简单的说:就是强制某些关键数据存储到指定服务器中。 Colocation同分布 同分布(Colocation)的定义:将存在关联关系的数据或可能要进行关联操作的数据存储在相同的存储节点上。 按照下图存放,假设要将文件A和文件D进行关联操作,此时不可避免地要进行大量的数据搬迁,整个集群将由于数据传输占据大量网络带宽,严重影响大数据的处理速度与系统性能。HDFS主要目的是保证存储数据完整性,对于各组件的失效,做了可靠性处理。 重建失效数据盘的副本数据 DataNode向NameNode周期上报失败时,NameNode发起副本重建动作以恢复丢失副本。集群数据均衡 HDFS架构设计了数据均衡机制,此机制保证数据在各个DataNode上分布是平均的。元数据可靠性保证 采用日志机制操作元数据,同时元数据存放在主备NameNode上。 快照机制实现了文件系统常见的快照机制,保证数据误操作时,能及时恢复。安全模式 HDFS提供独有安全模式机制,在数据节点故障,硬盘故障时,能防止故障扩散。重建失效数据盘的副本数据 DataNode与NameNode之间通过心跳周期汇报数据状态,NameNode管理数据块是否上报完整,如果DataNode因硬盘损坏未上报数据块, NameNode将发起副本重建动作以恢复丢失的副本。安全模式防止故障扩散 当节点硬盘故障时,进入安全模式,HDFS只支持访问元数据,此时HDFS 上的数据是只读的,其他的操作如创建、删除文件等操作都会导致失败。待硬盘问题解决、数据恢复后,再退出安全模式。 HDFS架构其他关键设计要点说明统一的文件系统: HDFS对外仅呈现一个统一的文件系统。空间回收机制: 支持回收站机制,以及副本数的动态设置机制。数据组织: 数据存储以数据块为单位,存储在操作系统的HDFS文件系统上。访问方式: 提供JAVA API,HTTP方式,SHELL方式访问HDFS数据。磁盘使用率: 比如磁盘100G,用了30G,使用率30%。负载均衡避免了节点间数据分布不均匀,导致热点节点问题。 思考题 1HDFS是什么,适合于做什么? 运行在通用硬件上的分布式文件系统。适合于大文件存储与访问、流式数据访问。2HDFS包含那些角色? NameNode、DataNode、Client。3 请简述HDFS的读写流。 读取:Client联系NameNode,获取文件信息。Client根据从NameNode获取到的信息,联系DataNode,获取相应的数据块;数据读取完成后,业务调用close关闭连接。 写入:Client联系NameNode,NameNode在元数据中创建文件节点;Client联系DataNode并建立流水线,完成后,客户端再通过自有协议写入数据到 DataNode1,再由DataNode1复制到DataNode2,DataNode3;业务调用close关 闭连接;Client联系NameNode,确认数据写完成。FusionInsight大数据开发---HDFS应用开发 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |