zoukankan      html  css  js  c++  java
  • HBase集群新节点安装配置工具(Shell 脚本)

    在之前两篇随笔中,主要介绍了在一个分布式集群下配置Hadoop,Zookeeper以及HBase 的流程。在实际情况中,配置HBase集群时,需要配置的节点太多,并且配置的内容基本相同。为了避免重复繁琐的配置工作,可以使用Shell脚本工具来自动完成这些流程化的工作,节省时间并且减少人工配置错误的情况。

    本文介绍的是在需要批量添加集群节点并配置HBase的情况下,可以使用到的自动化配置工具,主要是几个Shell脚本来完成新节点的加入以及集群启动和停止。当然其中不可避免的还是需要人工参与部分配置工作,但是脚本工具基本上可以让配置人员完全解放于重复而费时的配置工作了。

    所有软硬件平台均与《Hadoop平台搭建(VMware、CentOS)》相同,且所有操作以root用户执行

    =====================================================================================

    一、创建新的节点(虚拟主机)

      新的虚拟主机可以用iso文件自行安装,但是为了提高效率,我们使用VMware的克隆虚拟机功能,需要手动安装一台模板虚拟主机,然后不断克隆新的虚拟主机。

      下面以Slave8为例,从Slave8克隆出一台Slave9。

      需要说明的是,在模板主机的系统安装完成之后、被克隆之前我对其进行了以下操作以提高效率:

      ①修改个人使用习惯

        Ctrl+Alt+T to open a Terminal

        Terminal font --> Courier 10 Pitch Bold 13

        Terminal Text Color --> #000000

        Terminal Background Color --> #BBBBBB

        File Management Preferences Behavior --> Always open in browser windows

      ②安装VMTools工具

      ③永久关闭防火墙

        chkconfig iptables off

      ④安装配置JDK

        与之前相同

      ⑤关机

      下面开始克隆新的虚拟主机:

      

      

      

      

      

      

      

      克隆完成,开启Slave8,接下来将对Slave8进行配置,Slave9作为后续新节点的模板。

    二、配置新节点(于新节点)

      0、查看新节点IP信息

        

        新分配IP地址为192.168.222.142,目前的网络主机名仍是最初的模板Slave5的主机名,需要修改。

      1、修改主机网络名称

        由于Slave8是从之前的模板克隆而来,完整克隆操作会分配新的IP地址,但不会修改网络主机名,因此需要先修改主机名为Slave8.Hadoop

        vi /etc/sysconfig/network

        

        将第二行的HOSTNAME修改为Slave8.Hadoop,可以看到节点目前的主机名仍为Slave5,需要随后重启才会生效

      2、配置SSH无密码通信

        ①开启SSH登录

          vi /etc/ssh/sshd_config

          找到并去掉以下两行的注释

          #RSAAuthentication yes

          #PubkeyAuthentication yes

        ②生成公钥RSA key

          ssh-keygen -t rsa  //不输入密码,一直回车

      3、重启以使配置生效

          reboot

    三、配置新节点(于Master主机)

      在Master主机上我建立了一个clusters文件用于存储目前的集群节点信息

      需要注意的是,在下面的所有脚本中对clusters文件的引用都写成了绝对路径/home/myscript/clusters

      在加入Slave8之前clusters文件如下所示:

      

      建立自动配置脚本configure.sh

    #!/bin/sh
    int=0
    if [ $# -ne 1 ]
    then
        echo "Wrong Parameter."
    else
        #0.Forework, get current cluster information
        while read IP ID
        do
            array[$int]=$IP
            let "int++"
        done</home/myscript/clusters
        
        #1.update hosts file
        echo $1' Slave'$int'.Hadoop' >> /etc/hosts
        for k in ${array[@]}
        do
            scp /etc/hosts root@$k:/etc
        done
        scp /etc/hosts root@$1:/etc
    
        #2.Configure SSH
        echo "adding RSA key from $1 to localhost."
        ssh root@$1 'cat ~/.ssh/id_rsa.pub>>/root/.ssh/authorized_keys'
        echo "copying to cluster members..."
        for i in ${array[@]}
        do
            scp /root/.ssh/authorized_keys root@$i:/root/.ssh
            scp /root/.ssh/known_hosts root@$i:/root/.ssh
        done
        scp /root/.ssh/authorized_keys root@$1:/root/.ssh
        scp /root/.ssh/known_hosts root@$1:/root/.ssh
    
        #3.update hadoop slaves
        echo $1 >> ${HADOOP_HOME}/etc/hadoop/slaves
        for j in ${array[@]}
        do
            scp ${HADOOP_HOME}/etc/hadoop/slaves root@$j:${HADOOP_HOME}/etc/hadoop
            scp /home/hadoop/hadoop-2.7.3/etc/hadoop/slaves root@$j:/home/hadoop/hadoop-2.7.3/etc/hadoop
        done
        scp -r /home/hadoop root@$1:/home
    
        #4.update zookeeper servers and myid info
        echo "server."$int"="$1":2888:3888" >> ${ZOOKEEPER_HOME}/conf/zoo.cfg
        for l in ${array[@]}
        do
            scp ${ZOOKEEPER_HOME}/conf/zoo.cfg root@$l:${ZOOKEEPER_HOME}/conf
        done
        scp -r /home/zookeeper root@$1:/home
        ssh root@$1 "echo "$int" > /home/zookeeper/zookeeper-3.4.6/data/myid"
        
        #5.update hbase
        sed -i -r 's/<value'>'(Master.*Hadoop.*)</<value'>'1,'"$1"'</g' /home/hbase/hbase-1.2.4/conf/hbase-site.xml
        echo $1 >> /home/hbase/hbase-1.2.4/conf/regionservers
        for m in ${array[@]}
        do
            scp -r /home/hbase/hbase-1.2.4/conf root@$m:/home/hbase/hbase-1.2.4/
        done
        scp -r /home/hbase root@$1:/home
        
        #6.update environment variables on new member
        scp /etc/profile root@$1:/etc/profile
        ssh root@$1 'source /etc/profile'
    
        #7.update cluster info
        echo $1' Slave'$int'.Hadoop' >> /home/myscript/clusters
    fi

      执行脚本,需要加上新节点的IP作为唯一参数(执行之前确认clusters文件路径正确):

        ./configure.sh 192.168.222.142

      执行过程中需要输入确认反馈'yes'以及新节点的root密码三次

    四、配置新节点(于新节点)

      之所以有这部分的操作,是因为有一些远程命令好像并不能实际生效,在脚本的第6部分我设置了新节点更新环境变量的远程指令

      ssh root@<new_member_ip> 'source /etc/profile'

      但是此时用'env'指令查看新节点的环境变量发现并没有更新,因此需要手动在新节点上执行更新操作

      source /etc/profile

      再次'env'查看,发现环境变量HADOOP_HOME、ZOOKEEPER_HOME等已更新

    五、启动集群(于Master主机)

      在执行之前需确认集群并没有在运行

      1、start_hadoop.sh

    #!/bin/sh
    ${HADOOP_HOME}/sbin/start-all.sh

      2、start_zookeeper.sh

    #!/bin/sh
    int=0
    #read current cluster members
    while read IP ID
    do
        array[$int]=$IP
        let "int++"
    done</home/myscript/clusters
    
    #start zookeeper server on cluster
    for i in ${array[@]}
    do
        echo "starting zookeeper on "$i
        ssh root@$i ${ZOOKEEPER_HOME}'/bin/zkServer.sh start'
    done

      3、start_hbase.sh

    #!/bin/sh
    /home/hbase/hbase-1.2.4/bin/start-hbase.sh

       4、start_all.sh

    #!/bin/sh
    echo "===============Start All==============="
    echo "1.Starting Hadoop"
    ./start_hadoop.sh
    echo "------------------------------------------------------"
    echo "2.Starting Zookeeper"
    ./start_zookeeper_new.sh
    echo "------------------------------------------------------"
    echo "3.Starting HBase"
    ./start_hbase.sh
    
    echo "===============DONE==============="

       5、执行start_all.sh(执行之前确认脚本路径及clusters文件路径正确)

        ./start_all.sh

       6、启动成功

      http://192.168.222.134:50070/

      

      http://192.168.222.134:16010/

      

    六、关闭集群(于Master主机)

      建立脚本stop_all.sh

    #!/bin/sh
    int=0
    echo "===============Stop All==============="
    
        echo "1.stopping hbase"
        /home/hbase/hbase-1.2.4/bin/stop-hbase.sh
        
        echo "---------------------------------------"
    
        echo "2.stopping zookeeper"
        while read IP ID
        do
            array[$int]=$IP
            let "int++"
        done < /home/myscript/clusters
        for i in ${array[@]}
        do
            echo "stop zookeeper on "$i
            ssh root@$i ${ZOOKEEPER_HOME}'/bin/zkServer.sh stop'
        done
        echo "---------------------------------------"
    
        echo "3.stopping hadoop"
        ${HADOOP_HOME}/sbin/stop-all.sh
    
    echo "===============Done==============="

       执行脚本(注意clusters文件路径)

        ./stop_all.sh

    七、存在问题

      1、路径问题,可以将clusters的路径修改一下解决代码内部修改的问题

      2、IP和ID的问题,在一些配置文件如hbase-site.xml中集群原本是以网络主机名Slave.Hadoop来设置的,但是在脚本里面我增加新主机时直接用了IP地址,虽然并不影响,但是不够完善

      3、集群启动之前可以再写一个检查脚本,比如确认集群通信正常、防火墙关闭等。

      4、现在的方案是将Master上面的软件文件夹整体复制到新节点上,但是其实可以用官方压缩包的方式解压来安装软件,再把配置文件覆盖掉以完成配置。这样可以节省一些传输的代价,因为有一些运行后产生的日志文件等是不需要传到新节点上的。

  • 相关阅读:
    nginx学习编译安装(1)
    媒体查询
    web前端开发--超链接
    web前端开发--列表
    web前端开发--格式化文本与段落
    DIV与SPAN
    CSS基础
    表的创建
    数据库存储结构
    关系完整性约束
  • 原文地址:https://www.cnblogs.com/zmt0429/p/6612672.html
Copyright © 2011-2022 走看看