Hadoop作为大数据处理的第一代代表性框架,已经经历了无数次的迭代,而主流基本上认为,主要是Hadoop1.0,Hadoop2.0,Hadoop3.0三个大的版本。今天的大数据开发学习分享,我们主要来讲讲从Hadoop1.0到Hadoop3.0,HDFS发生的变化。
Hadoop1.0版本
Hadoop1.0版本刚出来的时候是为了解决两个问题:一个是海量数据如何存储的问题,一个是海量数据如何计算的问题。Hadoop1.0的核心设计就是HDFS(Hadoop Distributed File System)和MapReduce。HDFS解决了海量数据存储的问题。MapReduce解决了海量数据如何计算的问题。
HDFS1的架构:
HDFS1:是一个主从式的架构,主节点只有一个叫NameNode、从节点多个叫DateNode。
NameNode
1、管理元数据信息(文件的目录树)、文件与Block块,Block块与DataNode主机的关系。
2、NameNode为了快速响应用户的操作请求(列如:上传文件、下载文件、增、删、改、查)所以将元数据信息加载在内存中。
DataNode
1、存储数据,把上传的数据划分成为固定大小的文件块(Hadoop1,默认是64MB)。
2、为了保证数据的安全,每个文件默认都有三个副本。
HDFS1的架构缺陷:
单点故障问题
内存受限问题
由此原因HDFS2便诞生了
单点故障的解决方案:
方案一:使用两台NameNode,然后做个共享目录,将元数据都放到共享目录中。但是只要共享目录出问题,两台NameNode便都会出问题。
方案二:使用两台服务器做hadoop的高可用。仅使用JournalNode的话active NameNode宕机后还需要手动重启,不推荐。推荐加上zookeeper。流程:
1.在两个节点上都安装一个NameNode。
2.每个NameNode所在的节点中都有一个监控器ZKFC。
3.监控器会监控NameNode的状态,并在zk中注册节点。
4.两个NameNode谁先在zk中注册成功则谁就是active状态,剩下的那个则是standby。
5.如果active节点挂掉了,监控器则将zk中注册的节点注销掉。
6.standby中的监控器一旦检测到zk中的节点消失,则立即注册并通知standby状态的NameNode开始工作,standby会先去远程执行kill-9 activeNameNode节点的端口杀死他后开始切换到active状态开始工作。
7.activeNameNode和standbyNameNode是使用JN进行做主从复制的。
内存受限的解决方案:
利用QJM(联邦)方案,做多个高可用的hadoop集群,每个HA集群之间存储的元数据信息都不一样,但集群与集群之间是一个整体,DataNode之间元数据也还是共享的。
总结:
hadoop2.0比hadoop1.0多了资源管理器YARN,不仅限于MapReduce一种计算框架了,也可以为其他框架使用,如Tez、Spark、Storm等。hadoop还增加了HA高可靠机制。hadoop2后block块的切分大小默认就是128MB了。
HDFS3相对于hadoop2的新特性
主要两点是:
支持多余2个以上的NameNodes
针对HDFS NameNode的高可用性,最初实现方式是提供一个活跃的(active)NameNode和一个备用的(Standby)NameNode。通过对3个JournalNode的法定数量的复制编辑,使得这种架构能够对系统中任何一个节点的故障进行容错。
该功能能够通过运行更多备用NameNode来提供更高的容错性,满足一些部署的需求。比如,通过配置3个NameNode和5个JournalNode,集群能够实现两个节点故障的容错。
HDFS支持纠删码(erasure coding)
纠删码是一种比副本存储更节省存储空间的数据持久化存储方法。比如Reed-Solomon(10,4)标准编码技术只需要1.4倍的空间开销,而标准的HDFS副本技术则需要3倍的空间开销。由于纠删码额外开销主要在于重建和远程读写,它通常用来存储不经常使用的数据(冷数据)。另外,在使用这个新特性时,用户还需要考虑网络和CPU开销。
关于大数据开发学习,从Hadoop1.0到Hadoop3.0,HDFS的变化,以上就为大家做了简单的介绍了。HDFS随着Hadoop版本的更迭,也在不断优化,对于开发者而言,这些变化也需要理解其由来以及带来的好处。
网友评论