什么是HDFS?
HDFS是Haddop下的分布式文件系统、具有高容错、高吞吐量等特性,可以部署在低成本的硬件上。
HDFS架构组成
- HDFS架构
HDFS遵循主/从架构,由单个NameNode(NN)和多个NameNode组成
- NameNode:负责执行有关文件存储系统
- DataNode:负责提供来自文件系统客户端的读写请求,执行块的创建、删除等操作
2.文件系统命名空间
HDFS的文件系统命令空间
的层次结构与大多数文件系统类似,支持目录和文件的创建、移动、删除和重命名等操作,支持配置用户和访问权限,但不支持硬链接和软链接。NameNode负责维护文件系统名称空间,记录对名称空间或其属性的任何更改
- 数据复制
由于Hadoop被设计运行在廉价的机器上,这意味着硬件是不可靠的,为了保证容错性,HDFS提供了数据复制机制。HDFS将每一个文件存储为一系列块,每个块由多个副本来保证容错,块的大小和复制因子可以自行配置。(默认情况小是128M. 复制因子是3)
HDFS有哪些特点?
高容错
由于HDFS采用数据的多付本方案,所以部分硬件的损坏不会导致全部数据的丢失高吞吐量
HDFS设计的重点是 支持高吞吐量的数据访问,而不是低延迟的数据访问。大文件支持
HDFS适合于大文件的存储,文档大小应该是GB到TB级别的简单一致性模型
HDFS适合于一次写入多次读取的访问模型。支持将内容追加到文件末尾,但不支持数据的随机访问,不能从文件任意位置新增数据跨平台的移植性
HDFS具有良好的跨平台移植性,这使得其他大数据计算框架都将其作为数据持久化存储的首选方案
HDFS写入数据流程
我们可以通过图片了解到HDFS写入流程基本为以下步骤
- 客户端拆分文件、切分成数据块
- 客户端询问NameNode写入文件、NameNode返回对应的DataNode存储地址
- 客户端根据DataNode地址写入第一个DataNode,第二个DataNode通过复制客户端和i一个DataNode的>管道完成复制、第三个完成第1-2的管道数据复制
DataNode再复制给第三个DataNode
4.数据块完成写入DataNode,发送消息给NameNode
HDFS读取数据流程
客户端给NameNode文件名、Namenode回复该文件的所有对应的DataNode的列表地址,安装排序传给客户端。客户端按照DataNode的顺序下载
HDFS故障检测方法
HDFS的故障有3种。
- 节点故障 每3秒DataNode发送心跳包给NameNode 如果NameNode10分钟以内未发送消息的话NameNode认定DataNode已经当即。 即使DataNode实际没有挂掉NameNode依旧会认为DataNode已经挂掉
- 网络故障 每次发送数据 接收者回复一个信号。如果没有收到信号,发送者默认主机已经宕机/
3。 数据损坏 当dataNode存储数据的时候都会校验是否正常。 NameNode知晓存储的数据库数量。
DataNode存储完成数据,会给NameNode回复。NameNode则知晓数据块的损坏
读写故障的处理
写入故障的处理 在写入数据到DataNode的时候 复制管道的时候未收到响应,则表示DataNode节点宕机,管道重新调整。
读取数据的时候NameNode会循环数据库的位置。NameNode返回所有的DataNode的位置,如果一个DataNode数据挂掉了则从其他DataNode去读取
DataNode故障处理方法
NameNode负责保存2张表。
- 数据块列表 数据块存储的DataNode位置
- DataNode列表 所有的DataNode列表
NameNode持续更新这两张表,如果发现一个DataNode上的数据块已经损坏,则从数据块列表该DN。如果发现某个DataNode挂掉 则更新DataNode列表。
NameNode定时扫描数据块列表 检查是否有数据块没有被正确的备份。如果正确备份表示该数据块充分备份。
对于所有未被充分备份的数据块NameNode从其他DataNode中获取备份。
注
:在这一切的前提下,都是基于某个地方是有一份有效的且充分备份的数据快。HDFS不能保证至少有一份备份存活。但是它会尽力。
副本布局策略
集群被分成不同的机架,每个机架多个DataNode。 第一副本的位置取决于写入者是集群的成员,那么它就是第一副本,否则随机选择某个DataNode。另外2个副本的位置,选择一个不同的机架,选择2个不通的DataNode。
后续的副本位置: 选择任意随机且满足两个条件
的DataNode:
1.每个DataNode只存储一份备份
2.每个机架最多存储两份备份。 在2个条件都无法满足的情况下。这些条件都没用。
总结:通过本章节HDFS的讲解我们了解到一个简单的概念。NameNode在HDFS当中充当协调者,负责协调客户端读写等操作,包括对DataNode的管理。DataNode负责存储分割之后的数据块。
NameNode协调者。DataNode存储。
网友评论