day34-s-hadoop-hdfs
day34-s-hadoop-hdfs
hadoop-hdfs
由多台机器联合组成的文件系统
HDFS概述
HDFS产生背景
随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS只是分布式文件管理系统中的一种。
HDFS定义
HDFS(Hadoop Distributed File System),它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。
HDFS的使用场景:适合一次写入,多次读出的场景,且不支持文件的随机修改。支持在文件的末尾追加数据。适合用来做数据分析,并不适合用来做网盘应用。
HDFS优缺点
优点
-
高容错性
-
数据自动保存多个副本。它通过增加副本的形式,提高容错性
-
某个副本丢失以后,它可以自动恢复。
如果某个文件不小心破坏或者丢失,NameNode知道你的文件副本只有2个,就会自动保存一个副本,用来维护自己的机器。但前提是必须有空闲的机器。 -
-
适合处理大数据
- 数据规模:能够处理数据规模达到GB、TB甚至PB级别的数据
适合处理大规模的数据 如果小数据的话,就不需要使用hadoop,大材小用- 文件规模
能够处理百万规模以上的文件数量,数量相当大 -
可构建在廉价机器上;通过多副本机制,提高可靠性。
缺点
1 不适合低延迟数据访问,比如毫秒级的存储数据,是做不到的。
2 无法高效的对大量小文件进行存储
- 存储大量小文件的话,它会占用NameNode大量的内容来存储文件目录和块信息。这样是不可取的,因为NameNode的内存总是有限的;
- 小文件存储的寻址时间会超过读取时间,他违反了HDFS的设计目标
3 不支持并发写入、文件随机修改
- 一个文件只能有一个写,不允许多个线程同时写
- 仅支持数据append(追加),不支持文件的随机修改
HDFS组成架构

NameNode:就是Master,它是一个主管,管理者
1 管理HDFS的名称空间
2 配置副本策略
3 管理数据块(block)映射信息
4 处理客户端读写请求
DataNode:就是Slave。NameNode下达命令,DataNode执行实际的操作
1 存储实际的数据库
2 执行数据块的读/写操作
Secondary NameNode:
并非NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务。
1 辅助NameNode,分担其工作量,比如定期合并Fsimnage和Edits,并推送给NameNode
2 在紧急情况下,可辅助恢复NameNode
Client:就是客户端
操作HDFS的入口
用户操作的入口
1 文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的Block,然后进行上传
2 与NameNode交互,获取文件的位置信息
3 与DataNode交互,读取或者写入数据
4 Client提供一些命令来管理HDFS,比如NameNode格式化
5 Client可以通过一些命令来访问HDFS,比如HDFS增删改查
HDFS文件块大小
HDFS中的文件在物理上是分块存储(Block),块的大小可以通过配置参数(dfs.blocksize)来规定,默认大小在Hadoop3.1.3版本中是128M,Hadoop2.x 也是128M,Hadoop1.x 是64M
在 etc/hadoop/dfs-default.xml 中可以查询到
不能随意的去改,根据你磁盘的
- dfs-default.xml


思考:为什么块的大小不能设置太小,也不能设置太大?
1 HDFS的块设置太小,会增加寻址时间,程序一直在找块的开始位置
2 如果块设置的太大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。导致程序在处理这块数据时,会非常慢。
总结:HDFS块的大小设置主要取决于磁盘传输速率
HDFS的Shell操作
语法格式
hadoop fs 具体命令
或
hdfs dfs 具体命令
命令操作
- -ls 显示目录信息
-ls 显示目录信息
drwxr-xr-x - atguigu supergroup 0 2022-04-20 17:44 /input
目录 权限 hadoop用户 组 大小 最后修改时间 文件名

- -mkdir 创建目录
hadoop fs -mkdir -p 路径 创建多级目录
- -moveFromLocal 从本地剪切到hdfs
hadoop fs -moveFormLocal 路径
- -appendToFile 追加一个文件到已存在的文件末尾
hadoop fs -appendToFile
- -cat 查看文件的内容
hadoop fs -cat 文件
- -chgrp、 -chmod、-chown 修改文件所属属性
与linux的命令用法一样
hadoop fs -chmod u+x 文件
hadoop fs -chown 123
- -copyFromLocal 从本地文件系统复制到hdfs
hadoop fs -copyFromLocal 文件 /
或
hadoop fs -put 文件 /
(两个命令 做的事情是一样的)
复制本地的文件到hdfs文件系统上
- -cp 从hdfs的一个路径拷贝到HDFS的另一个路径
hadoop fs -cp /f1 /f2/
- -mv 从hdfs的路径的文件,移动到一个指定的目录
hadoop fs -mv /f1/1.txt /f2
- -getmerge 合并下载多个文件
hadoop fs -getmerge /f1.txt /f2.txt
- -tail 显示一个文件的末尾
hadoop fs -tail /f1.txt
hadoop fs -tail -f /t1.txt 跟随查看
- -rm 删除文件或文件夹
hadoop fs -rm 删除文件
hadoop fs -rm -r 删除目录
- -rmdir 删除空目录
hadoop fs -mkdir /test
hadoop fs -rmdir /test
- -du 统计文件夹的大小信息
hadoop fs -du -h 显示目录下的所有文件的空间使用情况
hadoop fs -du -s -h 显示当前目录的空间使用情况
- -setrep 设置hdfs中文件的副本数量
hadoop fs -setrep 2 文件
注意:
1 如果副本数大于集群机器的数量,只能存集群机器数量的副本数
等到机器扩展的时候,NameNode会自动维护副本的数量
2 只能对文件进行副本的保存,目录不能设置副本数,设置目录相当于设置目录中的文件的副本数
其他
mapreduce 是主要写功能和业务的,做一个数据的分析的工作
通过java代码能够操作HDFS
数据传输
传输的本质:通过IO读、IO写
hdfs客户端
通过命令行取操作HDFS可被看作是HDFS的客户端
通过Java代码取操作HDFS,Java代码可以看作是HDFS的客户端
读数据和写数据?
读数据和写数据是一个块一个块取操作的,(这个块可能存在一台机器,或者多台机器)
读数据:一个一个块去读取,读取完后,在本地做一个合并
写数据:客户端对数据进行切分成块,然后一块一块的上传到机器上。

浙公网安备 33010602011771号