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

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

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

    2.脚本的权限不低于700

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

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

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

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

 #!/bin/bash

 #######################################################
#### ####
####精简版的启动,停止,重启 ####
#### ####
####################################################### # hadoop的安装目录以及启动停止命令所在的文件路径
HADOOP_HOME=/bigData/softWare/hadoop
HADOOP_SBIN=${HADOOP_HOME}/sbin # 用于判断输入是否正确的正则
regex='^[ 1-3 ]$'
# 循环判断用户的输入
i=
while [ ${i} -eq ]
do
echo ""
echo -e "启动这个脚本你想干什么:\n\t1).启动Hadoop\n\t2).关闭hadoop\n\t3).重启hadoop"
read -p "输入你的选择:[1,2,3] > " choose
echo ""
if [[ ${choose} =~ ${regex} ]];then
if [ ${choose} -eq ];then
${HADOOP_SBIN}/hadoop-daemon.sh start namenode
${HADOOP_SBIN}/hadoop-daemon.sh start datanode
echo "杨华彬威武!!!"
echo ""
exit
elif [ ${choose} -eq ];then
${HADOOP_SBIN}/hadoop-daemon.sh stop datanode
${HADOOP_SBIN}/hadoop-daemon.sh stop namenode
echo "杨华彬威武!!!"
echo ""
exit
else
${HADOOP_SBIN}/hadoop-daemon.sh stop datanode
${HADOOP_SBIN}/hadoop-daemon.sh stop namenode
${HADOOP_SBIN}/hadoop-daemon.sh start namenode
${HADOOP_SBIN}/hadoop-daemon.sh start datanode
echo "杨华彬威武!!!"
echo ""
exit
fi
#else
# echo "你输入的字符非法,请重新输入!"
fi
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 >>/dev/null >>"&1"
if [ $? -eq ]
then
echo ""
resultOfDataNode=$(getPIDOfNameNode)
echo "NameNode启动成功,进程号是:$resultOfDataNode"
else
echo ""
echo "NameNode启动失败,请检查原因!"
exit
fi
} #启动datanode,并将原有的信息干掉
startDataNode() {
resultOfDataNode=$(getPIDOfDataNode) # 判断DataNode是否已经启动,启示这一步是多于的,前面已经验证过了。
if [ "${resultOfDataNode}" == "" ]
then
echo ""
echo "正在启动DataNode。"
${HADOOP_SBIN}/hadoop-daemon.sh start datanode >>/dev/null >>'&1'
if [ $? -eq ]
then
echo ""
echo "DataNode启动成功!"
echo ""
echo "情况汇报:"
echo "NameNode启动成功,进程号是:$(getPIDOfNameNode)"
echo "DataNode启动成功,进程号是:$(getPIDOfDataNode)"
echo ""
exit
else
echo ""
echo "DataNode没有启动,请检查原因!!!"
exit
fi
else
echo ""
echo -e "我承认,如果你看到这个信息,不是脚本错误,\n就是发生了他妈的我也不懂的什么错误!"
exit
fi
} # NameNode已经启动的情况下的处理
nameNodeAlreadyStart() {
stopNameNode=
while [ ${stopNameNode} -eq ]
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 ]
then
stopNameNode
echo ""
echo "正在启动NameNode"
${HADOOP_SBIN}/hadoop-daemon.sh start namenode >>/dev/null >>'&1'
if [ $? -eq ]
then
result=$(getPIDOfNameNode)
echo ""
echo "NameNode节点启动成功,进程号是:$result"
break
else
echo ""
echo "NameNode启动失败,请检查原因!!!"
exit
fi
else
dataNodeIfStart
fi
else
echo ""
echo "您输入的数字有误,请重新输入!!!"
fi
done
} # DataNode已经启动的情况的处理。
dataNodeAlreadyStart(){
i=
while [ $i -eq ]
do
echo ""
echo -e "DataNode已经启动,请问这种情况该怎么办?:\n\t1).重启DataNode。\n\t2).不重启DataNode"
echo ""
read -p "请输入您的选择:[1/2] > " a
if [[ ${a} =~ ${regex} ]]
then
if [ ${a} -eq ]
then
stopDataNode
startDataNode
exit
else
echo ""
echo "情况汇报:"
echo "NameNode启动成功,进程号是:$(getPIDOfNameNode)"
echo "DataNode启动成功,进程号是:$(getPIDOfDataNode)"
echo ""
exit
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
else
echo "开始停止NameNode"
${HADOOP_SBIN}/hadoop-daemon.sh stop namenode >>/dev/null >>'&1'
if [ $? -eq ]
then
echo ""
echo "NameNode关闭成功!"
echo ""
echo "DataNode和NameNode关闭成功!"
echo ""
exit
else
echo ""
echo "对不起NameNode没有关掉,进程号是:$(getPIDOfNameNode)"
echo "请检查NameNode无法关闭的原因!!!"
echo ""
exit
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 >>/dev/null >>'&1'
if [ $? -eq ]
then
echo ""
echo "DataNode关闭成功!"
else
echo ""
echo "DataNode关闭失败!!!"
echo "请检查失败原因!!!"
exit
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= while [ $i -eq ]
do
# 输出欢迎语句。
echo ""
echo "请问您是要启动hadoop还是要关闭
.)启动hadoop
.)关闭hadoop"
echo ""
read -p "请输入您的选择:[1,2]> " check1
if [[ ${check1} =~ ${regex} ]] # 这一行用来判断输入的是否是1和2这两个数字。
then
if [ ${check1} -eq ] # 如果输入的是启动命令
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
fi
fi
else # 输入的不符合规范
echo ""
echo "输入非法,请重新输入!"
#welcome
fi
done

