Hadoop2

hadoop2概述

  hadoop1和hadoop2的结构比较:

    

    hadoop1中有HDFS和MapReduce.HDFS负责存储,MapReduce负责计算,但是有几个问题需要解决:
      1.单点的问题.HDFS的namenode和MapReduce的jobTracker都是单点.单点的缺点就是,这个点一旦奔溃了,整个集群就不能工作了,虽然也有解决方案,但是都不够彻底,最好的解决方案,不会有单点,就得有两个或者更多的点在运行的时候就会有一个点发挥主要作用的,其余的点是用来后备的.一旦有问题的话,他们就会切换.hadoop就是为了解决这种问题.
      2.hadoop1中我们的hdfs存储海量数据是按照block来存的,block有大有小,在一个集群中只能规定有一种大小,这种用起来就比较别扭,因为企业的数据源不见得一致,有的数据可能大一些,有的数据可能小一些,在我们hadoop1的hdfs中,随着存储的block的增多,那么namenode的内存压力就会增大,当我们namenode内存装不下block的元数据信息的时候,那么我们的集群就不能用了.namenode所在服务器的内存不够用时,那么集群就不能工作了.
      3.mapredcuce所在集群的资源利用率比较低,如果只做mapreduce计算的话,会更低.
    在hadoop1中也有相应的解决方案,namenode和jobtracker有单点,但是发生风险的概率相当低,但是对应着都有一定的备份方案,所以一般的时候都没有什么问题.买服务器的时候,买高内存的话,一般问题都不大,真出现节点装不小,再搭一个集群也是没有问题的,mapreduce资源利用率低也不是什么大事,不过我们期待它的资源利用率高一点.hadoop2就是针对hadoop1的一个新的解决方案.

  hadoop2的结构:

      

      底层依旧是数据存储,那么在上面一层就没有mapreduce了,有了一个新的yarn,yarn是一个资源管理的框架,上边跑的mapreduce不属于hadoop2的平台,只是在yarn上的一个应用而已.
      hadoop计算永远是重点,yarn上可以跑mapreduce,也可以跑其他的一些东西,这些东西都是一些应用,这些应用需要利用这些资源.yarn负责集群的资源管理.
      hadoop1中mapreduce负责资源管理和数据处理,在hadoop2上,yarn属于资源管理,数据处理归外边的应用,把hadoop1上的功能给分解了,mapreduce 本身就是一个处理的框架,像一个插件插在yarn上,在yarn上可以跑Batch MapReduce,Interactive Tez,Online Hbase ,Steraming Strom、S4,Graph Graph, In-Memory Spark,Hrc Mpi OpenMpi.
yarn只做资源管理,控制着集群上边的cpu,内存,网路,以及硬盘.里边的那些框架要想运行的话,离不开yarn.
      程序在运行时还是需要从hdfs上请求数据,主要的是上边的应用来请求数据,不是yarn,yarn只负责资源管理硬件环境的,hdfs上的数据其实是应用来处理的.hdfs上存放的是数据资源,应用和hdfs上的数据有关系.也可以理解为管理硬件资源,分担了一部分jobtracker的功能.
      jobtracker负责资源管理和应用的监控,yarn只做上边的资源管理,应用管理是mapreduce做,功能单一了.

