Hadoop1.x版本升级Hadoop2.x

引言

随着企业数据化和Hadoop的应用越加广泛,hadoop1.x的框架设计越来越无法满足人们对需求,Apache一直在对Hadoop1.x进行修改,最后出了新一代的Hadoop2.x从业界使用分布式系统的变化趋势和 hadoop 框架的长远发展来看,MapReduce 的 JobTracker/TaskTracker 机制需要大规模的调整来修复它在可扩展性,内存消耗,线程模型,可靠性和性能上的缺陷。为从根本上解决旧 MapReduce 框架的性能瓶颈,促进 Hadoop 框架的更长远发展,从 0.23.0 版本开始,Hadoop 的 MapReduce 框架完全重构,发生了根本的变化。新的 Hadoop MapReduce 框架命名为 MapReduceV2 或者叫 Yarn

 

一 hadoop1.0版本与2.0版本的差异

1.1 HDFS之间的差异

1.1.1  Hadoop1.x

在Hadoop1.x中,HDFS的采用Masters/Slaves的方式设计集群,通过NameNode和DataNode的方式管理集群。在整个Hadoop1.x HDFS中分为Namespace和BlockStorageServer两个部分。其中Namespace完全分布在NameNode节点中,Namespace其中包括了所有文件的元数据、images镜像和edits文件等。而BlockStorageServer分布则是分布在NameNode节点和Datanode节点上的,在NamNodee节点中存放了所有的Block与DataNode节点之间的对应关系。而在Block的内容数据则是在DataNode节点中分布式存放着。如图1,Hadoop1.x版本HDFS示意图所示。

wKioL1cYPTnhkefRAABMis6L2jQ145.png 

图1  Hadoop1.x版本HDFS示意图

弊端:

1)因为NameNode节点是整个集群的中心,一旦NameNode发生宕机,将会导致整个集群的瘫痪,直到NameNode被重启以后问题才被解决。

2)NameNode节点的个数只有一个,单机的性能是有限的,并且NameNode中存放着有关DataNode节点的信息,因此在理论上无法实现横向无限性增加DataNode节点,这也就是为什么有NameNode最多支持4000个节点的由来。

1.1.2  Hadoop 2.x

Hadoop2.x实现联邦HDFS,即多个NameNode节点并存,并且每一个NameNode节点管理一个Namespace,如图2,Hadoop2.x的HDFS示意图所示。

wKiom1cYPKuTWTdlAABlfTAUsro087.png 

图2 Hadoop2.x的HDFS示意图

Block Pool:block池,一个NameNode管理的所有的block节点,一个NameNode节点和去的Pool为一个管理单元,来管理自己的Block。

在联邦HDFS中,每个Namespace都有自己的Block管理,但这些Block全部存放在整个DataNode集群中,如上图所示,Namespace之间是相互隔离的,即使一个NameNode节点宕机,也不会影响到其他NameSpace,同也不会影响到其管理的Datanodes中的Block。

优势:

(1)可以做到自由的横向无限制扩充DataNode节点。

(2)可以实现多个NameNode并发执行任务,提高HDFS系统的吞吐量

(3)安全性得到很大的提示,单个NameNode节点的崩溃不会导致整个系统的瘫痪。

1.2  MapReduce之间的区别

1.2.1  Hadoop1.x

Hadoop1.x运行MapReduce任务的流程为:

(1)Job Client提交任务给JobTracker(NameNode节点中),JobTracker向各个节点发出询问请求,查看每个DataNode节点中执行的Task(任务)的个数

(2)JobTrack收集DataNodes的信息,并Job进行资源分配

(3)将MapReduce任务所需的资源、信息等全部复制到Datanodes节点中。

(4)DataNode节点接受任务后,将本地的Block读取,并形成相应的Map和Reduce任务,这些任务的管理全部由DataNodes节点中的TaskTracker进行监督。如图3,MapReduce示意图所示。

wKiom1cYPdPw6cmFAAD0zgJ6bdM480.png 

图3  MapReduce示意图

