设为首页 收藏本站
查看: 1511|回复: 0

[经验分享] Hadoop1.x版本升级Hadoop2.x

[复制链接]
累计签到:2 天
连续签到:1 天
发表于 2016-4-22 11:00:47 | 显示全部楼层 |阅读模式
引言
随着企业数据化和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.jpg
图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.jpg

图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.jpg
图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.jpg

wKioL1cYPs-Tb9ZLAADF9TfoMT0144.jpg

图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信息:
QQ截图20160422110004.png
升级所需下载安装包:
jdk-8u77-linux-x64.tar.gz:官网下载
包的放置路径:/usr/local/src/
创建新的HDFS系统目录和测试文件:
[iyunv@namenode ~]# hadoop fs -mkdir /test
[iyunv@namenode ~]# hadoop fs -put /home/hadoop/hadoop/conf/*  /test/
QQ截图20160422110011.png
解压jdk安装包(每个节点都要操作):
[iyunv@namenode ~]# cd /usr/local/src
[iyunv@namenode ~]#tar zxvf jdk-8u77-linux-x64.tar.gz

备份旧的jdk(每个节点都要操作):
[iyunv@namenode ~]#mv  /usr/local/jdk1.6  /usr/local/jdk1.6.bak
替换新的jdk版本(每个节点都要操作):
[iyunv@namenode ~]#mv  jdk1.8.0_77 /usr/local/jdk/
修改jdk环境(每个节点都要操作):
[iyunv@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

[iyunv@namenode ~]#source /etc/profile
验证jdk是否成功:
[iyunv@namenode ~]#java –version

2.2  namenode节点操作
解压hadoop2.6的包:
[iyunv@namenode ~]#tar zxvf hadoop-2.6.4.tar.gz
备份hadoop1.0(每个节点都操作):
[iyunv@namenode ~]#mkdir /home/hadoop/backup
[iyunv@namenode~]#mv /home/hadoop/hadoop /home/hadoop/backup/
备份好集群namenode的元数据(${HADOOP_HOME}/conf/hdfs-site.xml中的dfs.name.dir所配置的文件夹):
[iyunv@namenode ~]#cp –r /data/work/hdfs/name /data/backup/hdfsname.20160418.bak
安装hadoop2.6:
[iyunv@namenode ~]#mv /usr/local/src/hadoop-2.6.4 /home/hadoop/hadoop
[iyunv@namenode ~]#chown -R hadoop.hadoop /home/hadoop/hadoop

切换到hadoop用户:
[iyunv@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缓冲区,用于hadoop读hdfs的文件和写
hdfs的文件,还有map的输出都用到了这个缓冲区容量,对于现在的硬件很保守,可以设置为128k
(131072),甚至是1M(太大了map和reduce任务可能会内存溢出) </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.jpg

成功之后停掉所有守护进程
[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/,这是升级之前数据的备份,如果回滚也是需要有这个文件夹。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-207350-1-1.html 上篇帖子: Hadoop单机模式部署 下篇帖子: hadoop redis mongodb 版本升级
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表