HA: High Available(高可用集群)


hadoop 高可用 部署 spark集群_开发工具

本次安装的hadoop2.5.2是64bit的,如果需要请在我之前的博文中


规划节点数:(仅考虑HDFS 的HA)

HDFS的节点分配:

两个NN 且分布在两台主机

三个DN节点

三个JN节点

两个ZKFC节点(必须和NN放在一台主机上)

三个Zookeeper

Mapreduce的节点:

一个ResourceManager(替代1.x时的JobTracker)

三个DATAManager(替代1.x时的TaskTracker)和DN节点数相同



主机名

NN

DN

ZK

ZKFC

JN

RM

DM

Node0

1


1

1


1


Node1

1

1

1

1

1


1

Node2


1

1


1


1

Node3


1



1


1

具体步骤:

一、# ln -sf /root/hadoop-2.5.2 /home/hadoop2.5.2

 

二、修改配置文件(hadoop2.5.2/etc/hadoop)

    1. # vim hadoop-env.sh   //修改JAVA_HOME
     
    1. # vim slaves           //配置DN的主机
    node1  //DN1节点的主机
    node2  //DN2节点的主机
    node3  //DN3节点的主机
    注意:因为hadoop2.x没有了SecondNode了,因此不要配master文件
    
    1. # vim hdfs-site.xml
    <configuration>
     
    <!--首先给搭建的集群设置一个服务(名字)ID唯一标识,主要是给ZK区别的,因为zk管理不止Hadoop集群
    <property>
      <name>dfs.nameservices</name>
      <value>mycluster</value>
    </property>
     
    <!--给NN们设置名字,ID唯一标识-->
    <property>
     <name>dfs.ha.namenodes.mycluster</name>
      <value>nn1,nn2</value>
    </property>
     
    <!--根据RPC协议,设置NN的主机:端口号-->
    <property>
     <name>dfs.namenode.rpc-address.mycluster.nn1</name>
      <value>node0:8020</value>
    </property>
    <property>
     <name>dfs.namenode.rpc-address.mycluster.nn2</name>
      <value>node1:8020</value>
    </property>
     
    <!--根据HTTP协议,设置NN的主机:端口号-->
    <property>
     <name>dfs.namenode.http-address.mycluster.nn1</name>
      <value>node0:50070</value>
    </property>
    <property>
      <name>dfs.namenode.http-address.mycluster.nn2</name>
      <value>node1:50070</value>
    </property>
     
    <!--设置JN的主机和端口号,注意最后要添加集群服务的名字-->
    <property>
     <name>dfs.namenode.shared.edits.dir</name>
     <value>qjournal://node1:8485;node2:8485;node3:8485/mycluster</value>
    </property>
     
    <!--添加一个Class类,用于客户端连接NN(active)-->
    <property>
     <name>dfs.client.failover.proxy.provider.mycluster</name>
     <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
     
    <!--设置ssh免密码登录,注意私钥的名字要匹配-->
    <property>
     <name>dfs.ha.fencing.methods</name>
      <value>sshfence</value>
    </property>
     
    <property>
     <name>dfs.ha.fencing.ssh.private-key-files</name>
      <value>/root/.ssh/id_dsa</value>
    </property>
     
    <!--设置JN的工作目录,否则,默认是当前系统的/tmp,系统重启后,数据消失-->
    <property>
      <name>dfs.journalnode.edits.dir</name>
      <value>/opt/jn/data</value>
    </property>
     
    <!--以下操作设置,当NN(active)宕机了,自动切换NN(standby)-->
     <property>
      <name>dfs.ha.automatic-failover.enabled</name>
       <value>true</value>
     </property>
     
    </configuration>
     
    1. # vim core-site.xml  
    <configuration>
     
    <!--首先配置NN的入口-->
    <property>
      <name>fs.defaultFS</name>
      <value>hdfs://mycluster</value>
    </property>
     
    <!--设置zookeeper的节点(主机和端口号)-->
    <property>
       <name>ha.zookeeper.quorum</name>
      <value>node0:2181,node1:2181,node2:2181</value>
    </property>
     
    <!--设置hadoop所有文件目录的根位置,默认是系统/tmp,重启失效-->
    <property>
      <name>hadoop.tmp.dir</name>
      <value>/opt/hadoop2/</value>
    </property>
     
    </configuration>
     
    1. 安装zookeeper  【zookeeper-3.4.6】
    #ln -sf /root/zookeeper-3.4.6   /home/zk
            
    以下操作均在/home/zk下:
    配置目录在,zk/conf/
    #cp   zoo_sample.cfg    zoo.cfg //先将配置文件复制一份,重命名
     
    # vim  zoo.cfg        
     
    1.dataDir=/opt/zookeeper   //修改默认值,默认放在/tmp ,
            
    文件最后添加以下几行
    
    
     
      
    server.1=node0:2888:3888   //zookeeper所在节点的主机名
    server.2=mode1:2888:3888
    server.3=node2:2888:3888
     
      
    
    
    修改完成后,创建/opt/zookeeper目录,并创建,编辑文件名为myid的文件
    填充内容为server.1=node0:2888:3888 server后面的数字,不同节点对应不同数字,
    如第二个zookeeper即node1上的节点对应的数字即为2
    将/opt/zookeeper目录拷贝其他节点上
    [root@node0 bin]# scp -r zookeeperroot@node1:/opt/
                                   # scp -r zookeeper root@node2:/opt/
     
    在将zookeeper整个软件工作目录拷到其他节点上去
    [root@node0 ~]# scp -r zookeeper-3.4.6root@node1:~
                                 # scp -r zookeeper-3.4.6 root@node2:~
     
    别忘记做软连接
    # ln -sf /root/zookeeper-3.4.6  /home/zk
     
    配置Zookeeper的环境变量,写入/etc/profile,并将其他节点一并改写
    # scp /etc/profile root@node1:/etc/profile
     
    启动zookeeper
    先关闭系统防火墙:# systemctl stop firewalld.service
    或者# vim /etc/selinux/config  //重启
    每个节点都要启动:# zkServer.sh start
    检测:
    [root@node0 zookeeper-3.4.6]# jps
    5403 Jps
    5305 QuorumPeerMain
    以上完成zookeeper的安装部署

     

    下面要启动集群:

    启动之前,将其他节点安装Hadoop2.5.2,并将之前的配置文件覆盖到每个节点,保持每个节点的配置文件相同

    # scp  ./*   root@node1:/home/hadoop2.5.2/etc/hadoop
    # scp  ./*   root@node2:/home/hadoop2.5.2/etc/hadoop
    # scp  ./*   root@node3:/home/hadoop2.5.2/etc/hadoop
     
    目录切换到/home/hadoop2.5.2/sbin
    1. 首先启动JN :(在JN的节点上启动,即node1,node2,node3)
    [root@node1 sbin]# ./hadoop-daemon.sh start journalnode
    [root@node2 sbin]# ./hadoop-daemon.sh start journalnode
    [root@node3 sbin]# ./hadoop-daemon.sh start journalnode
     
    2.在任意一个NN的节点主机上(node0或者node1),格式化HDFS,目录切换到/home/hadoop2.5.2/bin
    [root@node0 bin]# ./hdfs namenode –format

    hadoop 高可用 部署 spark集群_大数据_02

    3.检查各个节点是JN是否正常,jps或者去当前格式化NN节点的主机下的/home/hadoop2.5.2/logs  查看JN日志


    4.拷贝当前格式化NN节点的元数据文件(opt/hadoop2/dfs/name/current/*)

    官方有推荐命令:


    1. 首先启动当前NN(格式化好的):bin]#./hadoop-daemon.sh start namenode
    2. 检查:jps  ,检查/opt/hadoop2/dfs/name/current有没有生成元数据文件
    [root@node0current]# ll
    总用量
    -rw-r--r--.1 root root 351 6月
    -rw-r--r--.1 root root  62 6月
    -rw-r--r--.1 root root   2 6月
    -rw-r--r--. 1 root root 205 6月   4 20:42 VERSION


    5.官方文档推荐使用:在没有格式化的NN节点的主机上执行:bin]#./node –bootstrapStandby

    这个命令就是将NN(已经格式化)生成元数据内容拷贝到NN(未格式化)的主机上在没有格式化的NN主机上检查有没有拷贝成功opt/hadoop2/dfs/name/current/*

    然而,我自己编译的源码,没这玩意……

    不过别担心,手动移动是一样有效的,[root@node0 opt]# scp -r hadoop2 root@node1:/opt

    hadoop 高可用 部署 spark集群_开发工具_03


    6.停止所有HDFS的节点的服务:zookeeper不要停


    7.在其中一个NN节点,格式化zkfs   bin]# hdfs   zkfc   -formatZK


    8.一次性启动所有dfs节点:sbin]#./start-dfs.sh

        出现下图及说明安装无误:

    hadoop 高可用 部署 spark集群_大数据_04



    用浏览器访问node0节点和node1节点,至于谁做active谁做standby完全取决于谁先拿到竞争锁

    浏览器访问测试:(别忘更改自己的hosts文件,否则请用ip地址)
    node0:50070    //NN1
    node1:50070     // NN2

    hadoop 高可用 部署 spark集群_开发工具_05

    hadoop 高可用 部署 spark集群_开发工具_06

    上床文件测试一下:

    [root@node0 bin]# ./hdfs dfs -mkdir -p/usr/file     //HDFS创建目录
    [root@node0 bin]# ./hdfs   dfs   -put /root/zookeeper-3.4.6.tar.gz  /usr/file  //上传文件
    这里说明:Hadoop1.x  默认block大小是64M  Hadoop2.x默认block大小是128M
    
    ============================================================================
    下面配置MapReduce
    1. 1.      vim mapred-site.xml
    <configuration>
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>
    </configuration>
     
    1. 2.      vim yarn-size.xml
    <configuration>
     
    <!--这里配置ResourceManager的节点主机
    <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>node0</value>
    </property>
     
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property>
     
    <property>
    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
     
    </configuration>
     
     
    将这些配置文件一并拷贝到其他节点主机上
    [root@node0 etc]# scp -r hadooproot@node1:/home/hadoop2.5.2/etc
    [root@node0 etc]# scp -r hadooproot@node2:/home/hadoop2.5.2/etc
    [root@node0 etc]# scp -r hadooproot@node3:/home/hadoop2.5.2/etc
     
    重启
    [root@node0 sbin]# ./start-all.sh

     

    浏览器访问

    hadoop 高可用 部署 spark集群_hadoop_07



    转载于:https://blog.51cto.com/icola/1786159