从图中可知,JobTacker是整个Hadoop1.x MapReduce框架的中心,其承担的任务有:接受任务、计算资源、分配资源、与DataNode进行交流等功能。Hadoop1.x 框架在发布时收到很大的欢迎,但是随着需求越来越大,Hadoop1.x 的MapReduce(MapReduce v1)已经不能够胜任现在的需求,主要表现在以下几个问题:

(1)JobTracker是整个MapReduce v1的核心,存在单点故障

(2)JobTracker管理整个MapReduce作业的任务,造成资源消耗,当map/reduce task过多的时候,JobTracker将会耗费大量内存,同时也增加Job Tracker fail的风险。

(3)JobTracker对DataNode进行资源询,使用的Task的个数,为考虑内存和CPU的使用率等,如果将两个大内存的Map/reduce Task放在一个节点上执行,可能会出现内存溢出。

(4)代码层中的类有些超过3000行,导致整个类的任务不够明确,并且进行修改是任务量也巨大,因此增加了维护、开发人员进行修改的难度。

1.2.2  Hadoop2.x

为了应对越来越大的需求,已经MapReduce v1的弊端,Apache对MapReduce v2进行了重新设计,出现了MapReduce v2,也就是YARN框架。下面介绍一下YARN框架。如图4,YARN示意图所示。

wKiom1cYPf_Q_yO4AAD-YDPz6LQ932.png

 

wKioL1cYPs-Tb9ZLAADF9TfoMT0144.png

图4  YARN示意图

名词解释:

ResourceManager:以下简称RM。YARN的中控模块,负责统一规划资源的使用。

NodeManager:以下简称NM。YARN的资源结点模块,负责启动管理container。

ApplicationMaster:以下简称AM。YARN中每个应用都会启动一个AM,负责向RM申请资源,请求NM启动container,并告诉container做什么事情。

Container:资源容器。YARN中所有的应用都是在container之上运行的。AM也是在container上运行的,不过AM的container是RM申请的。

(1)ResourceManager:在MapReduce v1中,JobTracker的任务有两个:资源管理和任务调度。而在YARN框架中,将JobTracker的两个核心任务进行分离,其中的资源管理形成新的ResourceManager。ResourceManager负责管理每个NodeManager节点所提供的资源状态(内存、CPU、磁盘和带宽等传统信息)。在MapReduce任务的时候,RM会精确计算每个整个集群的资源情况,已分配给该任务合适的资源。

(2)Container:对一个节点的内存、CPU等资源的描述的整体描述。

(3)ApplicationMaster:每一个MapReduce任务都对应着一个AM,AM负责向ResourceManager索要执行任务所需要的资源容器,根据进程的状态、管理进行和处理进程失败的原因。

(4)NodeManager:是一个机器框架的代理,是任务执行的容器,其管理节点的诸多信息:例如内存、CPU、硬盘、网络等资源。

YARN相对于MapReduce v1的优势:

(1)JobTracker所承担的庞大负担被分割,分成了resourceManager和nodemanager。资源管理和任务调度分配在不同的节点,并且实现程序的分布化、最优化

(2)ResourceManager资源分配不再凭借slot的个数,而是根据节点的内存是分配任务,使得负载均衡更在完善

(3)ResourceManager节点上有一个ApplicationMasters进程,负责管理每个ApplicationMatser进程的状态,从而实现监督任务。

1.3  其它差异

MapReduce变成了和HBase和Hive等一样的YARN上面的一个应用;Hadoop1.x的默认块大小为64M,Hadoop2.x的默认块大小为128M在2.x中除了datanode要向namenode报告status,nodemanager也要向ResourceManager报告status

二、 Hadoop1.x升级Hadoop2.x实现

版本情况:老版本Hadoop1.0.3;新版本Hadoop2.6.4。

HOST信息:

wKiom1cYPoWT6UIGAAAqLCTEUns975.png

升级所需下载安装包:

hadoop-2.6.4.tar.gz http://apache.opencas.org/hadoop/common/hadoop-2.6.4/hadoop-2.6.4.tar.gz

