HDFS学习

网友投稿 243 2022-11-14

HDFS学习

一、HDFS学习

一)HDFS概述(Hadoop分布式文件系统)

1、HDFS简述

源自于Google的GFS论文,发表于2003年10月,HDFS是GFS克隆版。

HDFS是Hadoop体系中存储管理的基础。他是高度容错的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行。

HDFS简化了文件的一致性模型,通过流式数据访问,提高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序。

它提供了一次写入多次读取的机制,数据以块的形式,同时分布式在集群不同物理机上

2、HDFS优缺点

1、HDFS优点

高容错性

数据自动保存多个副本副本丢失后,自动修复

良好的的数据访问机制

适合批处理:移动计算而非数据(若需要数据在机器A上,计算逻辑只会运行在机器A,不用移动数据)一次写入、多次读取,保证数据一致性数据位置提供给上层计算框架,即数据的计算“本地化”

追加写入的方式:避免不必要的锁机制适合大数据文件的存储

TB、甚至PB级数据1K+节点规模,扩展能力很强

2、HDFS的缺点

低延迟数据访问:多轮RPC调用(不适合在线业务系统)

难以应付毫秒级以下的应用

海量小文件存取

占用NameNode大量内存寻道时间超过读取时间

并发写入,文件随机修改

一个文件只能有一个写入者:没有leader角色,不支持并发写仅支持append

二)HDFS

1、HDFS概述

HDFS是通过目录和文件组成的分层的架构

文件是由一系列块组成,除了最后一个块,其他大小相同。

shell命令有和系统命令类似功能的参数,create remove,move,rename等操作

Namenode维护这个文件系统本身

所有文件的修改将被NameNode所记录

客户端可以指定所需的副本数

2、HDFS架构示意图

CS架构:分为两部分,NameNode(服务端)和DataNode(客户端)

Client是第三方程序。

访问数据:Client请求访问NameNode,NameNode返回相应的元数据(告知client数据在哪个DataNode上),client找对应的DataNode读取数据。

NameNode负责数据存储到哪个节点上。

容错机制(数据备份): NameNode将数据存储到某个节点的同时,会根据配置创建对应副本到其他(物理)节点上(可以感知数据在哪个物理节点上)。

HDFS分布式文件系统图:

HDFS读取写入流程图

HDFS读取数据流程图

HDFS数据写入流程图

3、namenode和datanode角色职责

1、namenode

集群master(仅有一个活动的主节点)管理HDFS的文件系统镜像、操作日志管理数块映射信息

文件与数据块映射关系DataNode与数据块映射关系

配置副本策略处理客户端读写请求元数据存储形式:三种

内存:最完整且最新的元数据一定是内存中的这一部分Edit Log文件:edits_ 开头的文件Fsimage文件

接收用户操作请求维护文件系统的目录结构管理文件与block之间关系,block与datanode之间关系与DataNode的通信

NameNode启动时,可通过心跳信息重构映射关系DataNode运行过程中定时汇报当前block信息

2、secondary/Standby namenode

辅助NameNode,分担其工作量;定期合并fsimage和editlogs,推送给NameNode

secondary namenode工作机制剖析

3、datanode

NameNode两个重要文件

fsimage:元数据镜像(保存文件系统的当前结构)editlog:元数据操作日志(针对目录树的修改操作)

元数据镜像

内存中保存一份最新的FSImage镜像

DataNode的职责

DataNode定期向NameNode发送心跳信息按照namenode的要求存储文件文件被分成block存储在磁盘上为保证数据安全,文件会有多个副本

client

负责文件的切分与NameNode交互,获取文件位置信息与DataNode交互,读取或写入数据

DataNode(slave)

存储实际的数据块执行数据块读/写执行数据块的创建、拷贝和删除命令定期向NameNode发送心跳、块报告

4、JournalNode

只在 HDFS 的 HA 模式下出现,其作为守护进程实现了元数据在主、备节点的共享JournalNode 的元数据目录在 hdfs-site.xml 文件中通过 dfs.journalnode.edits.dir 参数指定

JournalNode 只在 HDFS 的 HA 模式下出现,其作为一个守护进程,实现了元数据在主、备节点的共享。JournalNode 的元数据目录在 hdfs-site.xml 文件中通过 dfs.journalnode.edits.dir 参数指定,包含一个 VERSION 文件,多个 edits_xx 文件和一个 edits_inprogress_xxx 文件,还包含一些与 HA 实现相关的文件,这些文件主要是为了防止脑裂,但 JournalNode 中并不包含 fsimage 和 seen_txid 文件。

