myhadoop.sh
代码
if [ $
then
echo "No Args Input..."
exit ;
fi
case $1 in
"start")
echo " =================== 启动 hadoop集群 ==================="
echo " --------------- 启动 hdfs ---------------"
ssh node01 "/usr/local/src/hadoop/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"
ssh node01 "/usr/local/src/hadoop/sbin/start-yarn.sh"
echo " --------------- 启动 historyserver ---------------"
ssh node01 "/usr/local/src/hadoop/bin/mapred --daemon start historyserver"
;;
"stop")
echo " =================== 关闭 hadoop集群 ==================="
echo " --------------- 关闭 historyserver ---------------"
ssh node01 "/usr/local/src/hadoop/bin/mapred --daemon stop historyserver"
echo " --------------- 关闭 yarn ---------------"
ssh node01 "/usr/local/src/hadoop/sbin/stop-yarn.sh"
echo " --------------- 关闭 hdfs ---------------"
ssh node01 "/usr/local/src/hadoop/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
解释
- #!/bin/bash:这是脚本文件的 Shebang,指定了脚本要使用的解释器。在这里,使用的是 Bash 解释器。
- if [ $# -lt 1 ]:这是一个条件语句,用于检查用户是否提供了参数。$# 表示参数的数量,-lt 是一个比较运算符,表示小于。所以这行代码的意思是,如果提供的参数数量小于 1,则执行下面的代码块。
- echo “No Args Input…”:如果没有提供参数,则输出 “No Args Input…”。
- exit ;:这个命令用于退出脚本。
- case $1 in:这是一个 case 语句,用于根据参数的不同值执行不同的代码块。$1 是用户提供的第一个参数。
- “start”):这是 case 语句中的一个选项,表示当用户提供的第一个参数是 “start” 时,执行下面的代码块。
- echo " =================== 启动 hadoop集群 ===================":输出启动 Hadoop 集群的提示信息。
- ssh node01 “/usr/local/src/hadoop/sbin/start-dfs.sh”:通过 SSH 连接到名为 “node01” 的主机,并执行指定的命令 /usr/local/src/hadoop/sbin/start-dfs.sh,用于启动
HDFS。 - ssh node01 “/usr/local/src/hadoop/sbin/start-yarn.sh”:通过 SSH 连接到 “node01” 主机,并执行指定的命令 /usr/local/src/hadoop/sbin/start-yarn.sh,用于启动
YARN。 - ssh node01 “/usr/local/src/hadoop/bin/mapred --daemon start historyserver”:通过 SSH 连接到 “node01” 主机,并执行指定的命令
/usr/local/src/hadoop/bin/mapred --daemon start historyserver,用于启动
MapReduce HistoryServer。 - “stop”):这是 case 语句中的另一个选项,表示当用户提供的第一个参数是 “stop” 时,执行下面的代码块。
- echo " =================== 关闭 hadoop集群 ===================":输出关闭 Hadoop 集群的提示信息。
- ssh node01 “/usr/local/src/hadoop/bin/mapred --daemon stop historyserver”:通过 SSH 连接到 “node01” 主机,并执行指定的命令
/usr/local/src/hadoop/bin/mapred --daemon stop historyserver,用于关闭
MapReduce HistoryServer。 - ssh node01 “/usr/local/src/hadoop/sbin/stop-yarn.sh”:通过 SSH 连接到 “node01” 主机,并执行指定的命令 /usr/local/src/hadoop/sbin/stop-yarn.sh,用于关闭
YARN。 - ssh node01 “/usr/local/src/hadoop/sbin/stop-dfs.sh”:通过 SSH 连接到 “node01” 主机,并执行指定的命令 /usr/local/src/hadoop/sbin/stop-dfs.sh,用于关闭 HDFS。
- *):这是 case 语句中的一个通配符,表示如果用户提供的第一个参数不是 “start” 或 “stop”,则执行下面的代码块。
- echo “Input Args Error…”:输出 “Input Args Error…”,表示输入的参数错误。 整个脚本的作用是根据用户提供的参数来启动或关闭 Hadoop 集群,并通过 SSH 在远程主机上执行相应的命令。
xsync
代码
if [ $
then
echo Not Enough Arguement!
exit;
fi
for host in node01 node02 node03
do
echo ==================== $host ====================
for file in $@
do
if [ -e $file ]
then
pdir=$(cd -P $(dirname $file); pwd)
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
解释
- #!/bin/bash:这是脚本文件的 Shebang,指定了脚本要使用的解释器。在这里,使用的是 Bash 解释器。
- if [ $# -lt 1 ]:这是一个条件语句,用于检查用户是否提供了参数。$# 表示参数的数量,-lt 是一个比较运算符,表示小于。所以这行代码的意思是,如果提供的参数数量小于 1,则执行下面的代码块。
- echo Not Enough Arguement!:如果没有提供参数,则输出 “Not Enough Arguement!”。
- exit;:这个命令用于退出脚本。
- for host in node01 node02 node03:这是一个循环语句,用于遍历集群中所有的机器。node01 node02 node03 是被遍历的主机名。
- echo ==================== $host ====================:在循环中输出当前主机的名称。
- for file in
@
:这是一个嵌套的循环语句,用于遍历脚本执行时传入的所有文件。
@:这是一个嵌套的循环语句,用于遍历脚本执行时传入的所有文件。
@:这是一个嵌套的循环语句,用于遍历脚本执行时传入的所有文件。@ 是一个特殊的 Bash 变量,用于获取脚本或函数的所有参数。它表示所有传递给脚本或函数的参数列表。在脚本中,$@
表示所有的位置参数,即在执行脚本时提供的所有参数。这些参数可以是文件名、目录名、选项等等。 - if [ -e $file ]:这是一个条件语句,用于检查文件是否存在。-e 表示文件存在。
- pdir=$(cd -P $(dirname $file); pwd):这一行命令用于获取文件的父目录,并将其赋值给变量 pdir。dirname 命令用于获取文件所在的目录,cd -P 用于规范化路径,pwd 用于获取当前工作目录的绝对路径。
- fname=$(basename $file):这一行命令用于获取文件的名称,并将其赋值给变量 fname。basename 命令用于获取文件的基本名称(不包括路径部分)。
- ssh $host “mkdir -p $pdir”:这个命令通过 SSH 连接到目标主机,并在目标主机上创建与原始文件相同的父目录。mkdir -p 命令用于创建目录,-p
选项表示如果目录不存在,则创建目录及其父目录。 - rsync -av
p
d
i
r
/
pdir/
pdir/fname
h
o
s
t
:
host:
host:pdir:这个命令使用 rsync 工具将文件从本地主机复制到目标主机上的相同目录。-av 选项表示以归档模式复制文件,并且显示详细的进度和状态信息。
- else:如果文件不存在,则执行下面的代码块。
- echo $file does not exists!:输出文件不存在的提示信息。 整个脚本的作用是遍历指定的文件,并将每个文件分发到 Hadoop 集群中的所有机器上的相同目录。