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 体系结构和源码编译的更多相关文章
- hadoop-2.6.0源码编译问题汇总
在上一篇文章中,介绍了hadoop-2.6.0源码编译的一般流程,因个人计算机环境的不同, 编译过程中难免会出现一些错误,下面是我编译过程中遇到的错误. 列举出来并附上我解决此错误的方法,希望对大家有 ...
- Linux下安装mysql(yum和源码编译两种方式)
这里介绍Linux下两种安装mysql的方式:yum安装和源码编译安装. 1. yum安装 (1)首先查看centos自带的mysql是否被安装: # yum list installed |grep ...
- 使用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. ...
- Hadoop2.7.2源码编译过程
目录 准备工作 jar包安装 源码编译 准备工作 CentOS可以联网,验证:ping www.baidu.com 是畅通的 jar 包准备(hadoop 源码.JDK8.maven.ant .pro ...
- CentOS和Ubuntu下安装配置Greenplum数据库集群(包括安装包和源码编译安装)
首先说一下,无论是CentOS/RedHat还是Ubuntu都可以按源码方式.安装包方式编译安装. 1. 规划 192.168.4.93(h93) 1个主master 2个主segm ...
- CentOS 7上的程序管理:rpm、yum和源码编译安装
简介 在Linux的早期时代(也许吧?我猜的.也可能是Unix.),想要在系统上安装一款应用程序,是比较复杂的.需要专业的人员自行获取程序的源代码,并且编译安装,这是非常的复杂且需要一定的专业功底的, ...
- hadoop2.0 eclipse 源码编译
在eclipse下编译hadoop2.0源码 http://www.cnblogs.com/meibenjin/archive/2013/07/05/3172889.html hadoop cdh4编 ...
- Hadoop-2.x的源码编译
由于在Hadoop-2.x中,Apache官网上提供的都是32位版本,如果是生产环境中则需要自行编译64位,编译Hadoop-2.x版本方法如下: 安装编译源码所依赖的底层库 yum install ...
- hadoop-2.6.0源码编译
运行hadoop环境时,常常会出现这种提示 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your plat ...
随机推荐
- js “top、clientTop、scrollTop、offsetTop…”
当要做一些与位置相关的插件或效果的时候,像top.clientTop.scrollTop.offsetTop.scrollHeight.clientHeight.offsetParent...看到这么 ...
- 字符串相似度-C#
之前在做一个任务时, 需要比较字符串的相似度, 最终整理了一个出来, 以下: 1 /* 2 * Copyright (c) 2013 Thyiad 3 * Author: Thyiad 4 * Cre ...
- vim操作备忘录
vim操作备忘录 vim 备忘录 vim的书籍虽然看不不少,可是老是容易忘记,主要是自己操作总结过少,这个博客就主要用来记录一些比较常见的术语和操作,以防止自己再次忘记. <leader> ...
- kvm的安装使用技巧
KVM参考网址 http://www.server110.com/kvm/201403/8321.html http://www.2cto.com/os/201511/451650.html http ...
- C#中引用变量是否应该加ref?
看如下代码: void Test(T t); void Test(ref T t); 当T是值类型的时候,很好判断,第一种并不能改变方法外变量的值,需要第二种方法才可以.通过查看IL代码,可以看到 ...
- 【前端开发】解决ios设备上fixed浮动的input输入框兼容问题
我们在开发移动端页面时,经常会存在这种需求,在页面顶部或底部有一个输入框,一直浮动在顶部或底部位置,中间部分的内容是可以滚动的.比如底部输入框的搜索功能,或底部输入框的写评论功能. 这种问题,我们一般 ...
- MysqL自动提交机制的关闭
MysqL在执行一句数据库操作命令的时候,通常都是自动提交的.常用引擎下有两种,分别是MyIsam和InnoDB,MyIsam是不支持事务处理的,但InnoDB支持,但InnoDB在不开启事务处理的情 ...
- php的ob函数实现页面静态化
首先介绍一下php中ob缓存常用到的几个常用函数ob_start():开启缓存机制ob_get_contents():获取ob缓存中的内容ob_clean()清除ob缓存中的内容,但不关闭缓存ob_e ...
- 使用IntelliJ IDEA 和 Maven创建Java Web项目
1. Maven简介 相对于传统的项目,Maven 下管理和构建的项目真的非常好用和简单,所以这里也强调下,尽量使用此类工具进行项目构建, 它可以管理项目的整个生命周期. 可以通过其命令做所有相关的工 ...
- nginx笔记4-负载均衡带来的问题以及解决办法
接着笔记3,将笔记三的改造一下,现在分别启动两个Tomcat,在页面获取session.如图所示: tomcat2的session: tomcat1的session: 根据上图发现,每个tomcat取 ...