jdk-8u77-linux-x64.tar.gz:官网下载

包的放置路径:/usr/local/src/

创建新的HDFS系统目录和测试文件:

[root@namenode ~]# hadoop fs -mkdir /test

[root@namenode ~]# hadoop fs -put /home/hadoop/hadoop/conf/*  /test/

wKioL1cYP5yC-WvNAABYni8hb0g096.png

解压jdk安装包(每个节点都要操作):

[root@namenode ~]# cd /usr/local/src

[root@namenode ~]#tar zxvf jdk-8u77-linux-x64.tar.gz


备份旧的jdk(每个节点都要操作):

[root@namenode ~]#mv  /usr/local/jdk1.6  /usr/local/jdk1.6.bak

替换新的jdk版本(每个节点都要操作):

[root@namenode ~]#mv  jdk1.8.0_77 /usr/local/jdk/

修改jdk环境(每个节点都要操作):

[root@namenode ~]#vim /etc/profile

更改JAVA_HOME

export JAVA_HOME=/usr/local/jdk

export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export PATH=$PATH:$JAVA_HOME/bin


[root@namenode ~]#source /etc/profile

验证jdk是否成功:

[root@namenode ~]#java –version


2.2  namenode节点操作

解压hadoop2.6的包:

[root@namenode ~]#tar zxvf hadoop-2.6.4.tar.gz

备份hadoop1.0(每个节点都操作):

[root@namenode ~]#mkdir /home/hadoop/backup

[root@namenode~]#mv /home/hadoop/hadoop /home/hadoop/backup/

备份好集群namenode的元数据(${HADOOP_HOME}/conf/hdfs-site.xml中的dfs.name.dir所配置的文件夹):

[root@namenode ~]#cp r /data/work/hdfs/name /data/backup/hdfsname.20160418.bak

安装hadoop2.6:

[root@namenode ~]#mv /usr/local/src/hadoop-2.6.4 /home/hadoop/hadoop

[root@namenode ~]#chown -R hadoop.hadoop /home/hadoop/hadoop


切换到hadoop用户:

[root@namenode ~]#su – hadoop

    

修改用户环境(每个节点都操作):

[hadoop@namenode ~]$vim /home/hadoop/.bash_profile

修改:

export HADOOP_HOME=/home/hadoop/hadoop

export PATH=$PATH:$HADOOP_HOME:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

export HADOOP_HOME_WARN_SUPPRESS=1

export PATH

[hadoop@namenode ~]$source /home/hadoop/.bash_profile

p8

2.3  修改配置文件

[hadoop@namenode ~]$cd /home/hadoop/hadoop/etc/hadoop/

[hadoop@hadoop/ ~]$vim hadoop-env.sh

修改export JAVA_HOME=/usr/local/jdk

增加export HADOOP_PREFIX=/home/hadoop/hadoop

    export HADOOP_HEAPSIZE=15000

[hadoop@hadoop/ ~]$vim yarn-env.sh

修改export JAVA_HOME=/usr/local/jdk

[hadoop@hadoop/ ~]$vim mapred-env.sh

修改export JAVA_HOME=/usr/local/jdk


