• 关于hadoop的HA集群配置和搭建


      因为公司需要,弄了几天,搭起来,完成一些基本的业务。

    注:以下配置描述的是HDFS的QJM方式的HA配置。

    前期准备:

       利用实验室Dell主机,在oracle VM上构建了三个 linux系统虚拟机,并搭建了三个hadoop的集群环境,并设置了三个系统间的ssh免密码登录。另外,一定要关闭三个系统的防火墙!相关软件及环境配置如下:

        Linux系统:CentOS 6.5 64位(内存:512M)

        Java: jdk7.0.45 for linux 64位

        Hadoop: hadoop2.4.0

        Zookeeper: zookeeper3.4.6

    1.1 zookeeper集群配置

    首先介绍即将部署的zookeeper集群机器IP设置:

    l 10.1.1.11(hostname:slave-1)  namenode datanode

    l 10.1.1.12(hostname:slave-2)  standbyNamenode datanode

    l 10.1.1.13(hostname:slave-3)  datanode

    首先建立zookeeper的数据目录,比如:

    mkdir -p /opt/hadoop/data/zookeeper

    同时建立日志存放目录:

    mkdir –p /opt/hadoop/logs/zookeeper

    然后修改环境变量(比如修改/etc/profile),增加如下变量:

    export ZOO_HOME=/usr/hadoop2.4.0/zookeeper-3.4.5

    export ZOO_LOG_DIR=/opt/hadoop/logs/zookeeper

    在$ZOO_HOME/conf下,将zoo_sample.cfg复制一份,并重新命名为zoo.cfg。

    在zoo.cfg文件是加入以下配置:

    tickTime=2000

    dataDir=/opt/hadoop/data/zookeeper

    clientPort=31315

    initLimit=5

    syncLimit=2

    server.1=10.1.1.11:31316:31317

    server.2=10.1.1.12:31316:31317

    server.3=10.1.1.13:31316:31317

    在三台服务器的目录/opt/hadoop/data/zookeeper下分别创建一个叫myid的文件,内容分别是1,2,3

    最后就是分别启动zookeeper服务了:

    cd $ZOO_HOME

    ./bin/zkServer.sh start

    通过jps命令可以检查是否启动成功,如下图所示:

     

     

    看到QuorumPeerMain进程就表示zookeeper启动成功了。

    测试zookeeper集群是否建立成功,在$ZOO_HOME目录下执行以下命令即可,如无报错表示集群创建成功:./bin/zkCli.sh -server <serverIp>:31315,如下图所示:

     

    1.2 HDFS2.2.0HA配置

    1.2.1 core-site.xml

    <configuration>

    <property>

        <name>fs.defaultFS</name>

        <value>hdfs://ha4craig</value>

    </property>

    <property>

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

        <value>/usr/hadoop-2.4.0/tmp</value>

    </property>

    <property>

       <name>io.file.buffer.size</name>

       <value>131072</value>

    </property>

    <property>

       <name>hadoop.proxyuser.hadoop.hosts</name>

       <value>*</value>

    </property>

    <property>

       <name>hadoop.proxyuser.hadoop.groups</name>

       <value>*</value>

    </property>

    <property>

        <name>ha.zookeeper.quorum</name>

        <value>10.1.1.11:31315,10.1.1.12:31315,10.1.1.13:31315</value>

    </property>

    <property>

        <name>ha.zookeeper.session-timeout.ms</name>

        <value>1000</value>

    </property>

    </configuration>

    1.2.2 hdfs-site.xml

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

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

    <configuration>

    <property>

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

        <value>/usr/hadoop-2.4.0/data</value>

        <final>true</final>

    </property>

    <property>

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

        <value>/usr/hadoop-2.4.0/hdfs/name</value>

        <final>true</final>

    </property>

    <property>

        <name>dfs.replication</name>

        <value>2</value>

    </property>

    <property>

        <name>dfs.permissions</name>

        <value>false</value>

    </property>

    <property>

       <name>dfs.permissions.enabled</name>

       <value>false</value>

    </property>

    <property>

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

       <value>true</value>

    </property>

    <property>

           <name>dfs.nameservices</name>

           <value>ha4craig</value>

           <description>Logical name for this new nameservice</description>

       </property>

       <property>

           <name>dfs.ha.namenodes.ha4craig</name>

           <value>nn1,nn2</value>

           <description>Unique identifiers for each NameNode in thenameservice</description>

       </property>

       <property>

           <name>dfs.namenode.rpc-address.ha4craig.nn1</name>

           <value>10.1.1.11:8020</value>

       </property>

       <property>

           <name>dfs.namenode.rpc-address.ha4craig.nn2</name>

           <value>10.1.1.12:8020</value>

       </property>

       <property>

           <name>dfs.namenode.servicerpc-address.ha4craig.nn1</name>

           <value>10.1.1.11:53310</value>

       </property>

        <property>

           <name>dfs.namenode.servicerpc-address.ha4craig.nn2</name>

           <value>10.1.1.12:53310</value>

       </property>

       <property>

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

           <value>10.1.1.11:50070</value>

       </property>

       <property>

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

           <value>10.1.1.12:50070</value>

       </property>

       <property>

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

           <value>qjournal://10.1.1.11:8485;10.1.1.13:8485;10.1.1.12:8485/ha4craig</value>

       </property>

       <property>

           <name>dfs.client.failover.proxy.provider.ha4craig</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>/usr/hadoop-2.4.0/.ssh/id_dsa_nn1</value>

       </property>

       <property>

           <name>dfs.ha.fencing.ssh.connect-timeout</name>

           <value>30000</value>

       </property>

       <property>

           <name>dfs.journalnode.edits.dir</name>

           <value>/opt/hadoop/data/journaldata</value>

       </property>

       <property>

           <name>dfs.ha.automatic-failover.enabled</name>

           <value>true</value>

       </property>

       <property>

           <name>ha.failover-controller.cli-check.rpc-timeout.ms</name>

           <value>60000</value>

       </property>

       <property>

           <name>ipc.client.connect.timeout</name>

           <value>60000</value>

       </property>

       <property>

           <name>dfs.image.transfer.bandwidthPerSec</name>

           <value>4194304</value>

       </property>

    </configuration>

    在上面的配置中有一个地方要特别说明一下,dfs.ha.fencing.methods表示要使用的登录方式,这里使用ssh。dfs.ha.fencing.ssh.private-key-files需要存放一个ssh对应的密钥,不管是id_dsa,还是id_rssa,这里需要给出该文件的物理路径。 上面我们是配置了两个namenode来实现HDFS的HA的,分别是nn1和nn2,在nn2的usr/hadoop2.4.0/.ssh/目录下需要将nn1的~/.ssh/目录 下的id_dsa文件copy过来,并且应该重命名成如id_dsa_nn1这样的文件名,以免覆盖了本地的文件。

    Yarn-site.xml

    <configuration>

    <property>    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>

        <value>org.apache.hadoop.mapred.ShuffleHandler</value>

    </property>

    <property>

        <name>yarn.resourcemanager.address</name>

        <value>slave-1:8032</value>

    </property>

    <property>

        <name>yarn.resourcemanager.scheduler.address</name>

        <value>slave-1:8030</value>

    </property>

    <property>

        <name>yarn.resourcemanager.resource-tracker.address</name>

        <value>slave-1:8031</value>

    </property>

    <property>

        <name>yarn.resourcemanager.admin.address</name>

        <value>slave-1:8033</value>

    </property>

    <property>

        <name>yarn.resourcemanager.webapp.address</name>

        <value>slave-1:8088</value>

    </property>

    <property>

       <name>yarn.web-proxy.address</name>

       <value>slave-1:8888</value>

    </property>

    <property>

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

        <value>mapreduce_shuffle</value>

    </property>

    </configuration>

    1.3 安装HA集群

    10.1.1.11,主namenode ,datanode,zookeeper,journalnode,zkfc

    10.1.1.13,datanode,zookeeper,journalnode

    10.1.1.12,备namenode,datanode , zookeeper,journalnode,zkfc

     再次提示,关闭防火墙,不然下面的操作会出现问题。

    0、首先把各个zookeeper起来,如果zookeeper集群还没有启动的话。

    ./bin/zkServer.sh start

    1、然后在某一个namenode节点执行如下命令,创建命名空间

    ./bin/hdfs zkfc -formatZK

    2、在各个节点用如下命令启日志程序

    ./sbin/hadoop-daemon.sh start journalnode

    3、在主namenode节点用格式化namenode和journalnode目录

    ./bin/hadoop namenode -format

    ./bin/hadoop namenode -format ha4craig

    4、在主namenode节点启动namenode的daemon进程

    ./sbin/hadoop-daemon.sh start namenode

    5、在备节点执行第一行命令,这个是把备namenode节点的目录格式化并把元数据从主namenode节点copy过来,并且这个命令不会把journalnode目录再格式化了!然后用第二个命令启动备namenode进程!

    ./bin/hdfs namenode –bootstrapStandby

    ./sbin/hadoop-daemon.sh start namenode

    6、在两个namenode节点都执行以下命令

    ./sbin/hadoop-daemon.sh start zkfc

    7、在所有datanode节点都执行以下命令启动datanode

    ./sbin/hadoop-daemon.sh start datanode

    8、关闭和重启

    在三台机器上执行:./sbin/stop-dfs.sh和./zookeeper3.4.6/bin/zkServer.sh top,关闭所有服务,然后重启。

    1.4 启动HA

    下次启动的时候,只需要在三台机器上执行如下命令即可启动所有服务和进程:

    ./zookeeper3.4.6/bin/zkServer.sh start

    ./sbin/start-dfs.sh

    效果如下:

    Slave-1:

     

    Slave-2:

     

    Slave-3:

     

    然后访问以下两个地址查看启动的两个namenode的状态:

    http://10.1.1.11:50070/dfshealth.jsp

    http://10.1.1.12:50070/dfshealth.jsp

     

    通过简单命令和代码测试hadoop是否正常启动,如图:

     

     

    1.5 停止服务

    停止所有HDFS相关的进程服务,执行以下命令:

    ./sbin/stop-dfs.sh

    ./zookeeper3.4.6/zkServer.sh stop

    1.6 测试HDFS的HA功能

    在任意一台namenode机器上通过jps命令查找到namenode的进程号,然后通过kill -9的方式杀掉进程,观察另一个namenode节点是否会从状态standby变成active状态。

    jps

    1686 JournalNode

    1239 QuorumPeerMain

    1380 NameNode

    2365 Jps

    1863 DFSZKFailoverController

    kill -9 1380

    然后观察原来是standby状态的namenode机器的zkfc日志,若最后一行出现如下日志,则表示切换成功.

    INFOorg.apache.hadoop.ha.ZKFailoverController: Successfully transitioned NameNodeat salve-2/10.1.1.12:53310 to active state

    这时再通过命令启动被kill掉的namenode进程

    ./sbin/hadoop-daemon.sh start namenode

    对应进程的zkfc最后一行日志如下:

    INFOorg.apache.hadoop.ha.ZKFailoverController: Successfully transitioned NameNodeat slave-2/10.1.1.12:53310 to standby state

    可以在两台namenode机器之间来回kill掉namenode进程以检查HDFS的HA配置!

     

  • 相关阅读:
    【移动安全基础篇】——30、class.dex文件格式讲解
    【移动安全基础篇】——29、Android源码定制添加反反调试机制
    【移动安全基础篇】——28、Apk加固
    【移动安全基础篇】——27、常用调试检测方法与过检测方法
    【移动安全基础篇】——26、两个简单app破解
    粒子特效优化
    android studio生成aar包
    AndroidManifest
    声音
    unity webview
  • 原文地址:https://www.cnblogs.com/craig-yilia/p/4994975.html
Copyright © 2020-2023  润新知