Hadoop核心组件之分布式文件系统HDFS
概述
- 源自于Google的GFS论文,论文发表于2003年10月
- HDFS是GFS的克隆版
- HDFS特点:扩展性&容错性&海量数据存储
特性
-
将文件切分成指定大小的数据块并以多副本的存储在多个机器上面
eg:假设有一个文件 test.log,它的大小是200M;此时需要将它切分为块(block),假设默认的 blocksize 是128M,那就需要切分为两个块=128M(blk1) + 72M(blk2)。在默认3副本的情况下,多台服务器中存储形式如下:node1:blk1 node2:blk2 node3:blk1 blk2 node4: node5:blk1 blk2
这种存储方式的好处就在于,假设 node1 节点挂掉了,但是在 node3 和 node5 中还有该文件块 blk1 的副本,因此不会影响到文件的操作。
- 数据切分、多副本、容错等操作对用户是透明的
上面那个例子中的处理对于用户来说是不感知的,就像操作单机一样操作分布式文件系统。
副本摆放策略
假设按照默认的3个副本因子
- 在RackA的Node1中保存一个副本
- 在RankA的Node2中保存一个副本
- 在RankB的Node1中保存一个副本
即本机、同一个机架内的不同节点、另一个机架上的节点
checkponit
在运行时,元数据Namenode加载到内存中以树形结构的形式存在,那么,如果某个节点突然挂掉了,那么那段时间的元数据就丢失了吗?显然是不可能的。
HDFS会每隔一段时间,假设是30分钟,将元数据信息序列化到磁盘中fsimage,那如果是在这30分钟内挂了呢?HDFS会将这段时间内的操作都记录到edits日志中,这样就可以通过fsimage和edits日志来进行恢复了。
恢复的工作交给Secondary Namenode来处理
- 反序列化旧的fsimage到内存中,形成一个树形结构
- 将edis中记录的所有对HDFS的操作都更新到内存中去
- 合并输出为一个新的fsimage文件来替换旧的fsimage
Hadoop核心组件之分布式计算框架MapReduce
概述
- 源自于Google的MapReduce论文,论文发表于2004年12月
- MapReduce是Google MapReduce的克隆版
- MapReduce特点:扩展性&容错性&海量数据离线处理
Hadoop核心组件之资源调度系统YARN
概述
- YARN:Yet Another Resource Negotiator
- 负责整个集群资源的管理和调度
- YARN特点:扩展性&容错性&多框架资源统一调度
Hadoop优势
-
高可靠性
- 数据存储:数据块多副本,即使一个节点挂了,在其他节点也能找到副本;
- 数据计算:重新调度作业计算,若当前作业失败了,会重新启动一个新的作业进行计算
-
高扩展性
- 存储/计算资源不够时,可以横向的线性扩展机器
- 一个集群中可以包含数以千计的节点
-
其他
- 存储在廉价机器上,降低成本
- 成熟的生态圈