学习一次HDFS

一、目的与架构

主要解决大数据存储问题
分布式文件系统:
分布式文件系统

二、设计目标:

  1. 通过多个廉价的计算机集群分布数据和处理来节约成本
  2. 通过自动维护多个数据副本和在故障发生时来实现可靠性
  3. 他们为存储和处理超大规模数据提供所需的扩展能力

三、架构:

1、namenode是一个中心服务器,单一节点,负责管理文件系统的名字空间(NameSpace)以及客户端对文件的访问
2、文件操作,NameNode是负责文件元数据的操作,DataNode负责处理文件内容的读写请求,跟文件内容相关的数据流不经过NameNode,只询问它跟哪个DataNode联系
3、副本存放在哪些DataNode上由NameNode来控制,根据全局情况做出块放置决定,读取文件时NameNode尽量让用户读取最近的副本,降低读取网络开销和读取延迟
4、NameNode全权管理数据库的复制,他周期性的从集群中的每个DataNode接受心跳信和块状态报告,块状态报告包括一个该DataNode上所有的数据列表

1.关系

关系

HDFS文件副本和Block块存储

<property>    
<name>dfs.block.size</name>    
<value>块大小 以字节为单位</value>
</property>

2. 引入块机制的好处

  1. 一个文件可能大于集群中任意的一个磁盘
  2. 使用块抽象而不是文件可以简化存储子系统
  3. 块非常适合用于数据备份进而提供数据容错能力和可用性
    在这里插入图片描述

3.机架感知

在这里插入图片描述

4.块缓存和访问权限

用户或应用通过在缓存池中增加一个 Cache Directive 来告诉 NameNode 需要缓存哪些文件及存多久. 缓存池(Cache Pool) 是一个拥有管理缓存权限和资源使用的管理性分组.
在这里插入图片描述

5.SecondaryNamenode工作机制

当 Hadoop 的集群当中, 只有一个 NameNode 的时候, 所有的元数据信息都保存在了 FsImage 与 Eidts 文件当中, 这两个文件就记录了所有的数据的元数据信息, 元数据信息的保存目录配置在了 hdfs-site.xml 当中

<property>
	<name>dfs.namenode.name.dir</name>
	<value>file:///export/servers/hadoop-3.1.1/datas/namenode/namenodedatas</value>
</property>
	<property>
	<name>dfs.namenode.edits.dir</name>
	<value>file:///export/servers/hadoop-3.1.1/datas/dfs/nn/edits</value>
</property>

触发条件:

  • 时间因素 1小时
  • 文件大小因素:64m
    在这里插入图片描述

6.FsImage 和 Edits 详解

  • edits
  1. edits 存放了客户端最近一段时间的操作日志
  2. 客户端对 HDFS 进行写文件时会首先被记录在 edits 文件中
  3. edits 修改时元数据也会更新
  4. 每次 HDFS 更新时 edits 先更新后客户端才会看到最新信息
  • fsimage
  1. NameNode 中关于元数据的镜像, 一般称为检查点, fsimage 存放了一份比较完整的元数据信息
  2. 因为 fsimage 是 NameNode 的完整的镜像, 如果每次都加载到内存生成树状拓扑结构,这是非常耗内存和CPU, 所以一般开3. 始时对 NameNode 的操作都放在 edits 中
  3. fsimage 内容包含了 NameNode 管理下的所有 DataNode 文件及文件 block 及 block 所在的 DataNode 的元数据信息.
  4. 随着 edits 内容增大, 就需要在一定时间点和 fsimage 合并

7.配置SecondaryNameNode

SecondaryNameNode 在 conf/masters 中指定
在 masters 指定的机器上, 修改 hdfs-site.xml

<property>
	<name>dfs.http.address</name>
	<value>host:50070</value>
</property>
#修改 core-site.xml, 这一步不做配置保持默认也可以
 <!-- 多久记录一次 HDFS 镜像, 默认 1小时 -->
<property>
	<name>fs.checkpoint.period</name>
	<value>3600</value>
</property>
#<!-- 一次记录多大, 默认 64M -->
<property>
	<name>fs.checkpoint.size</name>
	<value>67108864</value>
</property>

HDFS文件写入过程
在这里插入图片描述

HDFS数据的读取过程

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值