hdfs 原理和指令

1 hdfs原理

1.1 三大组件

 NameNode、DataNode、SecondaryNameNode

1.2 NameNode
作用:存储元数据(文件名、创建时间、大小、权限、文件与block块映射关系)
数据存储目录:dfs.namenode.name.dir

1.3 DataNode
作用:存储真实的数据信息
数据存储目录:dfs.datanode.data.dir
block块:默认128M,通过dfs.blocksize设置
副本策略:默认是3个副本,通过dfs.replication配置
存放形式:

I.如果客户端在集群中,第一个副本放到客户端机器上;否则第一个副本随机挑选一个不忙的机器
II.第二个副本放到和第一个副本不同的机架上的一个服务器上
III.第三个副本放到和第二个副本相同机架不同服务器上
IV.如果还有更多副本,就随机存放

DataNode与NameNode通信:

I.DN启动后向NN进行注册,注册完后周期性(1小时)向NN上传块报告(blockreport)
    blockreport:block与datanode的映射关系(第二映射关系)
	作用:DN通过上传块报告,能更新NN内存中的映射关系
II DN发送心跳(3s)给NN,超过10m,就认为DN不可用了

1.4 SecondaryNameNode
作用:减轻NameNode压力,将edits编辑日志文件和fsimage镜像文件进行合并
执行流程

1. 周期性发送请求给`NN`,获取`fsimage`和`edits`
2. NN收到请求后,生成一个空的edits.new文件
3. NN给SNN发送fsimage和edits
4. SNN将fsimage文件加载到内存,合并edits文件
5. SNN生成新的镜像文件fsimage.ckpt
6. SNN发送fsimage.ckpt给NN
7. NN将fsimage.ckpt替换fsimage文件,将edits.new重命名为edits文件

1.5 HDFS读写流程
写入流程

1. 客户端给NN通信,创建文件
2. NN判断文件是否存在,是否有权限,如果有就创建文件,否则失败报错
3. 客户端将数据进行切片,放到缓冲区队列中;每个切片都需要给NN发送请求,NN给客户端返回DN列表
4. 客户端连接DN列表写入数据
5. DN根据副本策略将数据发送给其他DN
6. DN给客户端返回ACK包,如果成功就执行下一个切片,如果失败就重试

读取流程

1. 客户端给NN通信,读取文件
2. NN查找文件与block块关系,block与DN关系返回给客户端
3. 客户端创建输入流,根据NN返回的关系,去DN查找block数据
4. DN查找block块数据,返回给客户端
5. 客户端通过校验和比对block是否损坏。如果损坏,就取另外DN上的block块;如果没有,就读取下一个block块

2 bin/hdfs dfs命令:

2.1 -help:查看有哪些命令

2.2 -mkdir:创建目录,-p:创建多个目录

-copyFromLocal
-moveFromLocal

2.3 -ls:查看指定目录下有哪些文件和子目录,-R:递归地查看有哪些文件和目录

2.4 -du(s):查看目录或文件的大小

-count 【-q】

2.5 -mv/-cp:移动/复制目录或文件

2.6 -rm -r:删除目录或文件,-r:递归删除
2.7 -get:将服务器上的文件下载到本地

-copyToLocal
-moveToLocal

2.8 -cat/-text:查看服务器上文本格式的文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值