HDFS简介及元数据管理机制

目录

  • HDFS简介

  • HDFS的一些终端指令

  • HDFS的元数据管理机制

  • HDFS的安全模式

一、Apache HDFS入门
1.1、HDFS基本概念
  • 首先是一个文件系统,就是用来存储文件、存储数据。是大数据最底层一个服务。

  • 其次是一个分布式的文件系统,分布式意味着多台机器存储。

1.2、HDFS设计目标
  • 具备故障检测和快速恢复的能力(容错/可靠)

  • 面对海量数据的存储,注重吞吐能力,而不是交互式。(延迟高,数据处理能力强)

  • 支持大文件存储(越大越开心)

  • 存储方案其实就是讲大文件拆分开,存储到不同的服务上

  • 一次写入多次读取模型 (不支持修改操作)

  • 文件内容,可以追加,但是不能灵活修改内部数据.

  • 异构存储、可移植性

  • 异构存储: 可以存储不同格式,不同类型的数据文件

  • 可移植性: 其实就是Java的可移植性

1.3、HDFS重要特性(重要)
节点的意义:
znode节点: 就是ZooKeeper服务中存储的一个集合文件和文件夹特性的数据
hdfs中的节点: 说的就是一个服务角色(在这里节点时数据流转的一个分叉口)
在hdfs集群中,数据可以在每一个服务中进行流转,此时每一个集群角色都是一个节点.
node1,node2,node3 他是服务器节点: 也就是在多台服务器组成的一个串联关系中,每一个服务器都是一个节点.
  • master|slaves 主从架构

  • 主角色(主节点): namenode,主要负责元数据的管理工作

  • 从角色(从节点): datanode,主要负责数据的存储工作

  • 分块存储(在HDFS中数据都是以Block块的形式存储的)

  • 在hadoop2.x版本之后块的大小变成了128M,在之前是64M (2018年后基本上绝大多数公司使用的都是128M)

  • 块的大小是可以通过调节参数进行设置的,但是一般我们不修改

  • 当存储数据较大时,我们会按照指定大小将数据进行分块,分块后存储在不同的服务器中,这也就为大数据的存储提供了可能

  • 计算数据时,可以多个服务同时计算不同的块,最终将结果进行合并,提高了计算效率

举例:
# 1. 文件 1.txt 大小为300M  该文件会分为几个块,每个块大小是多少??  3个
blk-1   128M
blk-2   128M
blk-3   44M

# 2. 文件 1.txt 20M 2.txt 200M 3.txt 1M 这几个文件存储时会分为几个块???  4个
1.txt  blk-1  20M
2.txt  blk-2  128M
       blk-3  72M

# 3. 文件1.txt 大小为128.1M 这个文件存储会存为几个块???  1个
在一定的范围内,可以将超出块大小一丁点的内容保存为一个块,减少小文件的出现
  • ==副本机制==

  • 在HDFS中默认采用的是三副本机制(一个文件存储3份)

  • 在分布式存储系统中都会进行冗余存储,保证数据的安全性

  • 一个数据会保存三份,三份数据,在不同的DataNode节点中

  • 当有一个DataNode节点宕机了,数据就会丢失,此时副本数量就不够3个了

  • 此时NameNode,检查副本数量不足3,就会指挥其他的DataNode节点进行数据备份,保证副本数量达到3

  • 如果宕机的DataNode 又连接到集群中,NameNode检测到副本数量大于3,此时会指挥部分DataNode 删除副本

副本数量可以手动调节,副本数量越多越安全,但是对于磁盘的消耗也越大,一般情况下,三副本机制已经足够安全了.
  • ==namespace 名字空间 命名空间==

  • 命名空间可以理解为使用数据模拟出一个目录树结构,方便我们查询和使用数据.

  • 我们将所有文件的名称都背下来不现实,但是我们将文件分目录管理,并且按照目录层级进行数据查询就可以找到我们想要的数据(类似于linux中的目录结构)

  • NameNode就是来管理这个命名空间的

  • 命名空间中,同一个目录结构中的文件名称只能有一个

  • ==metadata 元数据==

  • 元数据: 描述数据的数据

  • 我们将大文件拆分为多个block,每一个bolck块从属于哪一个文件,文件名,文件大小,块的位置,副本数量.....都是元数据

  • NameNode专门负责管理这些元数据

思考: 如果不记录这些元数据会发生什么?
写数据的时候,不知道该写入哪一个服务,读取数据时,不知道该从哪一个服务中读取
请求数据时不知道该文件是否存在,删除数据时不知道该文件是否删除成功
  • 所以我们想要存储数据时,要先访问NameNode获取写入的位置

  • 想要读取数据时,要先访问NameNode,获取读取数据的位置

  • write one read many(一次写入,多次读取)

  • HDFS服务一次写入多次读取,不支持修改操作

  • HDFS更加适用于数据的分析工作,不适合作为业务服务数显,因为延迟较高

  • hdfs只能作为大数据的存储方案,其他的业务会使用其他存储方案解决

  • HDFS不需要支持事务 ,因为不可修改

  • 什么是事务: 多个任务,要么同时成功要么同时失败就是一个事物

