提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


文章目录

  • 前言
  • 一、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的写流程:

hadoop主节点进程 hadoop主节点是什么_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作为单位接收数据,先在本地缓存,然后写入本目标文件。