Hadoop2 HDFS的HA和Federation:

    HA:解决namenode的单点问题.

      namenode会区分状态一种active(激活)状态,standby(准备)状态,在我们namenode运行的时候一个属于active,一个属于standby,对外提供服务是active,standby属于时刻准备的namenode,准备着active状态的namenode宕掉,standby状态的接管,因为是两个namenode,有两个访问地址,所以HA这块对外提供了一个统一的名称,用户不需要关心什么是active,什么是standby,只需要访问这个地址就行了,地址会连正确的active,如果对外运行的地址宕了,机器自己会立即切换到另外一台机器上运行.

    两个namenode之间如何进行数据的同步:

      1.依赖于硬件linux操作系统的.NFS,网络连接系统 用来数据共享的.
      2.还有一个就是依赖于软件层面的,在hadoop上有一个新的节点,journalnode,软件层面上可以提供一个journalnode的集群,使用这个集群可以为我们的namenode提供数据同步做支持.journalnode会接收active的状态,active一旦有变化,journalnode会收到namenode的变化,然后journalnode集群的其他节点都会接收变化,并且standby端会接收通知同步journalnode上的数据.journalnode就是专门用来同步数据的.为什么集群呢?因为如果有一个journalnode宕了,数据也能真的同步过去.
      active的数据是journalnode接收的,这集群之间的节点是要做同步的,然后standby就可以从任意一个journalnode上读数据了.journalnode不能代替以前的secondarynode,secondarynode是进行数据合并的,journalnode是进行一个数据的中转的平台,如果往其中的两个journalnode上写成功了,第三台失败了,在journalnode集群这块应该叫没写成功.
      active状态的namenode如果宕了,可以通过两种方式进行切换,手工和自动切换。

      手工切换需要人工干预,不好,自动切换必须依赖于外界,这时候又引入zookeeper集群架构.zookeeper集群和journalnode性质有些相似,但是他们做的事是不一样的。

      zookeeper集群是用来实现namenode之间状态切换的。所以这个active状态的namenode和standby状态的namenode也会也zookeeper进行通信,zookeeper的目的是当一个宕了的话,别的还活着,他们之间的状态也是 进行实时同步的,实现状态切换一利用zookeeper集群,二利用外部的一些脚本,也就是说当active和standby进程起来的时候回去zookeeper进行注册,注册之后我们的zookeeper就知道有两个namenode来的,其中一个叫active,一个叫standby,如果active状态的一旦宕了,zookeeper就会接到通知.因为zookeeper是和我们的namenode连接在一起的,如果有一个连接宕掉的话,连接就中断了,连接一旦中断,zookeeper就会感知到有一个节点宕了,根据namenode的状态去做操作。zookeeper本身并没有转换的能力,只是用来判断有一个节点宕了,那么另外一个节点应该变过来。节点状态的变换,还需要我们java程序的处理。也就是说框架内部已经内置了状态的切换的这个命令,命令的触发时间是由zookeeper集群下的。
      在hadoop2中zookeeper只是管理、监控namenode的状态的变化。如果没有zookeeper集群就只能手工切换

    federation:

      解决问题:如果一个集群的内存不够用时,那么这个集群就不能用了,可以启动多个集群。

      新建集群的时候,一个namenode对应5个datanode,再新建一个集群的时候,对应着也是一个namenode对应着5个datanode,这些datanode不能重用,因为datanode节点上跑的是java进程,那么再起java进程的时候就会混淆,假设一个namenode对应这六个datanode,namenode的内存满了,datanode的容量可以是不限制的,上千台都可以,那么再建一个集群的话,一个namenode肯定也对应着这N多的datanode,又浪费了一些机器,其实一些datanode上还没有存满数据呢。
      hadoop2的federation的含义是:我可以搭多个集群,数据还是存放在datanode上的,namenode不共享,datanode共享。

      namenode内存满了,自身已经都不够了,所以他没法共享。datanode有有十台机器,每个有1T的硬盘,在原的集群中,1T的硬盘差不多快用完了,但是你的服务器不只是能放1T,可以放多台服务器,我可以放多块硬盘,可以扩展到几百个T都没问题,所以硬件机器是可以共用的。这样起码我们的CPU,主板,内存这些资源不需要再次投资了,只需要往上增加硬盘就可以了。
      federation是为了解决我们的namenode单节点内存不足,造成我们的集群不能用问题。

      datanode的节点利用率也提高了。两套集群其实是两套HDFS了,元数据其实是不一样的,datanode上面放的数据是有标记的,标记数据是属于哪个集群的.一般100万个文件,在namenode这边代表1G的内存。这和两个集群的区别就是datanode共享。

    多个namenode有联系吗:

      federation两个集群多个namenode的联系是:datanode节点是共享的。没有journalnode和zookeeper的事,journalnode和zookeeper是属于HA的范围。
      想要访问两个不同的HDFS的时候,因为是两个不同的集群,所以要分开去写。
      federation是多个HDFS集群,在多个集群中每一个集群内部可以自己搭建HA环境,多个HA组成一个federation,这个federation可以不是HA,只要保证他们是两个不同的集群就可以了。
      federation和两个hadoop集群的区别:是否共享datanode集群。
      HA的自动fallover:使用HA之后,可以自动进行状态的切换。
      我们的namenode 一个是active,一个是standby,两个namenode之间是共享数据的,我们的zookeeper集群实现了他们之间状态的监管,在运行的过程中,我们应该怎么样让他们的状态不同而进行切换呢?这要通过工具FalloverController,它是用来切换的,所以我们在配置自动切换的时候配置zookeeper集群,还要配置FailloverController。FailloverController是用来监控各个节点的状态的。如果有问题,就会发送通知,根据内部的判断来做出决策。
      namenode就是只做HDFS存放元数据的,状态切换或者状态监控不归namenode管,得需要第三方来做,
FailoverController是属于zookeeper的,zookeeper集群是 管理状态的,Namenode启动之后会在zookeeper注册状态。注册之后,节点一旦宕了,zookeeper得知道,但是zookeeper是通过FailoverController来监管他们的,
FailoverController是HDFS里边的一个进程,进程就是用来监控状态的变化的。
      active和standby两个namenode数据共享是通过NFS或者是journalnode集群

时间: 2024-07-30 10:20:55

Hadoop2的相关文章

