Hadoop分布式文件系统
简介
? HDFS(Hadoop distribute file system) 是Hadoop核心组成,是分布式存储服务
? 分布式文件系统能够横跨多态计算机。在大数据时代有着广泛的应用前景,它们为存储和处理超大规模数据提供所需的扩展能力。
? HDFS是分布式文件系统的一种
概念
? HDFS通过统一的命名空间目录树 来定位文件
? 通过多态服务器联合实现其功能,集群中的服务器有各自的角色(分布式的本质是拆分,各司其职)
-
典型的 Master/Slave 【主从】架构 HDFS 集群往往是一个NameNode + 多个 DataNode 组成 NameNode是集群的主节点,DataNode是集群的从节点 HA架构有两个NameNode,联邦机制 -
分快存储(block机制) HDFS中的文件在物理上是分块存储的,块的大小可以通过配置参数来确定 Hadoop 2.X 版本中默认的 block 是:128M -
命名空间 HDFS支持传统的层次型文件组织结构。用户或者应用程序可以创建目录,将文件保存在这些目录中。 文件系统名字空间的层次结构和大多数文件系统类似:可以创建、删除、移动、重命名文件等 NameNode负责维护文件系统的名字空间,任何对文件系统名字空间或属性的修改都将被NameNode记录 HDFS提供一个抽象目录树 ,访问形式 hdfs://namenode主机名:port文件路径 ? 如:hdfs://linux121:9000/test/inpu -
NameNode 元数据管理 将目录结构及文件分块位置信息称为元数据 NameNode的元数据记录每一个文件所对应的block信息(block id、所在DataNode节点的信息) -
DataNode 数据存储 文件的各个block的具体存储管理由DataNode节点承担;一个block会有多个DataNode来存储 DataNode会定时向NameNode来汇报自己持有的block信息 -
副本机制 出于容错考虑,文件的所有block均会有副本。每个文件的block大小和副本系数都是可配置的。应用程序可以指定某个文件的副本数量。 副本数可以在文件创建的时候指定,也可以在之后改变。 副本数默认为:3 副本的数量超过 DataNode 节点数量时,以 DataNode 数量为上限 -
一次写入,多次读出 HDFS 设计时按照 一次写入,多次读出的场景 进行设计的。 不支持文件的随机修改(更新),支持追加写入 HDFS适合用来做大数据分析的底层存储服务,但不适合用做网盘等应用。主要原因有:修改不方便、延迟大、网络开销大、成本高
架构
- NameNode(nn):HDFS集群的管理者,Master
- 维护并且管理HDFS的名称空间
- 维护副本策略
- 记录文件块信息的映射信息
- 负责客户端读写请求
- DataNode(dn):执行实际操作,Slave
- Client:客户端
- 上传文件时负责进行文件的切分(block),然后进行上传
- 与 NameNode 交互,获取文件的位置信息
- 读取或者写入的时候,与DataNode交互进行读写
- 使用一些命令来管理、访问HDFS
shell命令操作HDFS
-
基本语法 方式一:bin/hadoop fs 具体命令 方式二:bin/hadoop dfs 具体命令 -
查看全部命令 bin/hdfs dfs
HDFS的操作命令大多数等同于Linux下的操作,只不过需要在命令前添加 -
查看命令参数
1. 显示目录信息 -ls
[root@linux121 testfile]
Found 4 items
drwxr-xr-x - root supergroup 0 2021-08-02 16:15 /test
drwx------ - root supergroup 0 2021-08-01 23:24 /tmp
-rw-r--r-- 3 root supergroup 77 2021-08-01 23:23 /wcinput
drwxr-xr-x - root supergroup 0 2021-08-01 23:24 /wcoutput
可添加的参数如下图:
通过web进行查看 url: http://linux:50070/explorer.html#/ly/test 主机名称要根据自己设置的主机ip地址
2. 在HDFS上创建目录 -mkdir
[root@linux121 ~]
[root@linux121 ~]
Found 5 items
drwxr-xr-x - root supergroup 0 2021-08-02 11:43 /ly
drwxr-xr-x - root supergroup 0 2021-08-01 23:18 /test
drwx------ - root supergroup 0 2021-08-01 23:24 /tmp
-rw-r--r-- 3 root supergroup 77 2021-08-01 23:23 /wcinput
drwxr-xr-x - root supergroup 0 2021-08-01 23:24 /wcoutput
3.复制文件
-
从本地移动到HDFS:hadoop fs -moveFromLocal 移动的文件名 移动到HDFS中的目录
[root@linux121 testfile]
[root@linux121 testfile]
-
将本地文件复制到HDFS中 -put 【推荐】 -copyFromLocal
[root@linux121 testfile]
[root@linux121 testfile]
copyfile.txt hadoop.txt
[root@linux121 testfile]
[root@linux121 testfile]
-
从HDFS中复制文件到本地 -get 【推荐】 -copyToLocal
[root@linux121 testfile]
[root@linux121 testfile]
hadoop.txt
[root@linux121 testfile]
[root@linux121 testfile]
[root@linux121 testfile]
copyfile.txt hadoop.txt
-
从HDFS的一个路径拷贝到HDFS的另一个路径 -cp
[root@linux121 testfile]
4. 删除文件 -rm -rmdir
[root@linux121 testfile]
Deleted /hadoop.txt
[root@linux121 testfile]
[root@linux121 testfile]
5. 移动文件 -mv
[root@linux121 testfile]
Found 1 items
drwxr-xr-x - root supergroup 0 2021-08-01 23:19 /test/input
[root@linux121 testfile]
Found 2 items
-rw-r--r-- 3 root supergroup 22 2021-08-02 15:54 /ly/test/copyfile.txt
-rw-rw-rw- 3 root root 99 2021-08-02 15:25 /ly/test/hadoop.txt
[root@linux121 testfile]
[root@linux121 testfile]
Found 2 items
-rw-rw-rw- 3 root root 99 2021-08-02 15:25 /test/hadoop.txt
drwxr-xr-x - root supergroup 0 2021-08-01 23:19 /test/input
6. 文件末尾追加内容
[root@linux121 testfile]
[root@linux121 testfile]
7. 查看内容 -cat -tail
[root@linux121 testfile]
hello
hadoop
movefiletest
这是想要追加的内容的开始
这是想要追加内容的结尾
8. 修改文件的权限
[root@linux121 testfile]
[root@linux121 testfile]
[root@linux121 testfile]
[root@linux121 testfile]
Found 1 items
-rw-rw-rw- 3 root root 99 2021-08-02 15:25 /ly/test/hadoop.txt
9. 统计文件信息 -du
[root@linux121 testfile]
130 /test
[root@linux121 testfile]
99 /test/hadoop.txt
31 /test/input
10.设置副本数量 -setrep
[root@linux121 testfile]
Replication 5 set: /test/hadoop.txt
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iXRhG26P-1627894430116)(Hadoop分布式文件系统.assets/image-20210802163708163.png)]
- 这里设置的副本数只是记录在NameNode的元数据中,是否真的会有这么多副本,还得看DataNode的
数量。因为目前只有3台设备,最多也就3个副本,只有节点数的增加到10台时,副本数才能达到10。
本数量 -setrep
[root@linux121 testfile]
Replication 5 set: /test/hadoop.txt
- 这里设置的副本数只是记录在NameNode的元数据中,是否真的会有这么多副本,还得看DataNode的
数量。因为目前只有3台设备,最多也就3个副本,只有节点数的增加到10台时,副本数才能达到10。
|