目录
一、HDFS简介
1.发展过程
2.基本概念
3.特点
二、HDFS架构
1.组成结构
三、HDFS的shell操作
1.Hadoop集群管理脚本
2.HDFS管理命令fs
(1)操作HDFS文件/目录命令
(2)查看文件内容命令
(3)追加和合并文件内容命令
(4)修改权限命令
(5)统计命令
(6)设置副本命令
一、HDFS简介
HDFS是Hadoop体系中的重要组成部分,分布式文件系统,主要用于解决海量大数据文件存储问题。
1.发展过程
(1)传统文件系统
直接存储在一台服务器上
- 会遇到的问题:
① 数据量越来越大时,会遇到存储瓶颈
② 文件过大,上传和下载非常耗时
(2)分布式文件系统 —— 扩容
解决 → 问题① 存储瓶颈
方法:扩容 -即扩大规模达到分布式存储
两种扩容方法:纵向扩容——增加磁盘和内存 、横向扩容——增加服务器数量
(3)分布式文件系统
解决 → 问题② 耗时
方法:将大文件切分为多个数据块 数据块并行存储
(4)HDFS雏形
第(3)个的文件通过数据块分别存储在服务器集群中,如何获得一个完整的文件呢?
方法:增加一台服务器 专门记录文件被切割后的数据块信息以及数据块的存储位置信息
(5)HDFS
问题:存储数据块的服务器中有一台宕机 无法正常获取文件 即单点故障
方法:备份
服务器D : NameNode
服务器A B C:DataNode 存储数据块
2.基本概念
易于扩展的分布式文件系统,运行在成百上千台低成本的机器上
① 是一个文件系统 ② 用于存储文件 ③ 通过统一的命名空间
④ 分布式的,由多个服务器联合起来实现其功能
(1)NameNode(名称节点/主节点)
HDFS集群的主服务器
- 一旦关闭,就
无法访问Hadoop集群- 以元数据的形式进行管理和存储,用于维护文件系统名称并管理客户端对文件的访问
- 记录对文件系统名称空间/属性的任何更改操作
- 存储:HDFS负责整个数据集群的管理,并且在配置文件中可以设置备份数量
(2)DataNode(数据节点)
从服务器
- 存储数据块的地方
- DataNode机器需要配置大量磁盘空间
- DataNode和NameNode要保持不断地通信 : DataNode在客户端/NameNode的调度下→ 存储并检索数据块 → 对数据块进行创建、删除等操作 → 定期向NameNode发送所存储的数据块列表
(3)block(数据块)
每个磁盘有默认的数据块大小 是磁盘进行数据读/写的最小单位
- 在Hadoop2.X版本中,默认一个块的大小是128M ,且备份3份
- 每个块尽可能存储于不同的DataNode
- 在HDFS中存储的文件可以划分为多个分块,每个分块可以成为一个独立的存储单元
- HDFS中小于一个块大小的文件并不会占据整个HDFS数据块
按块存储的好处:
① 文件的大小可以大于网络中任意一个磁盘的容量 文件的所有块不需要存储在同一个磁盘上
② 简化存储管理
③ 冗余备份:每个块有多个备份(默认3个),分别保存到相互独立的机器
(4)rack(机架)
存放部署Hadoop集群服务器的机架
(5)metadata(元数据)
分为三种信息形式
① 维护HDFS中文件和目录的信息
文件名、目录名、父目录信息、文件大小、创建时间、修改时间
② 记录文件内容,存储相关信息
文件分块情况、副本个数、每个副本所在的DataNode信息
③ 记录HDFS中所有DataNode的信息,用于DataNode管理
3.特点
(1)优点
① 高容错性
a. 数据自动保存多个副本
b. 副本丢失后,自动恢复
DataNode节点周期性向NameNode发送心跳信号 → 网络发生异常时,可能导致DataNode和NameNode失去通信 → 心跳检测机制,发现DataNode宕机,副本丢失 → HDFS从其他DataNode上的副本自动恢复
② 流式数据访问
应用程序能以流的形式访问数据集
③ 支持超大文件
④ 高数据吞吐量
一次写入,多次读取
一旦创建、写入、关闭后,就不能进行修改,只能追加
⑤ 可构建在廉价的机器上
(2)缺点
① 高延迟
不适合用于低延迟数据访问的场景
② 不适合小文件存取场景
在Hadoop系统,小文件定义:远小于HDFS的数据块大小(128M)的文件
每个文件会产生各自的元数据,NameNode存储这些信息 → 小文件过多,容易导致NameNode存储出现瓶颈
a. 元信息存储在NameNode内存中,一个节点内存有限,存取大量小文件消耗大量的寻道时间
b. 类比拷贝大量小文件与拷贝同等大小的一个大文件
③ 不适合并发写入
不支持并发多用户的写操作,只能在文件末尾追加数据
二、HDFS架构
1.组成结构
(1)Client 客户端
HDFS提供了各种各样的客户端,包括命令行接口、JAVA API等
client通过与NameNode和DataNode交互访问HDFS中的文件
主要职责:
(1)文件切分
文件上传至HDFS时,其将文件切分成一个一个的block,然后进行存储
(2)与NameNode交互
获取文件的位置信息
(3)与DataNode交互
读取或写入数据
(4)提供一些命令管理HDFS
启动/关闭HDFS
(5)可以通过一些命令去访问HDFS
(2)NameNode 名称节点
HDFS的master架构 ——一个主管、管理者
主要职责:
(1)响应客户端读/写请求
(2)负责HDFS文件系统的管理工作
文件block管理和名称空间管理
①文件block管理
②名称空间管理
(3)SecondaryNameNode 检查点节点
(4)DataNode 数据节点
三、HDFS的shell操作
1.Hadoop集群管理脚本
shell俗称 “ 壳 ”,指为使用者提供操作界面的软件,通过接收用户输入的命令执行相应的操作
常用的具体的某个命令:
① fs :HDFS管理命令
② jar : 作业提交命令
③ version :查看Hadoop版本
2.HDFS管理命令fs
- 使用命令前,必须启动Hadoop集群
- 命令均是在Linux命令行窗口界面操作
- [ ]表示可选参数 < >表示必须参数
hadoop fs -help 展示HDFS支持的所有命令行参数
hadoop fs -help [cmd...] 显示指定命令的帮助信息
(1)操作HDFS文件/目录命令
<1> ls
查看指定路径的当前目录结构
[-d] [-h] [-R] <path>
① -d :将目录显示为普通文件
② -h :使用便于操作人员读取的单位信息格式
③ -R :递归显示所有子目录的信息
<2> mkdir
在指定路径下创建子目录
hadoop fs -mkdir [-p] <path>
-p:创建子目录时先检查路径是否存在,若不存在,创建相应的各级目录(即创建多级目录)
<3> put / copyFromLocal
将本地系统的文件或文件夹复制到HDFS上面
hadoop fs -put [-f] [-p] <localsrc> <dst>
hadoop fs -copyFromLocal [-f] [-p] <localsrc> <dst>
① -f :覆盖目标文件
② -p:保留访问和修改时间、权限
<4> get / copyToLocal
将HDFS的文件或文件夹复制到本地文件系统中
hadoop fs -get [-p] [-ignoreCrc] [-crc] <src>...<localdst/>
hadoop fs -copyToLocal [-p] [-ignoreCrc] [-crc] <src>...<localdst/>
① -p :保留访问和修改时间、权限
② -ignoreCrc :跳过对下载文件的CRC检查
③ -crc :为下载的文件写的CRC校验和,在本地文件系统中生成一个xxx.crc的校验文件
<5> cp
将指定文件从HDFS的一个路径复制到HDFS的另一个路径
hadoop fs -cp [-f] [-p] <src>...<dst>
① -f : 覆盖目标文件
② -p :保留访问和修改时间、权限
<6> mv
在HDFS目录中移动文件,不允许跨文件系统移动文件
hadoop fs -mv <src>...<dst>
<7> rm
HDFS中删除指定文件/文件夹
hadoop fs -rm [-f] [-r|-R] [-skipTrash] <src>
① -f :覆盖目标文件
② -r|-R :递归删除目录
③ -skipTrash:绕过回收站(如果已经启用),立即删除指定的文件或文件夹
<8> rmdir
删除HDFS上的空目录
hadoop fs -rmdir <dir>
(2)查看文件内容命令
<1> cat
将路径指定文件的内容输出到stdout
hadoop fs -cat [-ignoreCrc] <src>
<2> tail
将指定文件最后1K字节的内容输出到stdout,一般用于查看日志
hadoop fs -tail [-f] <file>
-f :用于显示文件增长时附加的数据
(3)追加和合并文件内容命令
<1> appendToFile
追加一个/多个文件内容到已经存在的文件末尾
hadoop fs -appendToFile <localsrc>...<dst>
(HDFS文件不能进行修改,但是可以进行追加)
<2> getmerge
合并下载多个文件
指定一个源目录和一个目标文件 将源目录中所有的文件合并且排序地连接成本地的一个目标文件
hadoop fs -getmerge [-nl] <src> <localdst>
-nl :用于在每个文件的末尾添加一个换行符
(4)修改权限命令
<1> chmod
改变文件的权限
此命令的使用者必须是文件的所有者或者超级用户
hadoop fs -chmod [-R] PATH
-R :目录下所有的都将改变权限
<2> chown
改变文件的拥有者/所属组
hadoop fs -chown [-R] [OWNER][:[GROUP]] PATH
-R :使改变在目录结构下递归进行
(5)统计命令
<1> count
统计指定目录下的目录数、文件数和字节数
hadoop fs -count [-h] <path>
-h :使用便于操作人员读取的单位信息格式
<2> df
统计文件系统的容量、可用空间和已用空间信息
hadoop fs -df [-h] [<path>...]
-h :使用便于操作人员读取的单位信息格式
<3> du
显示指定目录下所有文件和文件夹的大小
[-s] [-h] <path>
① -s :不显示指定目录下每个单独文件的大小,只统计目录所占空间的总大小
② -h :使用便于操作人员读取的单位信息格式
(6)设置副本命令
setrep
改变HDFS中文件的副本系数
hadoop fs -setrep [-R] <rep> <path>
-R:用于递归改变指定目录下所有文件的副本系数