windows下eclipse+hadoop2

windows下eclipse+hadoop2.4开发手册 1.解压下载的hadoop2.4,到任意盘符,例如D:\hadoop-2.4.0. 2.设置环境变量 ①新建系统变量,如下所示. ②将新建的HADOOP_HOME变量"%HADOOP_HOME%\bin;"加入到PATH变量里,如下图. 3.将hadoop服务器下的hadoop目录下etc/hadoop目录下的以下四个文件拷贝到自己开发的电脑相应目录下,如下图所示. 4.如果hadoop服务器中上述四个文件配置的是机器名,请在

Hadoop-2.2.0中文文档—— Common - CLI MiniCluster

目的 使用 CLI MiniCluster, 用户可以简单地只用一个命令就启动或关闭一个单一节点的Hadoop集群,不需要设置任何环境变量或管理配置文件. CLI MiniCluster 同时启动一个 YARN/MapReduce 和 HDFS 集群. 这对那些想要快速体验一个真实的Hadoop集群或是测试依赖明显的Hadoop函数的非Java程序 的用户很有用. Hadoop Tarball 你需要从发布页获取tar包.或者,你可以从源码中自己编译. $ mvn clean install -

【甘道夫】Ubuntu14 server + Hadoop2.2.0环境下Sqoop1.99.3部署记录

第一步.下载.解压.配置环境变量: 官网下载sqoop1.99.3 http://mirrors.cnnic.cn/apache/sqoop/1.99.3/ 将sqoop解压到目标文件夹,我的是 /home/fulong/Sqoop/sqoop-1.99.3-bin-hadoop200 配置环境变量: export SQOOP_HOME=/home/fulong/Sqoop/sqoop-1.99.3-bin-hadoop200 export PATH=$PATH:$SQOOP_HOME/bin

Hadoop1.X 与 Hadoop2.X区别及改进

一:Haddop版本介绍 0.20.x版本最后演化成了现在的1.0.x版本 0.23.x版本最后演化成了现在的2.x版本 hadoop 1.0 指的是1.x(0.20.x),0.21,0.22 hadoop 2.0 指的是2.x,0.23.x CDH3,CDH4分别对应了hadoop1.0 hadoop2.0 二.Hadoop1.X与Hadoop2.X区别 1.HDFS的改进 1.1 Hadoop1.x时代的HDFS架构 在Hadoop1.x中的NameNode只可能有一个,虽然可以通过Seco

hadoop2.6.0实践:002 检查伪分布式环境搭建

1.检查网络配置[[email protected] ~]# cat /etc/sysconfig/networkNETWORKING=yesHOSTNAME=hadoop-masterGATEWAY=192.168.126.2 [[email protected] ~]# cat /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhos

hadoop2.6.0实践:A02 问题处理 util.NativeCodeLoader: Unable to load native-hadoop library for your platform

############################################################# hadoop "util.NativeCodeLoader: Unable to load native-hadoop library for your platform" hadoop安装完以后,经常会提示以下警告: WARN util.NativeCodeLoader: Unable to load native-hadoop library for your

Hadoop2.6.0实践:000 环境搭建

##################### Centos6.4VM_01_os.rar ################################################准备工作/opt /opt/modules 软件安装目录 /opt/softwares 软件包(tar.bin.zip) /opt/tools(eclipse等) /opt/data(测试数据)/home/hadoop(工具和数据) ##################### Centos6.4VM_01_os.r

CentOS7+Hadoop2.7.2(HA高可用+Federation联邦)+Hive1.2.1+Spark2.1.0 完全分布式集群安装

1       VM网络配置... 3 2       CentOS配置... 5 2.1             下载地址... 5 2.2             激活网卡... 5 2.3             SecureCRT. 5 2.4             修改主机名... 6 2.5             yum代理上网... 7 2.6             安装ifconfig. 8 2.7             wget安装与代理... 8 2.8       

大话Hadoop1.0、Hadoop2.0与Yarn平台

2016年12月14日21:37:29 Author:张明阳 博文链接:http://blog.csdn.net/a2011480169/article/details/53647012 近来这几天一直在忙于Hbase的实验,也没有太静下心来沉淀自己,今天打算写一篇关于Hadoop1.0.Hadoop2.0与Yarn的博文,从整体上把握三者之间的联系,博客内容如有问题,欢迎留言指正!OK,进入本文正题-- 在开始接触Hadoop的时候,也许大家对于Hadoop是下面的一个概念:Hadoop由两部

hadoop2.7.3

环境:centos6.7,hadoop2.7.3,虚拟机VMware 下载hadoop:http://apache.fayea.com/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz namendoe 192.168.137.9 ; secondnode 192.168.137.15 ; datanode 192.168.137.16 修改三台主机的/etc/hosts,将namenode,secondnode,datanode信息分别加入 [[em