Hadoop_day02
- HDFS
- 1. 简介
- 2. HDFS架构
- 2.1 Block
- 2.2 NameNode
- 2.3 DataNode
- 2.4 SecondaryNameNode
- 3. 基本命令
- 4. 回收站机制
- 5. dfs目录
- 6. 执行流程
- 6.1 删除原理
- 6.2 读数据的原理
- 6.3 写数据的原理
- 7. API操作
HDFS
1. 简介
- Hadoop Distributed File System,hadoop分布式文件存储系统
- 分布式的,可扩展,可靠的文件系统
- 包含三个主要的进程:
- NameNode
- DataNode
- SecondaryNameNode
三个进程一般分布在不同的主机上。
- 特点:
2. HDFS架构
2.1 Block
- 数据块是hdfs存储的最基本的单位
- hdfs可以存储无限量数据,但是数据都是被切成标准块来分布式的存储到不同的节点上面
- 为什么要切块?
1、切完块是为了方便存储大量文件。
2、有利于数据的复制,快速备份 - block默认的大小在hadoop1.0是64m,在hadoop2.0时是128M
- 在hdfs中,如果一个小文件存储时,并不会占用数据块的存储空间。
- Block复本放置策略:
- 第一个副本:如果是集群内部提交,那么哪一个DataNode提交的就将该复本放在哪个节点上。如果是集群之外的客户端上传的数据,那么就随机选择一台磁盘不太满,cpu不太忙的节点进行存储
- 第二个副本:放置在第一个复本不同机架的节点上
- 第三个副本:放置在与第二个副本相同机架的节点上
- 更多副本:随机节点(哪个节点比较空闲,就放到哪个节点上)
- 扩展:机架感知策略:
2.2 NameNode
- 启动nameNode
hadoop-daemons.sh start namenode
- 合并时机:
1、根据设置的时间:fs.checkpoint.period=3600
2、根据文件大小:edits文件大小超过64M就要去合并
3、当hdfs启动的时候,也会触发合并
4、可以手动通过命令来进行合并。
2.3 DataNode
namenode和DataNode之间:rpc传输协议,比http速度快
2.4 SecondaryNameNode
检查点节点,用来进行元数据的合并
3. 基本命令
- 常见命令
递归查询:hadoop fs -lsr / - 其他命令
4. 回收站机制
在HDFS中,回收站机制默认是关闭的,即从HDFS上删除文件的时候是立即删除的。
5. dfs目录
6. 执行流程
6.1 删除原理
- 客户端会发送请求到NameNode
- NameNode会把对应节点的元数据删掉
- NameNode并不会主动联系DataNode删除数据,而是等到DataNode主动和NameNode汇报自身情况的时候,告诉DataNode,元数据已经被删除了,你可以把你自身的数据删掉了
6.2 读数据的原理
- 客户端发送请求给NameNode(读取数据)
- NameNode要判断客户端是否有权限
- NameNode会把要读取的文件的元数据信息,放到队列当中发送给客户端
注意:如果文件特别大,块的数据返回给客户端时会分批返回。 - 客户端拿到元数据信息后,就知道了到底哪台服务器有所需的数据。只需要按顺序读取即可,但是读取时有不同的副本,要看哪个副本离得最近。
读取完一个block会对block进行校验,以保证读取的数据是完整的。如果读取失败,会联系NameNode读取其他副本 - 如果block数量非常多,读取完一批后,会联系NameNode读取下一批。
6.3 写数据的原理
- 客户端向NameNode发送RPC请求
- NameNode检查要创建的文件是否已经存在,判断客户端是否有权限,成功则为文件创建一个目录(即NameNode记录元数据),否则让客户端抛出异常
- 客户端写入文件时,会将文件分成多个数据包(packets),并向NameNode申请新的地址,用来存储副本的合适的DataNode列表,列表大小由NameNode中对副本的设置决定
- 客户端获取到地址后,以流的方式把数据包写入第一个DataNode中,第一个DataNode成功存储数据包后,在管道里再将其传递给第二个DataNode,流水线的方式,直到传递给最后一个DataNode
- 最后一个DataNode成功存储后返回一个ack信号,在管道里传递给上一个DataNode,一级一级直到传递给客户端。客户端收到ack信号后会继续写下一个Block
- 如果传输过程中,有某个DataNode出现了故障,则当前的管道会被关闭,出现故障的DataNode会从当前的管道中移除, 剩余的Block会继续剩下的DataNode中继续以管道的形式传输,同时NameNode会分配一个新的DataNode,保持 replications设定的数量。
7. API操作
- 读取文件
- 上传文件
- 删除文件
- 在hdfs上创建文件夹
- 查询hdfs指定目录下的文件
- 递归查询指定目录下的文件
- 重命名
- 获取文件的块信息