在 HA 模式下,StandbyNameNode 之所以会周期地让主 NameNode 对 Edit Log 文件进行回滚,间隔周期由 dfs.ha.log-roll.period 指定,默认是 120s,是因为 StandbyNameNode 不会读取 inprogress 的 Edit Log 文件,它只会周期性(dfs.ha.tail-edits.period,默认是 60s)的去检测已经完成的 Edit Log 文件,然后将该 Edit Log 文件通过 JournalNode 读取到内存,进而更新 Fsimage 在内存中的状态。在达到 checkpoint 触发条件后,新的 Fsimage 文件会在 StandbyNameNode 上生成。接着,StandbyNameNode 会删除自己磁盘上保留的陈旧 Fsimage 文件,然后将新的 Fsimage 文件上传给主 NameNode

注意:

在 HA 模式下,客户端请求只能和主 NameNode 进行通信,而主 NameNode 会将写操作信息分别写入本地的 Edit Log 文件中和 JournalNode 中的 Edit Log 文件。StandbyNameNode 只会周期性的去 JournalNode 中读取 Edit Log 文件进行同步,并将生成的新 Fsimage 文件传送给主 NameNode。通过这种机制,可以几乎实时的实现元数据的同步,当主 NameNode 发生宕机后,StandbyNameNode 自动切换为 Active 状态,开始对外提供读、写服务。

你可能发现了,在主 NameNode 元数据目录下会有非常多的 Edit Log 文件,而在 StandbyNameNode 元数据目录下只有一个 edits_inprogress_xxx 文件,这是因为 StandbyNameNode 并不会从 JournalNode 上拉取 Edit Log 文件保存到磁盘。而主 NameNode 下 Edit Log 文件每两分钟(由 dfs.ha.log-roll.period 控制)生成一个,所以我们需要定期清理陈旧的 Edit Log 文件。

4、架构

定期合并fsimage与editlog

editlog文件过大将导致NameNode重启速度慢editlog达到一定大小(fs.checkpoint.size)或者一定时间间隔(fs.checkpoint.period),NameNode将内存中文件和目录元数据更新到FSImageNN启动后,将editlog和FSImage合并重构内存元数据

HDFS中的数据块

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

默认数据块大小为128MB(134217728)可通过dfs.blocksize来配置当不足一个数据块时,则按实际大小存储按大小被切分成若干个block,存储到不同节点上默认情况下每个block有是三个副本

为何数据块如此之大

数据传输时间超过寻道时间(高吞吐率)一个文件存储方式当数据块不足一个块大小时,也占用一个元数据信息条目

三)HDFS的存储

hdfs的存储策略帮助信息

hdfs storagepolicies -help

丢失块处理

hdfs debug recoverLease -path -retries hdfs debug recoverLease -path /user/admin/data/cdn//20170508/ngaahcs-access.log.C00.1494234003128.gz -retries 10

四)HDFS的读写原理

1、HDFS写入操作

从NameNode获取副本要存放的位置推送数据到DataNode节点中Checksum校验自动错误处理

自动跳过出错节点数据块写入自动重试

2、HDFS读取操作

从NameNode获取副本的位置信息直接与DataNode通信,读取最近副本数据块Checksum校验自动错误处理

io.skip.checksum.errors=FALSE

3、HDFS安全性

数据块有效副本数少于预期设置值(dfs.replication),系统会自动拷贝数据块多于预期设置值,系统会自动删除可靠性保障

文件完整性校验、失败快自动恢复HeartbeatEditlog,NameNode HA

4、HDFS可扩展性

HDFS扩展能力非常强、透明DataNode向NameNode自动注册,无需停止服务Decomission机制,节点安全下架

dfs.hosts.exclude=/etc/hadoop/conf/dfs.excludehdfs dfsadmin -refreshNodes

Rebalance机制(数据自动均衡)

hdfs balancer -threshold 15

五)配置文件

六)HDFS接口访问

接口丰富

HDFS:hadoop fs或hdfs dfsJava APILibhdfs(native API)HttpNFS GatewayThrift API(其他语言接口支持)

HDFS Shell文件操作命令

​​  http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_quota_admin_guide.html​​

​​  https://hadoop.apache.org/docs/stable3/hadoop-project-dist/hadoop-hdfs/HDFSCommands.html#fsck​​

七)HDFS配额管理

​​  http://t.zoukankan.com/hit-zb-p-12520812.html​​

八)HDFS回收站

九)HDFS高可用性

十)HDFS基于内存存储-集中式缓存管理

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java中JDBC增删改查操作详解
下一篇:YARN分布式资源管理器
相关文章

 发表评论

暂时没有评论,来抢沙发吧~