zoukankan      html  css  js  c++  java
  • Hadoop-1.2.1 升级到Hadoop-2.6.0 HA

     

    Hadoop-1.2.1到Hadoop-2.6.0升级指南

     

    作者

    陈雪冰

    修改日期

    2015-04-24

    版本

    1.0

     

     

    本文以hadoop-1.2.1升级到hadoop-2.6.0 ZKFC 模式,Centos 6.4, jdk 1.7.0_60环境为例。

    服务器:test23,test24,test25,

    原Hadoop-1.2.1的机器分布情况: 

    Test23: NameNode、JobTracker、SecondaryNode

    Test24:Datanode,TaskTracker

    Test25:Datanode,TaskTracker

    升级后Hadoop-2.6.0机器分布情况:

    Test23:NameNode,ResourceManager、ZKFailouControl、Zookeeper,journalNode

    Test24:NameNode,ResourceManager、ZKFailouControl、Zookeeper,JournalNode、DataNode

    Test25:DataNode、NodeManager、Zookeeper、JouernalNode

     

     

     

    配置好Hadoop2 的HA环境

    配置为zkfc模式,以确认配置文件无误,操作过程如下:

     

    1.1 先启动所有的zookeeper

    zkServer.sh start

    这里是test23:2181,test24:2181,test25:2181

     

    1.2 在所有节点上启动JournalNode:

    sbin/hadoop-daemon.sh start journalnode

     

     

    1.3 格式化第一个NameNode

    bin/hdfs namenode –format

     

     

    1.4 启动第一个的NameNode

    sbin/hadoop-daemon.sh start namenode

     

    1.5 在第二个NameNode上格式化并同步元数据

    bin/hdfs namenode –bootstrapStandby

     

     

    1.6 启动第二个NameNode

    sbin/hadoop-daemon.sh start namenode

     

     

     

    ZKFC操作

    1.7 在第一个NameNode上执行格式化zkfc:

    bin/hdfs zkfc –formatZK

    运行这个命令后,会在zookeeper上创建一个/hadoop-ha/mycluster/的znode,用来存放automatic failover的数据。

    1.8 启动zkfc(zookeeper failover controller)

    在第一个NameNode节点上启动zkfc

    sbin/hadoop-daemon.sh start zkfc

     

     

    此时有一个namenode已经变为active了

     

    第二个NameNode仍然是StandBy

     

     

    1.9 在第二个NameNode节点上启动zkfc

    sbin/hadoop-daemon.sh start zkfc

     

    两个NameNode上都启动了zkfc,此时停止第一个NamNode后第二个会自动变成active状态。

     

    1.10 启动datanode

    在Namenode上启动:sbin/hadoop-daemons.sh start datanode

          

     

    此时可以看到有两个DataNode:

          

     

    1.11 启动yarn

    在namenode上启动:sbin/start-yarn.sh

     

     

     

     

     

    运行测试程序:

     

     

    bin/hadoop fs -put ~/hadoop-2.6.0/share/hadoop/common/hadoop-common-2.6.0.jar hdfs://mycluster/

     

    JAVA客户端可以通过hdfs://mycluster/hadoop-common-2.6.0.jar方式访问资源

     

    1.12 备份hadoop2 zkfc环境的 的配置文件

    cp –r /home/hadoop2/hadoop-2.6.0/etc/hadoop /home/hadoop2/hadoop-2.6.0/etc/hadoop_zkfc

     

    备注:

    停止集群:

    sbin/stop-yarn.sh

    sbin/stop-dfs.sh

    在每台机器上执行:zkServer.sh stop

    第二次启动:

    在每台机器上执行:zkServer.sh start

    sbin/start-dfs.sh

    sbin/start-yarn.sh

     

     

     

     

    Hadoop1 升级准备

    2.1 确保hadoop1已经是定妥升级

    bin/hadoop dfsadmin -upgradeProgress status

    输出:There are no upgrades in progress.

    2.2 确保没有MR任务正在运行

    bin/hadoop job –list

    输出:0 jobs currently running

    2.3   进入安全模式,并更新fsimage,重置edits文件,

    bin/hadoop dfsadmin -safemode enter

    bin/hadoop dfsadmin –saveNamespace 

    2.4   查看hdfs是否正常,并保存到文件,供升级后进行报告对比,若不正常,先使其正常。

    bin/hadoop fsck /

    输出The filesystem under path '/' is HEALTHY字样

    保存hdfs报告到文件:

    bin/hadoop fsck / >fsck_old.txt

    cat fsck_old.txt

     

     

     

     

    如果有错误,则可用bin/hadoop fs –setrep命令,修改文件副本系统,正常后再改回来。

    参考:http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_shell.html#setrep

     

    2.5 离开安全模式

    bin/hadoop dfsadmin -safemode leave

    2.6   停止集群

    bin/stop-all.sh

    2.7 备份元数据${dfs.name.dir}目录

             cp -r tmp/name tmp/name_bak

             或

    tar –zcvf tmp/name.tar.gz tmp/name

     

    正式开始Hadoop1升级到Hadoop2

            

    3.1 用普通的Hadoop2集群先启动集群

             用 hadoop2_general里的hdfs-site.xml、core-site.xml和mapred-site.xml配置文件替换到hadoop2所有节点,一定要记得复制到所有节点,确认hdfs-site.xml里的两个路径和原hadoop1的一致:

    dfs.namenode.name.dir对应dfs.name.dir的目录

    dfs.datanode.data.dir对应dfs.data.dir的目录

     

    配置好hadoo-env.sh和sleaves文件

    3.2 启动NameNode和DataNode并升级,在NameNode上执行:

    为了确保升级namenode过程不出错,先升级namenode数据,再升级datanode数据。

    sbin/hadoop-daemon.sh start namenode -upgrade

    执行后在页面上的startup-progress页看到awaiting reported blocks状态,前面都没出错,此时处于安全模式,再启动datanode,注意datanode上不要加-upgrade参数。

    到各个datanode上启动:sbin/hadoop-daemon.sh start datanode

    看到该项awaiting reported blocks为100% 即表示升级成功。

     

    上面两部也可以一步完成,自测是没问题:

    sbin/start-dfs.sh -upgrade

    该NameNode节点会有NameNode和SecondNameNode等进程,

    可以用网页test23:50070查看升级进度:

    bin/hadoop dfsadmin –report  看到Decommission Status:Normal

    直到安全模式自动关闭:

     

    在这里可以看到启动过程:

     

     

     

     

     

    3.5 接下来到hadoop2里验证:

    bin/hadoop fsck /

    可以文件系统是完整的。

     

    生成新的检查报告 :bin/hadoop fsck />fsck_new.txt

    对比两份报告 :diff fsck_new.txt ../hadoop-1.2.1/fsck_old.txt

     

            

     

    3.6 停止HDFS,并复制ZKFC的配置文件到Hadoop2的所有节点,在NameNode上执行:

             sbin/stop-dfs.sh

             cp -r etc/hadoop_zkfc/ etc/hadoop/

     

    同样需要确认dfs.namenode.name.dir和dfs.datanode.data.dir两个目录是否和前面的一致。

     

    3.7 在每个节点上启动journalnode

            

    sbin/hadoop-daemon.sh start journalnode

            

    3.8 初始化journalnode存储目录

    如果有用过,则会提示是否要重新格式化,输入”Y”回车即可,在NameNode上执行:

    bin/hdfs namenode -initializeSharedEdits

     

    如果报找不到目录,则先启动namenode再停止,然后再初始化.

    sbin/hadoop-daemon.sh start namenode;sbin/hadoop-daemon.sh stop namenode;bin/hdfs namenode –initializeSharedEdits

     

    3.9 启动NameNode和DataNode

            在NameNode上执行:

    sbin/hadoop-daemon.sh start namenode

    sbin/hadoop-daemons.sh start datanode

     

     

    3.10 同步两个NameNode的元数据

             将dfs.namenode.name.dir目录复制到第二个NameNode

    scp -r hadoop-1.2.1/tmp/dfs/name test24:/home/hadoop2/hadoop-1.2.1/tmp/dfs

    或在第二个 NameNode节点下下执行bin/hdfs namenode -bootstrapStandby 作用与直接拷贝元数据。

    3.11 格式化zkfc

    在第一个NameNode上执行:

    hadoop-2.6.0/bin/hdfs zkfc -formatZK

    3.12 重新启动hdfs:

             确保所有zookeeper都已经启动

    hadoop-2.6.0/sbin/stop-dfs.sh

    hadoop-2.6.0/sbin/start-dfs.sh

     

     

     

     

     

     

    此时升级算是完成

     

     

     

    3.13 测试NameNode自动切换

     

    当把test23的namenode停止后,test24的namenode自动由standBy变成active了

     

     

     

     

    再次启动test23

     

     

    3.14 启动yarn

     

     

     

     

    运行MR测试程序 :

    bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar pi 2 2

            

     

     

     

     

    尽量多运行一些测试程序,确认环境没有问题,我们执行定妥升级:

    bin/hdfs dfsadmin –finalizeUpgrade

     

     

    不知道为什么升级完后UI界面还是原来的,求大侠指导,所以下面的字样也看不到。

     

    此时看到active的NameNode上的“Upgrade in progress……” 字样已经消失。

     

     

     

     

    我这里也通过更新前后的两个文件进行对比。

     

     

     

     

     

    若执行升级可回滚:

    sbin/stop-dfs.sh

    sbin/start-dfs.sh -rollback

    也可以将备份好的元数据还原

     

     

     

    建议Hadoop目录部署方式

    ln –s hadoop_versions/hadoop-0.20.2-cdh hadoop

      

     

    实验中的所有配置文件:

     https://files.cnblogs.com/files/JavaSmart/hadoop1Tohadoop2ha_conf.rar

     

  • 相关阅读:
    P2519 [HAOI2011]problem a
    P1084 疫情控制
    P1941 飞扬的小鸟
    NOIP填坑计划
    P2831 愤怒的小鸟
    AGC 16 D
    P3960 列队
    Python3爬虫相关软件,库的安装
    软件理论基础—— 第一章命题逻辑系统L
    软件理论基础——导论
  • 原文地址:https://www.cnblogs.com/biginfo/p/4567173.html
Copyright © 2011-2022 走看看