Hdfs特点:
1存储大文件-切块
2及时响应-心跳
3可靠-复本
4不建议小文件
5高吞吐量
6一次写入,多次读取,不支持修改
7不支持事务
基本概念
数据切块为block,1.0是64m。2.0是128m,不足128是多少就多少
(数据节点)Datanode:存数据
(名字节点)namenode:1管理元数据(记录操作),2管理datanode
元数据(文件存放路径,切块数,复本数,副本和datanode的关系)
元数据两份,内存为了快速查找,在磁盘中为了崩溃恢复
元数据的在磁盘的存储文件是edits(写操作)和fsimage(元数据),edits(写操作)和fsimage合并时机:
1过指定时间,2到达指定大小3重启4手动指定
复本(数据备份),默认为3
Namenode通过心跳管理datanode
副本放置策略:
第一个复本:内部,哪里上传就放哪里,外部,选相对空闲的
第二个副本:放在和第一个复本不同的机架上
第三个:放在第二个复本机架的的不同节点上
回收站策略
1. 在HDFS中,当删除文件或者目录的时候是立即删除,这是因为Hadoop中回收站策略默认是不开启
2. 可以在core-site.xml中添加属性fs.trash.interval来指定回收间隔时间,默认单位是分钟
SecondaryNameNode
既不管理DataNode也不负责存储元数据,并不是NameNode的热备份,在早期版本中只是辅助NameNode进行元数据的合并 - edits和fsimage在Hadoop1.0中合并时发生在SecondaryNameNode上,但是在Hadoop的2.0的完全分布式中,舍弃了SecondaryNameNode,为了保证NameNode的高可用,通过舍弃SecondaryNameNode的方式来设置2个NameNode,所以在Hadoop2.0的完全分布式中,元数据的合并是发生在NameNode上,只是在Hadoop2.0的伪分布式中依然存在SecondaryNameNode
dfs相关
每一次写入操作的时候,会分配一个递增的事务id
hdfs一旦上传完就不能修改
Hdfs读写、删除流程
删除:
1客户端发起rpc请求到namenode
2namenode查询元数据,并进行权限校验
3校验通过,操作记录到edits,删除文件,给客户端返回成功删除的信号
4发起心跳时,才真正的删除
读取:
1客户端发起RPC请求到NameNode
2NameNode收到请求之后,查询元数据,获取到这个文件的block存储地址,将这些地址放入一个队列中返回给客户端
3客户端在取到地址之后,会选择一个较近的节点来读取数据
4当读完这一批所有的Block之后,客户端户给NameNode发送信息要下一批Block的地址
5直到读取完所有的Block,客户端给NameNode发送信息,NameNode收到之后会去关闭文件(关闭流)
写入
1客户端发起RPC请求到NameNode
2校验是否存在和用户权限
3namedode计算大小,分配存储节点,存入队列返回客户端
4客户端上传到最近节点,然后复本自动备份
5写完所有block后,告知namenode,namenode关流