[hadoop@hadoop/ ~]$vim hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

  <property>

        <name>dfs.namenode.http-address</name>

        <value>namenode:50070</value>

        <description> NameNode 通过当前参数 获得 fsimage 和 edits </description>

  </property>

  <property>

        <name>dfs.namenode.secondary.http-address</name>

        <value>node2:50090</value>

        <description> SecondNameNode 通过当前参数 获得最新的 fsimage </description>

    </property>

 

    <property>

        <name>dfs.replication</name>

        <value>2</value>

        <description> 设定 HDFS 存储文件的副本个数,默认为3 </description>

    </property>

   <property>

        <name>dfs.namenode.checkpoint.dir</name>

        <value>file:///home/hadoop/hadoop2.2/hdfs/namesecondary</value>

        <description> 设置 secondary 存放 临时镜像 的本地文件系统路径,如果这是一个用逗号分隔的文件列表,则镜像将会冗余复制到所有目录,只对 secondary 有效 </description>

    </property>

 

    <property>

        <name>dfs.webhdfs.enabled</name>

        <value>true</value>

    </property>

    <property>

        <name>dfs.namenode.name.dir</name>

        <value>file:///data/work/hdfs/name/</value>

        <description> namenode 用来持续存放命名空间和交换日志的本地文件系统路径 </description>

    </property>

 

    <property>

        <name>dfs.datanode.data.dir</name>

        <value>file:///data/work/hdfs</value>

        <description> DataNode 在本地存放块文件的目录列表,用逗号分隔 </description>

    </property>

    <property>

        <name>dfs.stream-buffer-size</name>

        <value>131072</value>

        <description> 默认是4KB,作为hadoop缓冲区,用于hadoophdfs的文件和写

hdfs的文件,还有map的输出都用到了这个缓冲区容量,对于现在的硬件很保守,可以设置为128k

(131072),甚至是1M(太大了mapreduce任务可能会内存溢出) </description>

    </property>

    <property>

        <name>dfs.namenode.checkpoint.period</name>

        <value>3600</value>

        <description> 两次 checkpoints 之间的间隔,单位为秒,只对 secondary 有效 </description>

    </property>

</configuration>


[hadoop@hadoop/ ~]$vim mapred-site.xml

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

<property>

 <name>mapreduce.framework.name</name>

 <value>yarn</value>

</property>

</configuration>


[hadoop@hadoop/ ~]$vim yarn-site.xml

<?xml version="1.0"?>

<configuration>

<property>

  <name>yarn.nodemanager.aux-services</name>

  <value>mapreduce_shuffle</value>

</property>

</configuration>


[hadoop@hadoop/ ~]$vim core-site.xml

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

<property>

   <name>fs.defaultFS</name>

   <value>hdfs://namenode:9000/</value>

   <description> 设定 namenode 的 主机名 及 端口 </description>

</property>

 

<property>

   <name>hadoop.tmp.dir</name>

   <value>/home/hadoop/tmp</value>

   <description> 存放临时文件的目录 </description>

</property>

</configuration>

新建文件目录(所有节点操作)

$mkdir /home/hadoop/tmp

$mkdir /data/work/hdfs/namesecondary/

$chown -R hadoop.hadoop  /home/hadoop/tmp/

$ chown -R hadoop.hadoop  /data/work/hdfs/namesecondary/

启动hdfs

[hadoop@namenode ~]$tart-dfs.sh

[hadoop@namenode ~]$hadoop-daemon.sh start namenode -upgrade

重新启动所有守护线程

[hadoop@namenode ~]$stop-dfs.sh

[hadoop@namenode ~]$start-all.sh

查看元数据是否成功保留

[hadoop@namenode ~]$hadoop fs -ls /

wKioL1cYQlWwkRCYAAA6M4VMSh8118.png


成功之后停掉所有守护进程

[hadoop@namenode ~]$stop-all.sh


修改/home/hadoop/hadoop/etc/hadoop/slaves

[hadoop@namenode ~]$vim slaves

修改:

node1

node2


hadoop文件拷贝给其它节点

[hadoop@namenode ~]$scp -r /home/hadoop/hadoop node2:/home/hadoop/hadoop/

[hadoop@namenode ~]$scp -r /home/hadoop/hadoop node1:/home/hadoop/hadoop/


Node1,2节点修改hadoop的目录权限

$chown -R hadoop.hadoop /home/hadoop/hadoop


namenode启动守护线程

[hadoop@namenode ~]$start-all.sh


namenode和datanode的dfs.namenode.name.dir目录下(本次实验中为/data/work/hdfs/name)会多出一个文件夹previous/或者通过jps查看信息

文件夹previous/,这是升级之前数据的备份,如果回滚也是需要有这个文件夹。




      本文转自YU文武貝 51CTO博客,原文链接:http://blog.51cto.com/linuxerxy/1766131,如需转载请自行联系原作者






