zoukankan      html  css  js  c++  java
  • Hadoop 2.2.0 HA构造

    在这篇文章中《Ubuntu和CentOS分布式配置Hadoop-2.2.0》介绍hadoop 2.2.0最主要的配置。hadoop 2.2.0中提供了HA的功能,本文在前文的基础上介绍hadoop 2.2.0HA的配置。

    说明:

    下文中的两台namenode机器名各自是namenode1和namenode2.当中namenode1为active node。namenode2为standby namenode。

    journalnode机器有三台(注意:至少为三台)。各自是journalnode1,journalnode2,journalnode3。(journalnode的机器的数量能够是3,5,7...)

    另外,注意保持两台namenode的一致性,大部分在namenode1上进行的操作,也要在namenode2上进行一遍。

    配置文件

    core-site.xml和hdfs-site.xml的相关配置例如以下:

    1、core-site.xml

    <configuration>
            <property>
                    <name>fs.defaultFS</name>
                    <value>hdfs://mycluster</value>
            </property>
            <property>
                    <name>hadoop.tmp.dir</name>
                    <value>/tmp/hadoop2.2.0</value>
            </property>
    </configuration>
    2、hdfs-site.xml

    <configuration>
            <property>
                    <name>dfs.replication</name>
                    <value>1</value>
            </property>
            <property>
                    <name>dfs.namenode.name.dir</name>
                    <value>/dfs/name</value>
            </property>
            <property>
                    <name>dfs.datanode.data.dir</name>
                    <value>/dfs/data</value>
            </property>
            <property>
                    <name>dfs.permissions</name>
                    <value>false</value>
            </property>
            <property>
                    <name>dfs.nameservices</name>
                    <value>mycluster</value>
            </property>
            <property>
                    <name>dfs.ha.namenodes.mycluster</name>
                    <value>nn1,nn2</value>
            </property>
            <property>
                    <name>dfs.namenode.rpc-address.mycluster.nn1</name>
                    <value>namenode1:8020</value>
            </property>
            <property>
                    <name>dfs.namenode.rpc-address.mycluster.nn2</name>
                    <value>namenode2:8020</value>
            </property>
            <property>
                    <name>dfs.namenode.http-address.mycluster.nn1</name>
                    <value>namenode1:50070</value>
            </property>
            <property>
                    <name>dfs.namenode.http-address.mycluster.nn2</name>
                    <value>namenode2:50070</value>
            </property>
            <property>
                    <name>dfs.namenode.shared.edits.dir</name>
                    <value>qjournal://journalnode1:8485;journalnode2:8485;journalnode3:8485/mycluster</value>
            </property>
            <property>
                    <name>dfs.journalnode.edits.dir</name>
                    <value>/home/dfs/journal</value>
            </property>
            <property>
                    <name>dfs.client.failover.proxy.provider.mycluster</name>
                    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
            </property>
            <property>
                    <name>dfs.ha.fencing.methods</name>
                    <value>sshfence</value>
            </property>
            <property>
                    <name>dfs.ha.fencing.ssh.private-key-files</name>
                    <value>/home/root/.ssh/id_rsa</value>
            </property>
            <property>
                    <name>dfs.ha.fencing.ssh.connect-timeout</name>
                    <value>6000</value>
            </property>
            <property>
                    <name>dfs.ha.automatic-failover.enabled</name>
                    <value>false</value>
            </property>
    </configuration>
    重新启动使配置生效。

    启动过程:

    1、在journalnode机器上启动journalnode

    sbin/hadoop-daemon.sh start journalnode
    2、在namenode机器上启动namenode(这里假定namenode1为active。namenode2为standby)

    a)假设是首次启动,在namenode1上执行format命令:

    bin/hadoop namenode -format
    b)假设是非首次启动,则在namenode1上执行下面命令
    bin/hdfs namenode  -initializeSharedEdits
    c)在namenode1上启动namenode:

    sbin/hadoop-daemon.sh start namenode
    d)在namenode2上执行下面命令:

    sbin/hadoop-daemon.sh start  namenode -bootstrapStandby
    假设失败的话。直接把namenode1的dfs.namenode.name.dir文件夹的数据直接复制到namenode2的dfs.namenode.name.dir文件夹。

    然后在namenode2上启动namenode:

    sbin/hadoop-daemon.sh start namenode
    如今,namenode1和namenode2都启动了,都是“standby”状态。

    e)在namenode1上执行命令:

    bin/hdfs haadmin -transitionToActive nn1
    这样,namenode1的状态就变成了“active”。

    3、在datanode机器上启动datanode

    sbin/hadoop-daemon.sh start datanode
    到此时,hadoop2.0的HDFS就能够正常使用了,而且HA功能已经可用。

    检查

    能够通过下面页面查看active namenode(namenode1)和 standby namenode(namenode2)的状态

    http://namenode1:50070/dfshealth.jsp

    http://namenode2:50070/dfshealth.jsp

    另外,能够执行经常使用的HDFS shell命令測试HDFS是否正常。

    HA的failover測试

    停掉namenode1的namenode(模拟namenode1挂掉),这时会发现hdfs不能用了。

    在namenode2上执行下面命令:

    bin/hdfs haadmin -transitionToActive nn2
    执行命令成功后,namenode2的状态就变成“active”,这时 HDFS 恢复正常。

    在namenode1上执行一下命令做主从切换命令:

    bin/hdfs haadmin -failover nn1 nn2
    此时namenode2的状态就变成“active”,而namenode1的状态变成“standby”。

    转载请注明出处:http://blog.csdn.net/iAm333

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    android传送照片到FTP服务器
    Android对ScrollView滚动监听,实现美团、大众点评的购买悬浮效果
    android上传图片至服务器
    android中如何处理cookie
    【265】shell文件创建链接
    【264】◀▶ Windows 批处理(CMD)
    【263】Linux 添加环境变量 & 全局 shell 脚本
    【262】pscp命令 实现windows与linux互传文件
    合泰 HT66F30 定时器初始化
    错误 是否保存对以下各项的更改 devenv.sin
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4910303.html
Copyright © 2011-2022 走看看