一键启动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 "启动这个脚本你想干什么:\n\t1).启动Hadoop\n\t2).关闭hadoop\n\t3).重启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 "我承认,如果你看到这个信息,不是脚本错误,\n就是发生了他妈的我也不懂的什么错误!" exit 1 fi } # NameNode已经启动的情况下的处理 nameNodeAlreadyStart() { stopNameNode=0 while [ ${stopNameNode} -eq 0 ] do echo "" result=$(getPIDOfNameNode) echo "NameNode已经启动,进程号是:${result},是否关掉?" echo -e "\t1).关掉NameNOde并重启。\n\t2).不管,继续启动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已经启动,请问这种情况该怎么办?:\n\t1).重启DataNode。\n\t2).不重启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 "\033[40;35mNameNode不知道什么原因,已经关闭。请注意检查原因!!!\033[40;35m" echo -e "\033[40;37m \033[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 "\033[40;35mDataNode不知道什么原因,已经关闭。请注意检查原因!!!\033[40;35m" echo -e "\033[40;37m \033[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