本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454078.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

本页由试用版打印控件lodop6.2.6输出_Visual Basic 6.0 Sirk 迷你版

Visual Basic 6.0 Sirk 迷你版 VB6 Sirk Mini 2019更新1、支持主流操作系统&#xff0c;避免原版安装失败的问题&#xff1a;支持Windows XP、Vista、Win7、Win8、Win10(32位、64位)。2、保留大部分常用功能&#xff0c;避免精简版过度精简&#xff1a;包含原版完整控件&#x…

深度学习之卷积神经网络 LeNet

卷积神经网络典型CNN LeNet&#xff1a;最早用于数字识别的CNNLeNet5&#xff1a;现在常说的一般就是LeNet5AlexNet&#xff1a;2012ILSVRC冠军&#xff0c;远超第二名的CNN&#xff0c;比LeNet更深&#xff0c;用多层小卷积叠加来替换单个的大卷积ZF Net&#xff1a;2013ILSV…

dom4j的读写xml文件,读写xml字符串

百度了一些博客&#xff0c;大同小异&#xff0c;在选取jar包工具的时候大概看了下&#xff0c;大抵是jdom原始&#xff0c;dom4j优秀。于是做了些练习。 参考&#xff1a;http://www.cnblogs.com/mengdd/archive/2013/06/05/3119927.html 1 package com.test.xml;2 3 import j…

深度学习之数据增强方案和TensorFlow操作

一、数据增强的方法介绍 增加训练数据&#xff0c; 则能够提升算法的准确率&#xff0c; 因为这样可以避免过拟合&#xff0c; 而避免了过拟合你就可以增大你的网络结构了。 当训练数据有限的时候&#xff0c; 可以通过一些变换来从已有的训练数据集中生成一些新的数据&#x…

使用OpenSSL实现CA证书的搭建过程

个人博客地址&#xff1a;http://www.pojun.tech/ 欢迎访问 什么是CA CA,Catificate Authority,通俗的理解就是一种认证机制。它的作用就是提供证书&#xff08;也就是服务端证书&#xff0c;由域名&#xff0c;公司信息&#xff0c;序列号&#xff0c;签名信息等等组成&#…

gdb使用实例

第一篇 概论我们将学习使用gdb来调试通过一个通过串行线同PC相连的嵌入式系统。Gdb可以调试各种程序&#xff0c;包括C、C、JAVA、PASCAL、FORAN和一些其它的语言。包括GNU所支持的所有微处理器的汇编语言。在gdb的所有可圈可点的特性中&#xff0c;有一点值得注意&#xff0c;…

Linux 监控命令之 netstat

netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据&#xff0c;一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序&#xff0c;它能提供TCP连接&#xff0c;TCP和UDP监听&#xff0c;进程内存管理的相关报告。 语法 netstat [-acC…

solr 配置

创建 SolrHome(solrCore) 1.解压 solr-4.10.4.tgz 到 /usr/local/solr 2.将 solr-4.10.4/example/solr 下所有文件拷贝到 /usr/local/solrhome (此 solrhome 为自己创建的) solrhome 是 solr 运行主目录&#xff0c;可包含多个 SolrCore 目录SolrCore 目录中包含运行 Solr 实例…

mfc程序转化为qt_10年程序员:我都学过这些语言,2019年开始我再也不是程序员......

为什么学编程2008年&#xff0c;高中毕业的我问一个已经工作两年的亲戚&#xff1a;什么专业工资高&#xff1f;他告诉我&#xff1a;程序员。2008年成都最低工资好像是800元&#xff0c;我的生活费也是800元&#xff0c;据他所说程序员出来的工资是2000&#xff0c;于是开始了…

day 7 引用

1.ba在c语言和python中的区别 c语言&#xff1a;a100 a变量里面放的100 b a b变量里面也放的100 python &#xff1a; a100 内存中有个100 a放的100的内存地址 b a b也放的100的内存地址 相当于给100那一块内存&#xff0c;贴个便利签 2.type查看数据类型&…

Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示...

