体系结构

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

HDFS是包括主节点NameNode,只有一个,还有很多从节点DataNode,还有很多个。

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

Hadoop1HDFS缺点:

1) 当我们的NameNode无法在内存中加载全部的元数据信息的时候,集群的寿命到头了。为了集群的寿命更长,我们需要设定NameNode的节点是大内存的,内存越大越好。

2) Namenode只有一个节点,所以权限设计不够合理。 不能完全物理隔离。举例:10个用户共用linux权限隔离彻底还是每个用户在独立的机器上隔离的彻底,很明显是后者。

3) HDFS存储数据有blocK概念,默认是64MB,可以改成128或者256。如果上传的数据都是大量的小文件,比如都是1MB,2MB的小文件,那么对我们的HDFS集群会造成NameNode的元数据信息会急剧膨胀,每个小文件都是独立元数据信息。

改进:

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

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

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

写数据的NameNode处于active状态,读数据的NameNode处于standby状态。

HA两个NameNode使用相同的命名空间。与HDFS联盟不一样,联盟使用的是两个独立的命名空间。

两个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源码编译

Hadoop2.x 体系结构和源码编译的更多相关文章

  1. hadoop-2.6.0源码编译问题汇总

    在上一篇文章中,介绍了hadoop-2.6.0源码编译的一般流程,因个人计算机环境的不同, 编译过程中难免会出现一些错误,下面是我编译过程中遇到的错误. 列举出来并附上我解决此错误的方法,希望对大家有 ...

  2. Linux下安装mysql(yum和源码编译两种方式)

    这里介绍Linux下两种安装mysql的方式:yum安装和源码编译安装. 1. yum安装 (1)首先查看centos自带的mysql是否被安装: # yum list installed |grep ...

  3. 使用Maven将Hadoop2.2.0源码编译成Eclipse项目

    编译环境: OS:RHEL 6.3 x64 Maven:3.2.1 Eclipse:Juno SR2 Linux x64 libprotoc:2.5.0 JDK:1.7.0_51 x64 步骤: 1. ...

  4. Hadoop2.7.2源码编译过程

    目录 准备工作 jar包安装 源码编译 准备工作 CentOS可以联网,验证:ping www.baidu.com 是畅通的 jar 包准备(hadoop 源码.JDK8.maven.ant .pro ...

  5. CentOS和Ubuntu下安装配置Greenplum数据库集群(包括安装包和源码编译安装)

    首先说一下,无论是CentOS/RedHat还是Ubuntu都可以按源码方式.安装包方式编译安装. 1.   规划 192.168.4.93(h93)       1个主master  2个主segm ...

  6. CentOS 7上的程序管理:rpm、yum和源码编译安装

    简介 在Linux的早期时代(也许吧?我猜的.也可能是Unix.),想要在系统上安装一款应用程序,是比较复杂的.需要专业的人员自行获取程序的源代码,并且编译安装,这是非常的复杂且需要一定的专业功底的, ...

  7. hadoop2.0 eclipse 源码编译

    在eclipse下编译hadoop2.0源码 http://www.cnblogs.com/meibenjin/archive/2013/07/05/3172889.html hadoop cdh4编 ...

  8. Hadoop-2.x的源码编译

    由于在Hadoop-2.x中,Apache官网上提供的都是32位版本,如果是生产环境中则需要自行编译64位,编译Hadoop-2.x版本方法如下: 安装编译源码所依赖的底层库 yum install ...

  9. hadoop-2.6.0源码编译

    运行hadoop环境时,常常会出现这种提示 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your plat ...

随机推荐

  1. js “top、clientTop、scrollTop、offsetTop…”

    当要做一些与位置相关的插件或效果的时候,像top.clientTop.scrollTop.offsetTop.scrollHeight.clientHeight.offsetParent...看到这么 ...

  2. 字符串相似度-C#

    之前在做一个任务时, 需要比较字符串的相似度, 最终整理了一个出来, 以下: 1 /* 2 * Copyright (c) 2013 Thyiad 3 * Author: Thyiad 4 * Cre ...

  3. vim操作备忘录

    vim操作备忘录 vim 备忘录 vim的书籍虽然看不不少,可是老是容易忘记,主要是自己操作总结过少,这个博客就主要用来记录一些比较常见的术语和操作,以防止自己再次忘记. <leader> ...

  4. kvm的安装使用技巧

    KVM参考网址 http://www.server110.com/kvm/201403/8321.html http://www.2cto.com/os/201511/451650.html http ...

  5. C#中引用变量是否应该加ref?

    看如下代码:   void Test(T t); void Test(ref T t); 当T是值类型的时候,很好判断,第一种并不能改变方法外变量的值,需要第二种方法才可以.通过查看IL代码,可以看到 ...

  6. 【前端开发】解决ios设备上fixed浮动的input输入框兼容问题

    我们在开发移动端页面时,经常会存在这种需求,在页面顶部或底部有一个输入框,一直浮动在顶部或底部位置,中间部分的内容是可以滚动的.比如底部输入框的搜索功能,或底部输入框的写评论功能. 这种问题,我们一般 ...

  7. MysqL自动提交机制的关闭

    MysqL在执行一句数据库操作命令的时候,通常都是自动提交的.常用引擎下有两种,分别是MyIsam和InnoDB,MyIsam是不支持事务处理的,但InnoDB支持,但InnoDB在不开启事务处理的情 ...

  8. php的ob函数实现页面静态化

    首先介绍一下php中ob缓存常用到的几个常用函数ob_start():开启缓存机制ob_get_contents():获取ob缓存中的内容ob_clean()清除ob缓存中的内容,但不关闭缓存ob_e ...

  9. 使用IntelliJ IDEA 和 Maven创建Java Web项目

    1. Maven简介 相对于传统的项目,Maven 下管理和构建的项目真的非常好用和简单,所以这里也强调下,尽量使用此类工具进行项目构建, 它可以管理项目的整个生命周期. 可以通过其命令做所有相关的工 ...

  10. nginx笔记4-负载均衡带来的问题以及解决办法

    接着笔记3,将笔记三的改造一下,现在分别启动两个Tomcat,在页面获取session.如图所示: tomcat2的session: tomcat1的session: 根据上图发现,每个tomcat取 ...