提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、HDFS?
- 二、主节点(Namenode)的作用:
- 三、从节点(Datanode)的作用:
- 四、SecondaryNameNode(SNN) 主要作用:
- 五、HDFS的shell操作:
- HDFS的写流程:
- HDFS的读流程:
前言
HDFS(Hadoop Distributed File System)起先是作为Apache Nutch搜索引擎项目的基础架构而开发的。HDFS是Hadoop的最核心项目之一,它被设计成适合部署在通用硬件(commodity hardware)上的分布式文件系统。
一、HDFS?
HDFS采用主从结构:
hadoop1.x :
① 只有一个主节点(namenode,NN)
② 有多个从节点 (datanode,DN)
hadoop2.x :
① 可以有两个主节点(namenode,NN)
② 有多个从节点 (datanode,DN)
Block :
默情况下: 线性切割,1.x(64M)2.x(128M)副本数为3
![在这里插入图片描述](
二、主节点(Namenode)的作用:
1.存储元数据
① 文件owership和permissions
② 文件大小,时间
③ Block列表:Block偏移量,位置信息(持久化不存)
④ Block每个副本的位置(由DataNode上报)
2.负责管理文件系统中的树状目录结构
三、从节点(Datanode)的作用:
① 本地磁盘目录存储数据(Block),文件形式
② 同时存储Block的元数据信息文件(MD5)
③ 启动DN时会向NN汇报Block信息
④ 通过向NN发送心跳保存与其联系(3秒一次),
如果NN10分钟没有收到DN的心跳,则认为该DN
已经lost,并copy该DN上的block到其他DN。
四、SecondaryNameNode(SNN) 主要作用:
① 它不是NN的备份(但是可以作为备份),它的主要工作
是帮助NN和并editslog,减少NN启动时间
② SNN执行合并时机
· 根据配置文件设置的时间间隔fs.checkpoint.period 默认3600秒
· 根据配置文件设置edits log大小 fs.checkpoint.size 规定edits文件的最大值默认是64MB
五、HDFS的shell操作:
1.创建目录:
[hadoop@haney1 hadoop]$ hdfs dfs -mkdir /haney ###注意:
/ 是 HDFS的根目录不是linux的根目录
[hadoop@haney1 hadoop]$ hdfs dfs -mkdir -p /a/b/c
### -p 表示级联创建目录
2.删除目录(文件):
[hadoop@haney1 hadoop]$ hdfs dfs -rmdir /haney
###删除目录,只能删除空目录,多级目录可以使用 以下命令
[hadoop@haney1 hadoop]$ hdfs dfs -rm -R /a
###删除目录,可以删除多级目
3.查看目录 #####
[hadoop@haney1 hadoop]$ hdfs dfs -ls /
#查看跟目录下所有的目录(文件)
4.创建空文件
[hadoop@haney1 hadoop]$ hdfs dfs -touchz /mypath/word.txt
5.上传文件 #####
[hadoop@haney1 hadoop]$ hdfs dfs -copyFromLocal ./my.txt /mypath
[hadoop@haney1 hadoop]$ hdfs dfs -put /opt/software/my2.txt /mypath #以上操作等价
###会将本地文件删除
[hadoop@hadoop101 software]$ hdfs dfs -moveFromLocal ./my3.txt /mypath
6.查看文件内容 #####
##hdfs dfs -cat hdfs上的文件
[hadoop@haney1 software]$ hdfs dfs -cat /mypath/my.txt
[hadoop@haney1 software]$ hdfs dfs -tail /mypath/my.txt
[hadoop@haney1 software]$ hdfs dfs -text /mypath/my.txt
7.下载文件 #####
[hadoop@haney1 software]$ hdfs dfs -copyToLocal /mypath/my.txt
[hadoop@haney1 software]$ hdfs dfs -get /mypath/my2.txt
8.用户、组、权限(了解)
[-chgrp [-R] GROUP PATH...] ###修改所在组
[-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...] ###修改权限
[-chown [-R] [OWNER][:[GROUP]] PATH...] ### 修改拥有者
[hadoop@haney1 software]$ hdfs dfs -chown admin /mypath/my.txt
[hadoop@haney1 software]$ hdfs dfs -chmod 777 /mypath/my.txt
[hadoop@haney1 software]$ hdfs dfs -chgrp abc /mypath/my.txt
9.拷贝(从HDFS到HDFS) #####
[-cp [-f] [-p | -p[topax]] <src> ... <dst>] ###拷贝
[hadoop@haney1 software]$ hdfs dfs -cp /mypath/my.txt /abc
10.移动文件(从HDFS到HDFS) #####
[hadoop@hadoop101 software]$ hdfs dfs -mv /mypath/my2.txt /abc
HDFS的写流程:
1.客户端首先与NameNode建立连接,发起文件上传请求。
2.NameNode检查上传路径是否存在,目标文件是否存在,权限是否允许。若无问题则修改命名空间,并反馈允许上传。
3.客户端收到允许上传反馈后再次请求第一个block所在的节点名。
4.NameNode根据机架感知原理选取三个节点(datanode1,datanode2,datanode3)并将其反馈给客户端。
5.客户端从获取的三个节点中选取一个节点建立pipeline连接,请求上传数据。节点1收到请求后与节点2获取连接,节点2收到请求后与节点3获取连接。
6.连接全部建立成功后,客户端开始向第一个节点传输第一个block。改block数据以packet为单位进行传输。数据的校验则是以更小的chunk单位进行。数据在客户端本地和datanode端都有读取和写入的缓存队列。每一次packet在pipeline上的传输都需要反向应答。直到写完预定的block为止。同样的,节点1、节点2和节点3之间也会以同样的方式同步传输。
7.当第一个block传输完成后,客户端再次发送请求到NameNode,将整个流程再次重复。
HDFS的读流程:
1.客户端通过Distributed Filesystem向Namenode请求下载文件,Namenode通过查询元数据,找到文件数据块所在的DataNode的地址。
2.客户端挑选一台Datanode(就近原则,然后随机),请求读取数据
3.DataNode开始传输数据给客户端(以Packet作为单位)
4.客户端以Packet作为单位接收数据,先在本地缓存,然后写入本目标文件。