zoukankan      html  css  js  c++  java
  • Hadoop2.x 体系结构和源码编译

    体系结构

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

  • 相关阅读:
    LintCode Python 简单级题目 488.快乐数
    LintCode Python 简单级题目 100.删除排序数组中的重复数字 101.删除排序数组中的重复数字II
    LintCode Python 简单级题目 373.奇偶分割数组
    LintCode Python 简单级题目 39.恢复旋转排序数组
    LintCode Python 简单级题目 35.翻转链表
    LintCode Python 简单级题目 451.两两交换链表中的节点
    LintCode Python 简单级题目 174.删除链表中倒数第n个节点
    aws查看官方centos镜像imageid
    linux shell脚本查找重复行/查找非重复行/去除重复行/重复行统计
    php配置优化-生产环境应用版
  • 原文地址:https://www.cnblogs.com/bigdata1024/p/8387423.html
Copyright © 2011-2022 走看看