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

  • 相关阅读:
    zblog如何更改数据库配置以及生效
    阿里云RDS数据库改造迁移方案
    如何突破微信的支付额度限制
    IIS进行URL重写——实现https重定向,文件类型隐藏访问重写,nodejs等服务重写等等
    windows设置本地域名解析
    自己写的加密网页,与百度网盘私密很相似,需要密码才能访问(原创)
    CSS3 translate、transform、transition区别
    IIS前端页面不显示详细错误解决方法
    CSS滚动条设置
    IIS支持PHP文件解析
  • 原文地址:https://www.cnblogs.com/bigdata1024/p/8387423.html
Copyright © 2011-2022 走看看