技术背景
- 最早起源于Nutch,Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取、索引、查询等功能,但随着抓取网页数量的增加,遇到了严重的可扩展性问题——如何解决数十亿网页的存储和索引问题。
- 2003年开始谷歌陆续发表的三篇论文为该问题提供了可行的解决方案。
- 分布式文件系统(GFS),可用于处理海量网页的存储
- 分布式计算框架MAPREDUCE,可用于处理海量网页的索引计算问题。
- BigTable 数据库:
OLTP 联机事务处理 Online Transaction Processing 增删改
OLAP 联机分析处理 Online Analysis Processing 查询
真正的作用:提供了一种可以在超大数据集中进行实时CRUD操作的功能
- Nutch的开发人员完成了相应的开源实现HDFS和MAPREDUCE,并从Nutch中剥离成为独立项目HADOOP,到2008年1月,HADOOP成为Apache顶级项目,迎来了它的快速发展期
设计目的
用来解决[海量大文件的存储和索引问题]
设计思想
通过主从分布式架构系统将多台机器的物理存储整合成为一个整体的逻辑存储
技术本质
- 概念:分布式文件存储系统
- 解释:
存储: 将大文件拆分为block文件块通过nn名称节点进行管理dn数据节点存储
特性
适合一次存入多次读取
一次存入多次读取:hdfs是分布式系统,具有良好的磁盘读写操作,即高吞吐性;
不适合修改:hdfs的备份机制,和存储大文件特性,若将大文件读到内存中修改,很影响集群的服务性能,而且客户端每修改一次,hdfs集群还需要修改对应的副本,更耗时间和资源适合存储大文件
因为hdfs为了维护文件的索引,会在NN名称节点上保存所有文件的元数据信息,为避免给NN名称节点造成过大压力,所以hdfs集群应避免存储大量小文件。而适合存储相对的小量大文件高吞吐
一个10t的硬盘和10个1t的硬盘,虽然能存储的数据容量是一致的,但是速度肯定是10个1t的硬盘读写速度更快,相当于开了10个线程并行操作高容错
failover;备份机制,namenode通过元数据管理每个节点上的数据存储信息,如果某个节点的某块数据失效了,则namnode会在别点节点上找到该块数据进行重新备份,高容量
设计目的是为了解决海量大文件的存储问题,通过分布式系统将集群中的每台机器的硬盘整合起来组成高容量高扩展
分布式系统本身就提供了纵向扩展的能力,只需要增加集群的节点数,就可以增加系统的容量
集群角色
zkfc
- 概念:hdfs集群构建HA时才需要使用到的进程
- 功能:
- 负责转发NN的请求,向zookeeper进行注册
zk的分布式锁: 控制时序锁还是独占锁?
zk的命名服务: dfs.nameservies - 负责监听NN的状态,并汇报给zookeeper
zk的通知机制: 主备节点的切换,备份节点监听了zk上注册的临时非序列化的事件,当active会话断开后,zk会删除临时节点,此时通知备份节点进行抢注 - 负责nn与zk的通讯连接
- 负责转发NN的请求,向zookeeper进行注册
NameNode:active
- 概念:主节点
- 功能:
- 负责接收客户端对集群的事务性或非事务性的请求(接客)
- 负责管理子节点,负责管理数据安全(管理)
心跳机制
汇报机制 - 负责维护内存中的元数据与edits文件(元数据)
内存中的元数据与edits文件是先操作edits文件再变更内存元数据的 - 负责接收子节点的注册
- 高可用时负责将元数据的变化写入到journalnode
NameNode:standby
- 概念:hdfs集群构建HA时才需要使用到的备份节点
- 功能:
- 负责接收子节点的注册
- 负责去读取journalnode的元数据变化并维护自己内存中的元数据
- 将元数据的变化合并到fsimage,产生新的fsimage且同步给active
journalnode
- 概念:hdfs集群构建HA时才需要使用到的进程,统一的edits日志存储服务
- 功能:
- 负责接收active的写入edits数据请求
- 负责提供standby的读取edits数据请求
- 负责存储edits文件
secondaryNameNode
- 概念:同步进程,当hdfs不是高可用时才会用到
- 功能:
- 消耗过大,一般单独部署,负责通过http协议拉取nn上的edits文件并合并到新的fsimage文件中,清空旧的 fsimage文件,并将新的fsimage复制发送给nn,fsimage的文件名是序列号过的,最新的号越大
- 在hdfs的ha结构中,没有secondarynamenode的进程,该进程功能被standby代替了
dataNode
- 概念:数据节点
- 功能:
- 负责同NN交互,汇报节点状态及数据信息
心跳机制:节点存活状态
汇报机制:节点持有数据状态 - 负责同linux文件系统交互,读写具体的文件块
- 负责执行客户端的具体的读写操作
- 负责客户端写操作时与其余备份节点的通讯
package包发送
ack确认
- 负责同NN交互,汇报节点状态及数据信息
client
- 概念:客户端
- 功能:
- 可以管理或访问hdfs集群
- 负责文件上传时的文件切分
- 负责文件下载时的文件合并