1. hadoop1.0 和 hadoop2.0区别
1.1 hadoop1.0
1.1.1 HDFS
对HDFS来说,其主要的运行架构则是master-slave架构,即主从架构。其中呢,master主节点称之为Namenode节点,而slave从节点称为DataNode节点。
这个NameNode的职责是什么呢?
- NameNode管理着整个文件系统,负责接收用户的操作请求
- NameNode管理着整个文件系统的目录结构,所谓目录结构类似于我们Windows操作系统的体系结构
- NameNode管理着整个文件系统的元数据信息,所谓元数据信息指定是除了数据本身之外涉及到文件自身的相关信息
- NameNode保管着文件与block块序列之间的对应关系以及block块与DataNode节点之间的对应关系
在hadoop1.0中,namenode有且只有一个,虽然可以通过SecondaryNameNode与NameNode进行数据同步备份,但是总会存在一定的延时,如果NameNode挂掉,但是如果有部份数据还没有同步到SecondaryNameNode上,还是可能会存在着数据丢失的问题。
值得一提的是,在HDFS中,我们真实的数据是由DataNode来负责来存储的,但是数据具体被存储到了哪个DataNode节点等元数据信息则是由我们的NameNode来存储的。
这种架构实现的好处是简单,但其局限同样明显:
单点故障问题:因为NameNode含有我们用户存储文件的全部的元数据信息,当我们的NameNode无法在内存中加载全部元数据信息的时候,集群的寿命就到头了。
拓展性问题:NameNode在内存中存储了整个分布式文件系统中的元数据信息,并且NameNode只能有一台机器,无法拓展。单台机器的NameNode必然有到达极限的地方。
性能问题:当HDFS中存储大量的小文件时,会使NameNode的内存压力增加。
隔离性问题:单个namenode难以提供隔离性,即:某个用户提交的负载很大的job会减慢其他用户的job。
1.1.2 Mapreduce
对MapReduce来说,同样时一个主从结构,是由一个JobTracker(主)和多个TaskTracker(从)组成。
而JobTracker在hadoop1.0的MapReduce中做了很多事情,可以说当爹又当妈。
- 负责接收client提交给的计算任务。
- 负责将接收的计算任务分配给各个的TaskTracker进行执行。
- 通过heartbeat(心跳)来管理TaskTracker机器的情况,同时监控任务task的执行状况。
这个架构的缺陷:
单点故障:依旧是单点故障问题,如果JobTracker挂掉了会导致MapReduce作业无法执行。
资源浪费:JobTracker完成了太多的任务,造成了过多的资源消耗,当map-reduce job非常多的时候,会造成很大的内存开销,潜在来说,也增加了JobTracker失效的风险&