Day03_02_HDFS技术细节

HDFS技术细节

一、HDFS — Hadoop Distributed File System(Hadoop分布式文件系统)

1、HDFS是Hadoop提供的一套用于分布式存储的文件系统

2、为了方便使用仿照Linux系统设计的一套文件系统

3、HDFS是典型的主从结构 — NameNode(主节点)和DataNode(从节点)

4、HDFS在存储文件的时候会真实的对文件进行物理切分 – Hadoop2.x版本所切分的每一个数据块是128MB

5、在HDFS中会自动对数据进行备份,这个备份称之为副本,在完全分布式中默认的副本数量为3,但是在伪分布

式中副本数量只能为1

Block

1、Block是HDFS中的数据存储的基本单位,即一个文件在HDFS中是由一个或者多个Block组成

2、Block的大小默认是128MB,在Hadoop1.x版本中默认是64MB

3、如果一个文件本身不到Block的大小,那么这个文件是多大则对应的Blokc就是多大

4、HDFS会对Block进行编号 — Block ID

5、物理切块的意义:①能够存储超大文件 ②能够快速的备份

NameNode

1、NameNode是HDFS中的主节点(核心)

2、NameNode的职责:

​ ①管理DataNode

​ ②记录元数据(metastore)

3、元数据(描述数据的数据)包含:

​ ①文件的存储位置

​ ②文件的权限

​ ③文件的大小

​ ④Block的大小

​ ⑤Block ID

​ ⑥副本数量

4、元数据是存储在磁盘和内存中

​ ①在内存中的目的是为了查询快

​ ②在磁盘中的目的是为了崩溃恢复

5、NameNode通过心跳机制来管理DataNode

6、默认情况下DataNode发送心跳每隔3s给NameNode

​ 动态的校验DataNode的状态 — 是否存活、当前DataNode的存储压力

DataNode

1、负责数据的存储节点,存储的是Block

2、DataNode将Block存储在磁盘上,在磁盘上的位置是由hadoop.tmp.dir属性决定的

3、DataNode会定时的向NameNode发送心跳

HDFS的常用命令

①hadoop fs -put test.txt / —-> 将当前目录下的test.txt文件上传至HDFS的根目录

②hadoop fs -put test.txt /demo.txt —-> 将当前目录下的test.txt上传至HDFS的根目录并且重命名为demo.txt

③hadoop fs -mkdir /log —-> 在HDFS的根目录下创建子目录log

④hadoop fs -get /demo.txt /home/software/ —-> 将HDFS的根目录下demo.txt文件下载至/home/software/

⑤hadoop fs -mv /test.txt /ceshi.txt —-> 重命名

⑥hadoop fs -cp /demo.txt /nynu.txt —> 复制文件

⑦hadoop fs -ls / —> 查看HDFS根目录下的子文件或者子目录

⑧hadoop fs -rmdir /log —> 删除HDFS根目录下的log子目录,要求被删除的目录必须为空

⑨hadoop fs -rm /log/demo.txt —-> 将HDFS根目录下的log子目录下的文件删除

⑩hadoop fs -rmr /log —> 将HDFS根目录下的log子目录递归删除(慎用)

垃圾回收机制

1、在HDFS中回收站策略默认是不开启的,即意味着删除文件这个操作会立即生效并且不能撤销

2、如果需要开启回收站策略那么在core-site.xml文件中进行配置

1
2
3
4
5
6
7
8
<property>
<!--
配置回收站垃圾清理的时间间隔,单位是min
表示垃圾放入回收站会暂存一天的时间,如果超过1天还没有被还原那么原则上就会被立即清理掉
-->
<name>fs.trash.interval</name>
<value>1440</value>
</property>

3、如果需要从回收站还原数据(本质:从回收站移动至HDFS的根目录并且重命名),执行命令:

1
hadoop fs -mv /user/root/.Trash/Current/hadoop-2.7.6.tar.gz /hadoop.tar.gz