myhadoop.sh
代码
#!/bin/bashif[ $# -lt 1 ]
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
代码
#!/bin/bash#1. 判断参数个数if[ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器for host in node01 node02 node03
doecho ==================== $host ====================
#3. 遍历所有目录,挨个发送for file in $@
do#4 判断文件是否存在if[-e $file]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file);pwd)#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host"mkdir -p $pdir"
rsync -av $pdir/$fname$host:$pdirelseecho$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 集群中的所有机器上的相同目录。
本文转载自: https://blog.csdn.net/DylanGong/article/details/136778595
版权归原作者 DylanGong 所有, 如有侵权,请联系我们删除。
版权归原作者 DylanGong 所有, 如有侵权,请联系我们删除。