Hadoop之HDFS03【NameNode工作原理】

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Hadoop之HDFS03【NameNode工作原理】


NameNode的职责

序号 职责

1 负责客户端请求的响应

2 元数据的管理(查询,修改)

数据存储的形式

 NameNode中的元数据信息以三种形式存储,如下

序号 方式 说明

1 内存元数据(NameSystem) 读写效率高

2 磁盘元数据镜像文件 持久化

3 数据操作日志文件(可通过日志运算出元数据) 内存和磁盘数据同步的桥梁

image.png

数据存储的机制

image.png

   内存中有一份完整的元数据(内存meta data)

   磁盘有一个“准完整”的元数据镜像(fsimage)文件(在namenode的工作目录中)

 image.png

   用于衔接内存metadata和持久化元数据镜像fsimage之间的操作日志(edits文件)

image.png

checkpoint

 每隔一段时间,会由secondary namenode将namenode上积累的所有edits和一个最新的fsimage下载到本地,并加载到内存进行merge(这个过程称为checkpoint)

image.png

 edits_inprogress_xxx:表示正在写入操作日志的文件,当发起checkpoint的时候会把该文件更新为edits-000xxxx表示停止写入,并生成一个新的edits_inprogress_xxx文件来记录在checkpoint中同步产生的操作日志数据。

注意:

 日志文件是滚动的,一个正在写,几个已写好的,checkpoint的时候,把正在写的滚动一下,然后把fsimage文件和日志文件下载到secondaryNameNode机器上,完成同步,只有第一次才会下载fsimage文件,这时不会很大,下一次的时候secondaryNameNode上就有fsimage文件了就只需要下载日志文件即可,单个日志文件不会很大。

思考问题

   namenode如果宕机,hdfs服务是否能够正常提供

   如果namenode的硬盘损坏,元数据是否还能恢复?如果能恢复如何恢复?

   通过以上问题,我们在配置namenode的工作目录参数的时候有什么要注意的?

VERSION

#Tue Apr 02 10:39:49 CST 2019
namespaceID=310844358
clusterID=CID-5d42338e-6111-4be0-b425-3d6c80a3acd8
cTime=0
storageType=NAME_NODE
blockpoolID=BP-1966867742-192.168.88.61-1554172789025
layoutVersion=-60

   namespaceID是文件系统的唯一标识符,在文件系统首次格式化之后生成;

   storageType说明这个文件存储的是什么进程的数据结构信息(如果是DataNode,storageType=DATA_NODE);

   cTime表示NameNode存储时间的创建时间,由于我的NameNode没有更新过,所以这里的记录值为0,以后对NameNode升级之后,cTime将会记录更新时间戳;

   layoutVersion表示HDFS永久性数据结构的版本信息, 只要数据结构变更,版本号也要递减,此时的HDFS也需要升级,否则磁盘仍旧是使用旧版本的数据结构,这会导致新版本的NameNode无法使用;

   clusterID是系统生成或手动指定的集群ID,在-clusterid选项中可以使用它;

seen_txid

 文件中记录的是edits滚动的序号,每次重启namenode时,namenode就知道要将哪些edits进行加载edits

image.png

思考问题答案:

1.不能,secondaryNameNode 虽然有元数据信息,但不能更新元数据,不能充当namenode使用

2.可以恢复绝大部分数据,没有合并的数据还是会丢失

3.namenode的工作目录应该配置在多块磁盘上,同时往2块磁盘写日志。

<property>
  <name>dfs.name.dir</name>
  <value>/home/hadoop/name1,/home/hadoop/name2</value>
</property>


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
162 6
|
1月前
|
SQL 分布式计算 监控
Hadoop-20 Flume 采集数据双写至本地+HDFS中 监控目录变化 3个Agent MemoryChannel Source对比
Hadoop-20 Flume 采集数据双写至本地+HDFS中 监控目录变化 3个Agent MemoryChannel Source对比
62 3
|
1月前
|
SQL 分布式计算 Hadoop
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
47 2
|
1月前
|
分布式计算 负载均衡 算法
Hadoop-31 ZooKeeper 内部原理 简述Leader选举 ZAB协议 一致性
Hadoop-31 ZooKeeper 内部原理 简述Leader选举 ZAB协议 一致性
30 1
|
1月前
|
分布式计算 监控 Hadoop
Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器
Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器
42 1
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
87 0
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
40 0
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
48 0
|
1月前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
46 4
|
1月前
|
存储 分布式计算 资源调度
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(一)
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(一)
76 5

热门文章

最新文章

相关实验场景

更多
下一篇
无影云桌面