HDFS概述
HDFS(Hadoop Distributed File System)是Apache Hadoop 项目的一个子项目。Hadoop非常实用存储大型数据,TB和PB级别的,其就是使用的HDFS作为存储系统。HDFS是分布式文件系统使用多台计算机存储文件,并提供统一的访问接口,就像访问本地普通文件系统一样。
分布式文件系统解决的就是大数据存储问题。他们是横跨在多台计算机上的存储系统。分布式文件系统在大数据时代有着广泛的应用前景,它们为存储和处理超大规模数据提供所需要的扩展能力。
HDFS特点
- 可以存储超大文件,时效性稍差
- 元数据(eg.存储在哪个几个节点、名字……)占用空间,大小文件都一样,所以存储大文件划算
- 具有硬件故障检测功能和自动恢复功能
- 为数据存储提供了很强的扩展功能,空间不够了可以随时增加机器
- 一般为一次写入,多次读取, 只支持追加写入,不支持随机修改
- 可以在廉价的机器上运行
HDFS架构
采用Master/Slave架构。两个重要的角色是:NameNode和DataNode。
四个基本组件:HDFS Client、NameNode、DataNode、Secondary NameNode.
Client作用
- 文件切片。文件上传到HDFS中的时候,client会将文件切成一个个block,然后进行存储,block默认大小为128M
- 与NameNode交互,获取文件的位置信息
- 与DataNode交互,读取或者写入数据
- 提供一些命令来管理和访问HDFS,比如启动或者关闭HDFS
NameNode作用
- 是master,主管、管理者
- 管理HDFS的元数据(文件路径、文件大小、文件名字、文件权限,文件的block切片信息……)
- 配置副本策略
- 处理客户端读写请求
DataNode作用
- 是Salve。NameNode下达命令,DataNode负责执行
- 存储实际的数据块
- 执行数据块的读写操作
- 定时向NameNode汇报block信息
SecondaryNameNode作用
- 并非NameNode的热备。当NameNode挂掉的时候,他并不能马上替换掉NameNode并提供服务。
- 辅助NameNode,分担其工作
- 在紧急情况下,可以恢复NameNode
HDFS副本机制
HDFS的Shell命令
安装好Hadoop后可以用命令对文件系统进行操作。比如创建、删除、修改文件权限等。
shell命令使用格式:
hadoop fs <args> // 既可以操作HDFS,也可以操作本地系统
hadoop dfs <args> // 只能操作hdfs系统
-ls 显示文件列表
hadoop fs -ls URI
eg. hadoop fs -ls /
eg. hadoop fs -ls -R / # 递归显示文件列表
-mkdir创建文件夹
hadoop fs -mkdir /dir1 # 在根目录下创建一个dir1的文件夹
hadoop fs -mkdir -p /aa/bb/cc # 递归创建文件夹
-put 将本地文件或文件夹上传到目标系统
hadoop fs -put /root/1.txt /dir1 # 将本地的1.txt文件上传到hadoop的dir1文件夹
hadoop fs -put /root/dir1 / # 将本地的dir1文件夹上传到hadoop的根目录
-get将HDFS文件拷贝到本地系统
hadoop fs -get <src> <localdst>
eg. hadoop fs -get /1.txt /opt # 将HFDS中的1.txt文件拷贝到本地opt目录
-mv 剪切命令,只能操作hdfs中的文件,不可跨系统
hadoop fs -mv <src> <dst>
-rm命令,删除文件或者文件夹
hadoop fs -rm [-r] [-skipTrash] URI [URI...]
# 删除目录需要加-r
# -skipTrash 跳过回收站,彻底删除
-cp 文件或文件夹复制,只能在hdfs系统中使用,不可以跨系统
hadoop fs -cp <src> <dst>
-cat命令,显示文件内容
hadoop fs -cat <src>
HDFS基准测试
写入测试
向HDFS文件系统中写入数据,10个文件,每个文件10M,文件存到/benchmarks/TestDFSIO中
hadoop jar /export/server/hadoop-2.7.5/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.5.jar TestDFSIO -write -nrFiles 10 -fileSize 10MB
读取速度
在HDFS文件系统中读取10个文件,每个10M
hadoop jar /export/server/hadoop-2.7.5/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.5.jar TestDFSIO -read -nrFiles 10 -fileSize 10MB
清除测试数据
hadoop jar /export/server/hadoop-2.7.5/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.5.jar TestDFSIO -clean
扫码一起进步