Hadoop之hdfs体系结构
大家好,又见面了,我是你们的朋友全栈君。
4. HDFS的体系结构
4.1 体系结构解析
HDFS 采用的是hostname01/slaves这种主从的结构模型来管理数据,这种结构模型主要由四个部分组成,分别是Client(客户端)、Namenode(名称节点)、Datanode(数据节点)和SecondaryNameNode。
真正的一个HDFS集群包括一个Namenode和若干数目的Datanode。Namenode是一个中心服务器,负责管理文件系统的命名空间 (Namespace )及客户端对文件的访问。集群中的Datanode一般是一个节点运行一个Datanode进程,负责管理客户端的读写请求,在Namenode的统一调度下进行数据块的创建、删除和复制等 操作。
数据块实际上都是保存在Datanode本地的Linux文件系统中的。每个Datanode会定期的向Namenode发送 数据,报告自己的状态(我们称之为心跳机制)。没有按时发送心跳信息的Datanode会被Namenode标记为“宕 机”,不会再给他分配任何I/O请求。
用户在使用Client进行I/O操作时,仍然可以像使用普通文件系统那样,使用文件名去存储和访问文件,只不 过,在HDFS内部,一个文件会被切分成若干个数据块,然后被分布存储在若干个Datanode上。
比如,用户在Client上需要访问一个文件时,HDFS的实际工作流程如此:客户端先把文件名发送给 Namenode,Namenode根据文件名找到对应的数据块信息及其每个数据块所在的Datanode位置,然后把这些 信息发送给客户端。之后,客户端就直接与这些Datanode进行通信,来获取数据(这个过程,Namenode并 不参与数据块的传输)。这种设计方式,实现了并发访问,大大提高了数据的访问速度。
HDFS集群中只有唯一的一个Namenode,负责所有元数据的管理工作。这种方式保证了Datanode不会脱离 Namenode的控制,同时,用户数据也永远不会经过Namenode,大大减轻了Namenode的工作负担,使之更方便管理工作。通常在部署集群中,我们要选择一台性能较好的机器来作为Namenode。当然,一台机器上也可 以运行多个Datanode,甚至Namenode和Datanode也可以在一台机器上,只不过实际部署中,通常不会这么做的
4.2 HDFS进程之NameNode
- 充当着集群管理者的角色
- namenode进程只有一个(HA除外)
- 管理HDFS的命名空间,并以fsimage和edit进行持久化保存。
- 在内存中维护数据块的映射信息
- 实施副本冗余策略
- 处理客户端的访问请求
4.3 HDFS进程之DataNode
- 充当着奴隶的角色
- 存储真正的数据(块进行存储)
- 执行数据块的读写操作
- 心跳机制(3秒)
4.4 HDFDS进程之SecondaryNamennode
- 充当着辅助namenode的角色
- 帮助NameNode合并fsimage和edits文件
- 不能实时同步,不能作为热备份节点
4.5 HDFS的Client接口
- HDFS实际上提供了各种语言操作HDFS的接口。
- 与NameNode进行交互,获取文件的存储位置(读/写两种操作)
- 与DataNode进行交互,写入数据,或者读取数据
- 上传时分块进行存储,读取时分片进行读取
4.6 HDFS的镜像文件fsimage查看
命名空间指的就是文件系统树及整棵树内的所有文件和目录的元数据,每个Namenode只能管理唯一的一命名空间。HDFS暂不支持软链接和硬连接。Namenode会在内存里维护文件系统的元数据,同时还使用fsimage和editlog两个文件来辅助管理元数据,并持久化到本地磁盘上。
- fsimage 命名空间镜像文件,它是文件系统元数据的一个完整的永久检查点,内部维护的是最近一次检查点(一小时一触发)的文件系统树和整棵树内部的所有文件和目录的元数据,如修改时间,访问时间,访问权限,副本数据,块大小,文件的块列表信息等等。
- 使用XML格式查看fsimage文件
一般在该目录下
]# dfs.namenode.name.dir
[root@hostname01 current]# hdfs oiv -i 【fsimage_xxxxxxx】 -o 【目标文件路径】 -p XML
#fsimage_xxxxxxx:要查看的fsimage文件的路径
#目标 文件路径:转换成的文件路径
案例如下:
[root@hostname01 current]# hdfs oiv -i fsimage_00000000052 -o ~/fs52.xml - p XML
FSiamge文件解读:
imgVersion(int):当前image的版本信息
namespaceID(int):unknown
numFiles(long):整个文件系统中包含有多少文件和目录
genStamp(long):image的时间戳
path(String):该目录或文件的路径,
replications(short):副本数
mtime(long):mtime
atime(long):atime
blocksize(long):目录的blocksize都为0
numBlocks(int):实际有多少个文件块,目录的该值都为-1
if(numBlocks > 0){
blockid(long):属于该文件的block的blockid,
numBytes(long):该block的大小
genStamp(long):该block的时间戳
}
nsQuota(long):namespace Quota值,若没加Quota限制则为-1
dsQuota(long):disk Quota值,若没加限制则也为-1
...
..
.其他fields
4.7 HDFS的日志文件edit查看
- editlog: 编辑日志文件,当hdfs文件系统发生打开、关闭、创建、删除、重命名等操作产生的信息除了保存在内存中外,还会持久化到编辑日志文件。比如上传一个文件后,日志文件里记录的有这次事务的txid,文件的 inodeid,数据块的副本数,数据块的id,数据块大小,访问时间,修改时间,块大小,客户端信息,权限,块id等
- 查看editlog文件的方式:
一般在该目录下
]# dfs.namenode.name.dir
[root@hostname01 current]# hdfs oev -i 【edits_inprogress_xxxxxxxx】 -o 【目标 文件路径】-p XML
#edits_inprogress_xxxxxxxx:要查看的edit文件的路径
#目标 文件路径:转换成的文件路径
案例如下:
[root@hostname01 current]# hdfs oev -i edits_inprogress_00000000003 -o ~/ed3.xml -p XML (最后的-p XML不加也可以)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/140053.html原文链接:https://javaforall.cn
相关文章
- 试述Hadoop的HDFS及其组成_hadoop命令和hdfs命令区别
- Hadoop 生态系统的构成(Hadoop 生态系统组件释义)
- Hadoop生态系统特点[通俗易懂]
- 大数据spark、hadoop、hive、hbase面试题及解析[通俗易懂]
- 开源项目丨一文详解一站式大数据平台运维管家 ChengYing 如何部署 Hadoop 集群
- hadoop hdfs命令 脚本源码_hadoop启动hdfs命令
- Hadoop大数据技术课程总结2021-2022学年第1学期
- 【史上最全】Hadoop 核心 - HDFS 分布式文件系统详解(上万字建议收藏)
- 对比Hadoop和 Spark,看大数据框架进化之路
- Hadoop 学习总结之一:HDFS简介详解大数据
- Hadoop(七)HDFS容错机制详解大数据
- Hadoop(八)Java程序访问HDFS集群中数据块与查看文件系统详解大数据
- Hadoop(十六)之使用Combiner优化MapReduce详解大数据
- Hadoop文件存储系统-HDFS详解以及java编程实现大数据
- 搭建maven开发环境测试Hadoop组件HDFS文件系统的一些命令详解大数据
- ZooKeeper学习之路 (十)Hadoop的HA集群的机架感知详解大数据
- 【Hadoop基础】hadoop fs 命令详解大数据
- hadoop mapreduce经常OOM详解大数据
- Hadoop hdfs完全分布式搭建教程详解大数据
- 高可用Hadoop平台-Hue In Hadoop详解大数据
- 高可用Hadoop平台-答疑篇详解大数据
- 高可用Hadoop平台-实战尾声篇详解大数据
- 在Hadoop1.2.1上运行第一个Hadoop程序FileSystemCat详解编程语言
- Linux下快速启动Hadoop集群(linux启动hadoop)
- Redis与Hadoop:让数据变得更加简单(redis与hadoop)
- Apache Hadoop 2.6.0 新特性
- 企业利用云计算平台Hadoop的10种方式
- Linux系统上安装Hadoop环境讲解(linux安装hadoop)
- 比较分析HDFS与Oracle数据库的异同(hdfs oracle)