目录
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且等安全模式结束才可以使用你的软件。
启动-->启动成功-->可用(安全模式结束)