Hadoop2.x 体系结构和源码编译

体系结构

Hadoop1的核心组成包括HDFS和MapReduce。HDFS和MapReduce的共同点就是他们都是分布式的。node

HDFS是包括主节点NameNode,只有一个,还有不少从节点DataNode,还有不少个。linux

NameNode含有咱们用户存储的元数据的信息,把这些数据存储在硬盘上,可是在运行时是加载在内存中的。服务器

Hadoop1HDFS缺点:markdown

1) 当咱们的NameNode没法在内存中加载所有的元数据信息的时候,集群的寿命到头了。为了集群的寿命更长,咱们须要设定NameNode的节点是大内存的,内存越大越好。
2) Namenode只有一个节点,因此权限设计不够合理。 不能彻底物理隔离。举例:10个用户共用linux权限隔离完全仍是每一个用户在独立的机器上隔离的完全,很明显是后者。
3) HDFS存储数据有blocK概念,默认是64MB,能够改为128或者256。若是上传的数据都是大量的小文件,好比都是1MB,2MB的小文件,那么对咱们的HDFS集群会形成NameNode的元数据信息会急剧膨胀,每一个小文件都是独立元数据信息。分布式

改进:
1) 一个NameNode装不下数据,硬件上已经没法突破,那么咱们从软件体系中进行改进。一个NameNode不够用,那么就2个NameNode一块儿共存。它们组成hdfs federation。oop

2) 实现高可靠,能够实现NameNode的核心元数据同时存放在多个节点上。也可使用SecondNameNode,NameNode宕了,SecondNameNode还能够作事。默认的状况下全是手动恢复或者手动切换,没有自动化。HDFS 高可靠自动化须要第三方软件。学习

Hadoop2 实现了HA,它有两个NameNode。spa

写数据的NameNode处于active状态,读数据的NameNode处于standby状态。
HA两个NameNode使用相同的命名空间。与HDFS联盟不同,联盟使用的是两个独立的命名空间。.net

两个NameNode到底谁提供服务?若是一个NameNode宕了,是否还要改程序(IP、主机变了)?设计

咱们不须要去管。不用改程序。咱们只看到一个HDFS,根本看不到两个NameNode的不一样。对外提供的是统一的接口。

Active宕了,standby要转为Active,谁去作这样的事情?

两种方式,一手工作,二自动切换。
如何实现HA自动切换,须要Zookeeper.

MapReduce包括主节点JobTracker,只有一个;还有从节点TaskTracker,有不少个。

JobTracker主要的工做是管理用户提交的做业和分配资源。每一个TaskTracker有两个slot,也就是在一个TaskTracker最多有两个运行任务,默认是两个,能够更多,可是占有的内存也就多了。
MapReduce处理的做业都是批处理的做业,对实时性要求不高的做业。

Hadoop1MapReduce缺点:

1) 对于实时性做业和批处理做业,须要搭建不一样的集群环境。意味着硬件投入会多,须要不少服务器去作这样的事。而且相同的数据分散在两套不一样的集群体系中,数据须要同时传在两套不一样的集群体系中。不一样的环境运行的是不一样的做业类型,从另外一个角度讲每一个集群环境的资源利用率是不高的。集群多是这样的状况,用户要求实时性的做业,那么使用spark或者storm,运行完以后,处理完的数据咱们进行批处理,又由hadoop集群来作,从时间轴上来看,前面的集群是在前段时间有做业,后面的集群在后段时间有做业,资源利用率不高是从这个角度上讲。为了提升资源的利用率最好把它们合并到一套平台上。

2) MapReduce职责过多,须要分解。

hadoop2:Yarn用于处理资源分配和任务调度。

Yarn:
ResourceManeger:分配资源的(CPU、内存)
NodeManeger:它管理Hadoop集群中单个计算节点

Yarn的RM接收到咱们客户提交的MapReduce程序后,把程序交给NodeManager,启动一个进程xxxAppMaster(在某个NodeManager上), xxxAppMaster再在其余节点上分配tasktracker。

源码编译

为何要进行hadoop的源码编译?
看这篇文章:http://blog.csdn.net/xuefengmiao/article/details/25182323

hadoop2的学习资料不多,只有官网的少数文档。若是想更深刻的研究hadoop2,除了仅看官网的文档外,还要学习如何看源码,经过不断的调试跟踪源码,学习hadoop的运行机制。

当你发现hadoop 存在bug而你又有能力修复的时候,能够尝试改源码bug而后从新编译,这样你就可使用你fix bug 后的hadoop了。

如何进行hadoop源码的编译?

能够看我以前写过的一篇文章:

hadoop2.x源码编译

相关文章
相关标签/搜索