一键启动NameNode和DataNode--shell脚本的更多相关文章

  1. 一个简单的Linux启动jar包的shell脚本

    背景: 项目设备端需要运行jar包程序与服务端进行socket连接并发送数据,每次启动进程时,都需要在Linux终端输入启动jar包的命令,比较繁琐,随之尝试将启动jar包的命令写入shell脚本文件 ...

  2. Docker - 避免启动container后运行shell脚本执行完成后docker退出container

    问题 最近在使用 Dockerfile 启动容器,发现使用Dockerfile调用容器里面的shell,当shell执行完成以后,docker会退出容器. 分析 Docker 在执行shell的时候, ...

  3. Linux Shell 脚本学习第一天: 使用grep 命令,lsusb, ps -ef, 实现树莓派(Debian OS)时检测到依赖的USB设备启动后,启动终端自动执行shell脚本

    1.应用背景: 无人监测的设备,常需要设置应用程序开机启动,程序启动前需要保证调用的设备先启动,运行环境先启动. 2.test.sh部分源码 #!/bin/sh #查看桌面是否启动 while tru ...

  4. 一键启动frida server的cmd脚本

    和以前写过的在pc直接操作的手机端的sqlite的脚本类似,需要用到重定向的命令 frida-server_helper.bat su /data/local/tmp/frida-server fri ...

  5. 在idea中编写自动拉取、编译、启动springboot项目的shell脚本

    idea 开发环境搭建 idea中安装shell开发插件 服务器具备的条件 已经安装 lsof(用于检查端口占用) 已安装 git 安装 maven 有 java 环境 背景 代码提交到仓库后,需要在 ...

  6. 一个客户端一键安装环境和服务的shell脚本

    #!/bin/bash basepath=$(cd `dirname $0`; pwd)SHELL_DIR="${basepath}/shell"PACKAGE_DIR=" ...

  7. 启动jar包的shell脚本

    在jar包的同级目录新建文件例如:app_jar.sh 然后填写如下内容: #!/bin/bash #source /etc/profile # Auth:Liucx # Please change ...

  8. myaliyun ECS 启动内外穿透工具shell脚本

    #!/bin/bash tbp=/usr/local/ngrok cmd=$1 if [[ -z $cmd ]];then echo "err!usage{sh $0 1|0 to star ...

  9. SpringBoot2.x应用启动、关闭shell脚本

    本篇主要说明以下内容: 1.SpringBoot2.x应用启动.关闭的shell脚本 1 启动脚本 直接放到同jar包同一个目录下,如下: #!/usr/bin/env bash APPLICATIO ...

随机推荐

  1. vs中使用beyondcompare比较

    开启 Visual Studio  的 [工具] /[选项] / [源代码管理] /[Visual Studio Team Foundation],并开启「配置用户工具」 如下图单击「添加」按钮 接着 ...

  2. Unity Game窗口中还原Scene窗口摄像机操作 强化版

    之前写的那个版本看来真的是不行啊.最近研究了一下官方第一人称脚本,人家的平滑过渡真的是没得说.借鉴了一下,写出来了一个新的比较完美的控制. 之前我们的操作是通过鼠标输入的开始坐标和转动坐标.其实官方有 ...

  3. bzoj 4326: NOIP2015 运输计划

    4326: NOIP2015 运输计划 Time Limit: 30 Sec Memory Limit: 128 MB Description 公元 2044 年,人类进入了宇宙纪元.L 国有 n 个 ...

  4. iOS - drawRect致内存增加

    GPU VS CPU iOS - 软件绘图 自定义"斑马线背景"View,重写drawRect绘制斑马线: ⚠️ 仅仅添加这一个View,内存就比正常增加了3-5M之间. 测试源代 ...

  5. solr服务(搜索服务)

    1   Solr实现全文搜索 1.1   Solr是什么? Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器.Solr提供了比Lucene更为丰富的 ...

  6. Linux查看tomcat 控制台输出命令

    用远程登陆客户端登陆linux进入tomcat/logs/文件夹下键入指令:tail -f catalina.out

  7. [Java] ApplicationContext 辅助类

    我们经常需要获取各种 bean , 需要用到 context. 下面的类可以方便的使用 context , 获取 bean 等. import java.io.File; import java.ut ...

  8. html5中画布和SVG的比较

    SVG是基于XML的图形语言,在DOM解析中其每个元素都是可以用的,这样就可以为SCG元素附加JavaScript事件处理器,实现更加丰富的效果. 在SVG中,每个被绘制的图形均被视为对象,如果SVG ...

  9. Bubble Cup 8 finals F. Bulbo (575F)

    题意: 给定初始位置,查询n次区间,每次查询前可以花费移动距离的代价来移动, 查询时需要花费当前位置到区间内最近的点的距离,求最小代价. 1<=n<=5000,1<=所有位置< ...

  10. REDHAT一总复习1 vim编辑器的使用 删除所有者列 删除指定行

    将文件/home/student/vimfile.txt 复制到server 上的/home/student/longlisting.txt . 根据下列要求,使用vim编辑器更改 /home/stu ...