zoukankan      html  css  js  c++  java
  • Hadoop-HA(高可用)集群搭建

    Hadoop-HA集群搭建

    一、基础准备工作

    1、准备好5台Linux系统虚拟服务器或物理服务器

      我这里演示采用虚拟服务器搭建Hadoop-HA集群,各自功能分配如下:

      NameNode节点:vt-serv、vt-serv4 

      DataNode节点:vt-serv1、vt-serv2、vt-serv3 

      Journalnode节点:vt-serv1、vt-serv2、vt-serv3 

      Zookeeper服务器:vt-serv1、vt-serv2、vt-serv3

      mysql数据库:vt-serv  

      Hive数据仓库:vt-serv4

       注:这5台服务器已经配置好了JDK1.8、Zookeeper、mysql-5.6等必备工具及基本环境,这些基础配置以及Hive在这里不作介绍!

    2、在每台服务器上创建共同的账号:hadoop ;以及工作组:bigdata

    #添加工作组
    $ groupadd bigdata
    #添加用户到指定工作组
    $ useradd -g bigdata hadoop 
    

    3、配置hadoop账户在服务器之间进行免密登录

    ① 在各服务器上生成密钥

    #在hadoop用户下生成密钥
    $ ssh-keygen -t rsa
    

    ② 将每一台服务器生成的密钥整合到同一台服务器(每一台服务器上执行)

    #整合密钥
    $ ssh-copy-id vt-serv
    

    ③ 将整合成功的密钥分发到其它几台服务器

    #分发密钥
    scp ~/.ssh/authorized_keys vt-serv1:~/.ssh/
    scp ~/.ssh/authorized_keys vt-serv2:~/.ssh/
    scp ~/.ssh/authorized_keys vt-serv3:~/.ssh/
    scp ~/.ssh/authorized_keys vt-serv4:~/.ssh/
    

    ④ 修改authorized_keys权限(只允许自己可以读写,权限过大系统会拒绝远程登录;同样每一台服务器都执行)

    #修改权限
    $ chmod 500 ~/.ssh/authorized_keys
    

    ⑤ 测试远程登录(任意服务器之间进行登录操作验证,如果能直接登录到对方服务器就表示配置OK!)

    #vt-serv上验证免密登录 
    $ ssh vt-serv4
    

    二、HA高可用集群搭建

    1、准备好hadoop安装包

    我这是用的是hadoop-2.7.6.tar.gz 官网提供

    2、创建hadoop工作目录

    #创建目录
    $ mkdir -p /opt/bigdata/HA
    $ mkdir -p /opt/data/HA/
    

    3、解压安装包

    #解压包到工作目录
    $ tar -zxf hadoop-2.7.6.tar.gz /opt/bigdata/
    

    4、配置core-site.xml文件

    ####core-site.xml begin#####
    <configuration>
        <!-- 指定hadoop运行时临时目录位置 -->
        <property>
            <name>hadoop.tmp.dir</name>
            <value>/opt/bigdata/HA/tmp</value>
        </property>
        <!-- 把两个NameNode)的地址组装成一个集群mycluster,需要和hdfs-site.xml一致 -->
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://mycluster</value>
        </property>
        <!-- Zookeeper集群 -->
        <property>
            <name>ha.zookeeper.quorum</name>
            <value>vt-serv1:2181,vt-serv2:2181,vt-serv3:2181</value>
        </property>
    </configuration>
    ####core-site.xml end#####
    

    5、配置hdfs-site.xml文件

    ####hdfs-site.xml begin#####
    <configuration>
        <!-- 完全分布式集群名称 -->
        <property>
            <name>dfs.nameservices</name>
            <value>mycluster</value>
        </property>
        <!-- 集群中NameNode节点都有哪些 -->
        <property>
            <name>dfs.ha.namenodes.mycluster</name>
            <value>nn1,nn2</value>
        </property>
        <!-- nn1的RPC通信地址 -->
        <property>
            <name>dfs.namenode.rpc-address.mycluster.nn1</name>
            <value>vt-serv:9000</value>
        </property>
        <!-- nn2的RPC通信地址 -->
        <property>
            <name>dfs.namenode.rpc-address.mycluster.nn2</name>
            <value>vt-serv4:9000</value>
        </property>
        <!-- nn1的http通信地址 -->
        <property>
            <name>dfs.namenode.http-address.mycluster.nn1</name>
            <value>vt-serv:50070</value>
        </property>
        <!-- nn2的http通信地址 -->
        <property>
            <name>dfs.namenode.http-address.mycluster.nn2</name>
            <value>vt-serv4:50070</value>
        </property>
        <!-- 指定NameNode元数据在JournalNode上的存放位置(单数) -->
        <property>
            <name>dfs.namenode.shared.edits.dir</name>
            <value>qjournal://vt-serv1:8485;vt-serv2:8485;vt-serv3:8485/mycluster</value>
        </property>	
        <!-- 声明journalnode服务器存储目录-->
        <property>
            <name>dfs.journalnode.edits.dir</name>
            <value>/opt/data/HA/journal</value>
        </property>
        <!-- namenode文件路径 -->
        <property>
            <name>dfs.namenode.name.dir</name>
            <value>/opt/data/HA/name</value>
        </property>
        <!-- datanode文件路径 -->
        <property>
            <name>dfs.datanode.data.dir</name>
            <value>/opt/data/HA/data</value>
        </property>
        <!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 -->
        <property>
            <name>dfs.ha.fencing.methods</name>
            <value>
                sshfence
                shell(/bin/true)
            </value>
        </property>
        <!-- 使用隔离机制时需要ssh无秘钥登录-->
        <property>
            <name>dfs.ha.fencing.ssh.private-key-files</name>
            <value>/home/hadoop/.ssh/id_rsa</value>
        </property>
    <!-- 关闭权限检查--> <property> <name>dfs.permissions.enable</name> <value>false</value> </property> <!-- 开启故障自动转移 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property>
    <!-- 访问代理类:client,mycluster,active配置失败自动切换实现方式--> <property> <name>dfs.client.failover.proxy.provider.mycluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> </configuration> ####hdfs-site.xml end#####

    6、编辑slaves 加入数据节点服务器名

    #编辑slaves文件
    $ vi /opt/bigdata/HA/hadoop-2.7.6/etc/hadoop/slaves
    #加入我的数据节点服务器名称
       vt-serv1
       vt-serv2
       vt-serv3
    

    7、将配置好的hadoop分发到各台服务器相同目录

    #文件分发
    $ scp -r /opt/bigdata/HA/hadoop-2.7.6/  vm-serv2:/opt/bigdata/HA/
    

    8、启动JournalNode(我的JournalNode配置的分别是vt-serv1 、vt-serv2、vt-serv3三台服务器,分别去启动)

    $ hadoop-daemon.sh start journalnode
    

    9、在nn1格式化namenode

    #格式化namenode这是关键的一步
    $ hdfs namenode -format
    

    10、在nn1启动namenode

    $ hadoop-daemon.sh start namenode
    

    11、在nn2同步namenode

    $ hdfs namenode -bootstrapStandby
    

    12、格式zookeeper zkfc数据(需要先保证Zookeeper是正常启动)

    $ hdfs zkfc -formatZK
    

    13、启动HDFS HA集群(在哪台namenode启动,则作为active)

    $ start-dfs.sh
    

    14、验证(停止 actived 那台服务器的 namenode)

    $ hadoop-daemon.sh stop namenode
    

     正常情况下集群会把另一台namenode的standby状态自动切换为active状态 至此Hadoop-HA高可用集群配置完毕!

    15、配置本地虚拟域名(路径:C:WindowsSystem32driversetchosts)加入自己的虚拟域名

    #加入我的namenode服务器的虚拟域名
    192.168.56.10  vt-serv
    192.168.56.14  vt-serv4
    

     

    16、访问http://vt-serv:50070

      Datanodes页面可以看到我的三台数据节点服务器已经加入服务

    17、在Hadoop上创建目录 

    #创建目录
    $ hdfs  dfs  -mkdir  /tmp
    

      

     18、附上我的Hadoop-HA集群启动脚本代码

     1 #!/bin/sh
     2 
     3 # 1.声明需要操作的服务器
     4 zkservs=("vt-serv1" "vt-serv2" "vt-serv3")
     5 hadoopServs=("vt-serv" "vt-serv1" "vt-serv2" "vt-serv3" "vt-serv4")
     6 namenode="vt-serv"
     7 
     8 # 2.循环执行启动Zookeeper命令
     9 echo -e "33[34m ===============启动Zookeeper===============33[0m"
    10 for zkserv in ${zkservs[@]}
    11 do
    12   ssh $zkserv 'zkServer.sh start'
    13 done
    14 
    15 # 3.检查Zookeeper状态
    16 echo -e "33[34m =============== 检查Zookeeper状态 ===============33[0m"
    17 for zkserv in ${zkservs[@]}
    18 do
    19   echo -e "33[34m =============== ZK-$zkserv 状态 ===============33[0m"
    20   ssh $zkserv 'zkServer.sh status'
    21 done
    22 
    23 # 4.启动start-dfs.sh
    24 echo -e "33[34m =============== 启动Hadoop-HA ===============33[0m"
    25 ssh $namenode 'start-dfs.sh'
    26 
    27 # 5.检查HDFS是否启动成功
    28 echo -e "33[34m =============== 检查Hadoop状态 ===============33[0m"
    29 for hdserv in ${hadoopServs[@]}
    30 do
    31   echo -e "===============Hadoop-$hdserv 进程 ==============="
    32   ssh $hdserv 'jps'
    33 done
    34 # 6.Hadoop-HA集群启动完成
    35 echo -e "33[34m =============== Hadoop-HA集群启动完成 ===============33[0m"
  • 相关阅读:
    GitLab 介绍
    git 标签
    git 分支
    git 仓库 撤销提交 git reset and 查看本地历史操作 git reflog
    git 仓库 回退功能 git checkout
    python 并发编程 多进程 练习题
    git 命令 查看历史提交 git log
    git 命令 git diff 查看 Git 区域文件的具体改动
    POJ 2608
    POJ 2610
  • 原文地址:https://www.cnblogs.com/mrfo/p/10277210.html
Copyright © 2011-2022 走看看