举例: 在银行转账,Jack将1000元转账给Rose Jack的钱减少, 与Rose的钱增加是一个事物操作


二、HDFS shell操作
2.1、shell常见命令操作
常用的linux指令大部分可以用于hadoop的shell中 : ls mkdir rm cp mv cat .....
还有一些指令也比较重要,和linux中使用方式完全相同
chown: 修改文件归属
chgrp: 修改用户组
chmod: 修改文件权限
get : 下载
put : 上传
appendToFile : 追加
getmerge : 合并下载

三、HDFS工作机制
3.1、namenode、datanode职责(理解)
  • namenode 管理元数据 维护namespace

  • datanode 管理数据

3.2、读写流程图
  • 上传文件写数据流程

  • HDFS默认3副本机制

我们再存储副本时,要遵循三副本机制,
默认情况下,我们按照如下策略选择副本的存放位置
第一个副本,存放在clinet客户端所在的服务器中,如果客户端所在位置没有DataNode,则在集群中随机选择一个DN进行存储
第二个副本,存放在与副本1不同的机架的随机一个服务器上.
第三个副本,存放在于第二个副本相同机架的另外一个服务器上.

  • 下载文件读数据流程

3.3、NameNode与DataNode通信机制
  • dn启动时

#datanode向nameNode进行注册 并行汇报自己持有数据块信息

注册表示自己启动成功 汇报是高速namenode自己保存了哪些数据块
  • dn后续工作时

#心跳机制
datanode每隔3S向namenode进行心跳 目的:报活   dfs.heartbeat.interval

#数据块汇报机制 blockreport
datanode每隔6小时向nameNode进行数据块汇报自己数据块信息 dfs.blockreport.intervalMsec

四、HDFS namenode元数据管理机制
4.1、namenode元数据
  • 元数据是什么

元数据(Metadata),又称中介数据、中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。

#记录数据的数据 描述数据的数据
  • hdfs中元数据指的是什么

  • 文件系统的元数据(namespace、块的位置)

  • datanodes状态信息(健康、磁盘使用率)

  • 回想首次启动HDFS集群的时候 进行format操作

  • 本质就是初始化操作 初始化namenode工作目录和元数据文件。

  • 元数据存储的目录由参数dfs.namenode.name.dir决定 在NN部署机器的本地linux文件系统中

4.2、secondarynamenode功能职责
  • 要想成为namenode的备份 需要具备两个东西

  • 数据状态要和namenode保持一致。

  • 承担和namenode一样的职责

  • secondarynamenode根本不是namenode的备份,其主要职责帮助nameNode进行元数据的合并。


五、HDFS 安全模式
  • 安全模式(safe mode)是HDFS集群处于一种保护状态,文件系统只可以读,不可以写。

  • 安全模式如何进入离开的?

1.自动进入离开

#在HDFS集群刚启动时候 会自动进入 为了演示方便  使用单个进程逐个启动方式

#step1:启动namenode
hadoop-daemon.sh start namenode

#step2: 执行事务性操作 报错
[root@node1 ~]# hadoop fs -mkdir /aaaa
mkdir: Cannot create directory /aaaa. Name node is in safe mode.

Safe mode is ON. The reported blocks 0 needs additional 52 blocks to reach the threshold 0.9990 of total blocks 52. The number of live datanodes 0 has reached the minimum number 0. Safe mode will be turned off automatically once the thresholds have been reached.

#1、条件1:已经汇报的block达到总数据块的 0.999
#2、条件2:存活的dn数量大于等于0  说明这个条件不严格


#step3:依次手动启动datanode
hadoop-daemon.sh start datanode

Safe mode is ON. The reported blocks 52 has reached the threshold 0.9990 of total blocks 52. The number of live datanodes 2 has reached the minimum number 0. In safe mode extension. Safe mode will be turned off automatically in 25 seconds.
#3、条件3:满足12条件的情况下 持续30s 结束自动离开安全模式

Safemode is off.


#为什么集群刚启动的时候 要进入安全模式 
文件系统元数据不完整 无法对外提供可高的文件服务  属于内部的元数据汇报、校验、构建的过程。

2.手动进入离开

hdfs dfsadmin -safemode enter
hdfs dfsadmin -safemode leave

Safe mode is ON. It was turned on manually. Use "hdfs dfsadmin -safemode leave" to turn safe mode off.

#运维人员可以手动进入安全模式 进行集群的维护升级等动作 避免了群起群停浪费时间。
  • 安全模式的注意事项

  • 刚启动完hdfs集群之后 等安全模式介绍才可以正常使用文件系统 文件系统服务才是正常可用。

  • 后续如果某些软件依赖HDFS工作,必须先启动HDFS且等安全模式结束才可以使用你的软件。

  • 启动-->启动成功-->可用(安全模式结束)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值