Dapper的牛逼就不扯蛋了&#xff0c;答应群友做个入门Demo的&#xff0c;现有园友需要&#xff0c;那么公开分享一下&#xff1a; 完整Demo&#xff1a;http://pan.baidu.com/s/1i3TcEzj 注 意 事 项&#xff1a;http://www.cnblogs.com/dunitian/p/5221058.html 平台之大势何人…

ride上点击用例不能显示edit信息_接口测试平台代码实现61: 多接口用例1

终于又序更上了&#xff0c;原谅最近作者几天事情不断。按照我们之前的计划&#xff0c;需要迅速开启很重要的核心多用例接口。首先&#xff0c;我们要确定&#xff0c;这个功能的大体设计。就放在在我们的页面 用例库 中&#xff1a;所以也就是我们很久之前就创建好的P_cases.…

MUI - 预加载

打开详情页回到顶部:document.body.scrollTop document.documentElement.scrollTop 0;方式一&#xff1a;preload一次仅能预加载一个页面&#xff08;除非循环&#xff09; var subWebview mui.preload({url: examples/accordion.html,id: template_sub,top: styles: {48 …

Bash : 索引数组

Bash 提供了两种类型的数组&#xff0c;分别是索引数组(indexed array)和关联数组(associative array)。本文主要介绍索引数组的基本用法。 索引数组的基本特点 Bash 提供的数组都是一维数组。任何变量都可以用作索引数组。通过 declare 关键字可以显式的声明一个索引数组。数组…

Python 第三方模块之 smtplib

1 python对SMTP的支持 SMTP&#xff08;Simple Mail Transfer Protocol&#xff09;是简单传输协议&#xff0c;它是一组用于用于由源地址到目的地址的邮件传输规则。 python中对SMTP进行了简单的封装&#xff0c;可以发送纯文本邮件、HTML邮件以及带附件的邮件。两个核心模块…

Node.js 使用jQuery取得Nodejs http服务端返回的JSON对象示例

server.js代码&#xff1a; // 内置http模块&#xff0c;提供了http服务器和客户端功能&#xff08;path模块也是内置模块&#xff0c;而mime是附加模块&#xff09; var httprequire("http");// 创建服务器,创建HTTP服务器要调用http.createServer()函数&#xff0c…

svg 动画_根据AI导出的SVG path制作SVG线条动画

点击右上方红色按钮关注“web秀”&#xff0c;让你真正秀起来前言首先祝大家2019新年快乐&#xff0c;万事大吉&#xff0c;猪事顺利&#xff0c;阖家欢乐。前面文章SVG 线条动画基础入门知识学习到了基础知识&#xff0c;现在来给大家讲讲如何制作SVG 制作复杂图形线条动画。假…

读书笔记2013第3本:《无价》

《无价》这本书是过年前买的&#xff0c;网络书店上写着“老罗推荐”&#xff0c;想着好像是在老罗哪一年的演讲里听过这本书&#xff0c;在豆瓣上评分7.9。读书是为了产生行动&#xff0c;读书时要提的4个问题&#xff0c;1&#xff09;这本书主要在谈些什么&#xff1f;2&…

Linux下的程序调试——GDB

无论是多么优秀的程序员&#xff0c;都难以保证自己在编写代码时不会出现任何错误&#xff0c;因此调试是软件开发过程中的一个必不可少的 组成部分。当程序完成编译之后&#xff0c;它很可能无法正常运行&#xff0c;或者会彻底崩溃&#xff0c;或者不能实现预期的功能。此时如…

圆锥曲线万能弦长公式_2020高考数学50条秒杀型公式与方法

考试马上就要到了&#xff0c;学姐整理了高考数学50条秒杀型公式和方法&#xff0c;希望能帮助考生们更好地攻克数学难关&#xff01;高考数学秒杀公式与方法一1&#xff0c;适用条件&#xff1a;[直线过焦点]&#xff0c;必有ecosA(x-1)/(x1)&#xff0c;其中A为直线与焦点所在…