• 一键启动NameNode和DataNode--shell脚本


      使用shell脚本,一键启动hadoop中的NameNode和DataNode。分为普通版和装逼版。装逼版较普通版多了很多判断和信息提示,当然主要还是为了我练习shell脚本而写的。

      如果想实现复用,请注意:

        1.将HADOOP_HOME改为自己的hadoop安装路径。

        2.脚本的权限不低于700

      如果复用装逼版在满足上面的条件后,还需要注意

        1.properties和act.sh必须在同一个文件夹中

        2.确保该文件夹以及脚本的权限不低于700

    普通版一键启动/关闭/重启NameNode和DataNode

     1 #!/bin/bash
     2 
     3 #######################################################
     4 ####                                               ####
     5 ####精简版的启动,停止,重启                       ####
     6 ####                                               ####
     7 #######################################################
     8 
     9 # hadoop的安装目录以及启动停止命令所在的文件路径
    10 HADOOP_HOME=/bigData/softWare/hadoop
    11 HADOOP_SBIN=${HADOOP_HOME}/sbin
    12 
    13 # 用于判断输入是否正确的正则
    14 regex='^[ 1-3 ]$'
    15 # 循环判断用户的输入
    16 i=0
    17 while [ ${i} -eq 0 ]
    18 do
    19     echo ""
    20     echo -e "启动这个脚本你想干什么:
    	1).启动Hadoop
    	2).关闭hadoop
    	3).重启hadoop"
    21     read -p "输入你的选择:[1,2,3] > " choose
    22     echo ""
    23     if [[ ${choose} =~ ${regex} ]];then
    24         if [ ${choose} -eq 1 ];then
    25             ${HADOOP_SBIN}/hadoop-daemon.sh start namenode
    26             ${HADOOP_SBIN}/hadoop-daemon.sh start datanode
    27             echo "杨华彬威武!!!"
    28             echo ""
    29             exit 1
    30         elif [ ${choose} -eq 2 ];then
    31                 ${HADOOP_SBIN}/hadoop-daemon.sh stop datanode
    32                 ${HADOOP_SBIN}/hadoop-daemon.sh stop namenode
    33                 echo "杨华彬威武!!!"
    34                 echo ""
    35                 exit 1
    36         else
    37             ${HADOOP_SBIN}/hadoop-daemon.sh stop datanode
    38             ${HADOOP_SBIN}/hadoop-daemon.sh stop namenode
    39             ${HADOOP_SBIN}/hadoop-daemon.sh start namenode
    40             ${HADOOP_SBIN}/hadoop-daemon.sh start datanode
    41             echo "杨华彬威武!!!"
    42             echo ""
    43             exit 1
    44         fi
    45     #else
    46     #    echo "你输入的字符非法,请重新输入!"
    47     fi
    48 done

    装逼版一键启动/关闭/重启NameNode和DataNode

    properties脚本(用到的变量和函数)

    #!/bin/bash
    
    ############################################
    
    #本脚本主要用来给调用它的脚本传递参数,方法#
    
    ############################################
    
    #这个是启动NameNode和datanode所在的sbin目录,如果安装目录有改动请将以下值改为自己的安装目录的路径
    HADOOP_HOME=/bigData/softWare/hadoop
    HADOOP_SBIN=${HADOOP_HOME}/sbin
    
    # 这个是匹配用户输入的是否正确的正则变量
    regex='^[ 1-2 ]$'
    
    #启动NameNode,并将原有脚本输出的信息干掉
    startNameNode() {
        echo "开始启动NameNode"    
        ${HADOOP_SBIN}/hadoop-daemon.sh start namenode 1>>/dev/null 2>>"&1"
        if [ $? -eq 0 ]
        then
            echo ""
            resultOfDataNode=$(getPIDOfNameNode)
            echo "NameNode启动成功,进程号是:$resultOfDataNode"
        else
            echo ""
            echo "NameNode启动失败,请检查原因!"
            exit 1
        fi
    }
    
    #启动datanode,并将原有的信息干掉
    startDataNode() {
        resultOfDataNode=$(getPIDOfDataNode)  # 判断DataNode是否已经启动,启示这一步是多于的,前面已经验证过了。
        if [ "${resultOfDataNode}" == ""  ]
        then
            echo ""
            echo "正在启动DataNode。"
            ${HADOOP_SBIN}/hadoop-daemon.sh start datanode 1>>/dev/null 2>>'&1'
            if [ $? -eq 0 ]
            then 
                echo ""
                echo "DataNode启动成功!"
                echo ""
                echo "情况汇报:"
                echo "NameNode启动成功,进程号是:$(getPIDOfNameNode)"
                echo "DataNode启动成功,进程号是:$(getPIDOfDataNode)"
                echo ""
                exit 1
            else
                echo ""
                echo "DataNode没有启动,请检查原因!!!"
                exit 1
            fi
        else
            echo ""
            echo -e "我承认,如果你看到这个信息,不是脚本错误,
    就是发生了他妈的我也不懂的什么错误!"
            exit 1
        fi
    }
    
    # NameNode已经启动的情况下的处理
    nameNodeAlreadyStart() {
        stopNameNode=0
        while [ ${stopNameNode} -eq 0 ]
        do
            echo ""
            result=$(getPIDOfNameNode)
            echo "NameNode已经启动,进程号是:${result},是否关掉?"
            echo -e "	1).关掉NameNOde并重启。
    	2).不管,继续启动DataNode." 
            echo ""
            read -p "请输入您的选择:[1/2] > " ifStopNameNode
    
            if [[ ${ifStopNameNode} =~ ${regex} ]]
            then
                if [ ${ifStopNameNode} -eq 1  ]
                then
                    stopNameNode
                    echo ""
                    echo "正在启动NameNode"
                    ${HADOOP_SBIN}/hadoop-daemon.sh start namenode 1>>/dev/null 2>>'&1'
                    if [ $? -eq 0  ]
                    then 
                        result=$(getPIDOfNameNode)
                        echo ""
                        echo "NameNode节点启动成功,进程号是:$result"
                        break 
                    else
                        echo ""
                        echo "NameNode启动失败,请检查原因!!!"
                        exit 1
                    fi
                else
                    dataNodeIfStart
                fi
            else
                echo ""
                echo "您输入的数字有误,请重新输入!!!"
            fi
        done
    }
    
    # DataNode已经启动的情况的处理。
    dataNodeAlreadyStart(){
        i=0
        while [ $i -eq 0 ]
        do
            echo ""
            echo -e "DataNode已经启动,请问这种情况该怎么办?:
    	1).重启DataNode。
    	2).不重启DataNode"
            echo ""
            read -p "请输入您的选择:[1/2] > " a
            if [[ ${a} =~ ${regex} ]]
            then
                if [ ${a} -eq 1 ]
                then 
                    stopDataNode
                    startDataNode
                    exit 1
                else
                    echo ""
                    echo "情况汇报:"
                    echo "NameNode启动成功,进程号是:$(getPIDOfNameNode)"
                    echo "DataNode启动成功,进程号是:$(getPIDOfDataNode)"
                    echo ""
                    exit 1
                fi
            fi
        done
    }
    
    #关掉namenode,将信息干掉(完成)
    stopNameNode() {
        
        result=$(getPIDOfNameNode)
        
        if [ "${result}" == "" ]
        then
            echo ""
            echo -e "33[40;35mNameNode不知道什么原因,已经关闭。请注意检查原因!!!33[40;35m"
            echo -e "33[40;37m 33[40;37m"
            echo "NameNode和DataNode已经关闭!"
            echo ""
            exit 1
        else
            echo "开始停止NameNode"
            ${HADOOP_SBIN}/hadoop-daemon.sh stop namenode 1>>/dev/null 2>>'&1'
            if [ $? -eq 0 ]
            then
                echo ""
                echo "NameNode关闭成功!"
                echo ""
                echo "DataNode和NameNode关闭成功!"
                echo ""
                exit 1
            else
                echo ""
                echo "对不起NameNode没有关掉,进程号是:$(getPIDOfNameNode)"
                echo "请检查NameNode无法关闭的原因!!!"
                echo ""
                exit 1
            fi
            
        fi
        
    }
    
    # 关掉datanode,并将信息干掉。(完成)
    stopDataNode() {
        result=$(getPIDOfDataNode)
        if [ "${result}" == "" ]
        then
            echo ""
            echo -e "33[40;35mDataNode不知道什么原因,已经关闭。请注意检查原因!!!33[40;35m"
            echo -e "33[40;37m 33[40;37m"
            stopNameNode
        else
            echo ""
            echo "正在关闭DataNode"
            ${HADOOP_SBIN}/hadoop-daemon.sh stop datanode 1>>/dev/null 2>>'&1'
            if [ $? -eq 0 ]
            then
                echo ""
                echo "DataNode关闭成功!"
            else
                echo ""
                echo "DataNode关闭失败!!!"
                echo "请检查失败原因!!!"
                exit 1
            fi
        fi
        
    }
    
    # 判断DataNode是否启动
    dataNodeIfStart() {
    
        resultDataNode=$(getPIDOfDataNode)
        if [ "$resultDataNode" != ""  ] # 如果DataNode已经启动的话
        then
            dataNodeAlreadyStart
        else
            startDataNode
        fi
    }
    
    #获取NameNode的进程号(完成)
    getPIDOfNameNode() {
        PIDOfNameNode=`jps|grep NameNode|awk '{print $1}'`
        echo ${PIDOfNameNode}
    }
    
    #获取DataNode的进程号(完成)
    getPIDOfDataNode() {
        PIDOfDataNode=`jps|grep DataNode|awk '{print $1}'`
        echo ${PIDOfDataNode}
    }

    act.sh(脚本的运行)

    #!/bin/bash
    
    #######################################################
    
    ####启动和停止的脚本都在这个里面,本脚本指调用前面的###
    ####变量和方法。                                    ###
    
    #######################################################
    
    # 调用前面的properties文件,两个脚本必须放在同一个文件夹中,并分别又有执行权限
    source ./properties
    
    # 循环判断输入的数字是否合法,是否要执行
    
    i=0
    
    while [ $i -eq 0 ]
    do    
        # 输出欢迎语句。
        echo ""
        echo "请问您是要启动hadoop还是要关闭
        1.)启动hadoop
        2.)关闭hadoop"
        echo ""
        read -p "请输入您的选择:[1,2]> " check1
        if [[ ${check1} =~ ${regex}  ]]     # 这一行用来判断输入的是否是1和2这两个数字。
        then
            if [ ${check1} -eq 1 ]          # 如果输入的是启动命令
            then
                echo ""
                resultNameNode=$(getPIDOfNameNode)
                if [ "$resultNameNode" != ""  ]     # 如果NameNode已经启动的话
                then
                    nameNodeAlreadyStart
                    echo ""
                    dataNodeIfStart
                else                                # 如果DataNode没有启动的话
                    startNameNode
                    dataNodeIfStart
                fi
            else                            # 输入的是关闭hadoop的命令
                stopDataNode
                stopNameNode
                a=$(getPIDOfNameNode)
                b=$(getPIDOfDataNode)
                if [ "${a}" == "" ] && [ "${b}" == "" ]
                then 
                    echo ""
                    echo "NameNode和DataNode关闭成功!"
                    echo ""
                    exit 1
                fi
            fi
        else                            # 输入的不符合规范
            echo ""
            echo "输入非法,请重新输入!"
            #welcome
        fi
    done
  • 相关阅读:
    查询详细信息和删除记录
    软件开发过程中常用到的一些工具
    无服务器端的UDP群聊功能剖析(WCF版)
    vim插件使用
    C#中ConnectionStrings和AppSettings的区别
    《Effective C++》简明笔记上
    设计模式的一些所想所得
    对RESTful Web API的理解与设计思路
    js加载脚
    OSGi.NET 学习笔记 [模块可扩展支持][概念][实例]
  • 原文地址:https://www.cnblogs.com/yanghuabin/p/6102412.html
Copyright © 2020-2023  润新知