hadoop集群下几个好用的脚本工具
远程复制同步脚本
1.通过scp直接拷贝
一般Linux系统之间复制同步文件,或者文件夹使用的是scp,基本语法如下:
scp -r sourceFile username@host:destpath
- 或者在有ssh免密登录的情况下可以使用如下命令
scp -r sourceFile host:$PWD
2. 通过rsync来实现增量拷贝
rsync 远程同步工具,rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。
(1) 基本语法
rsync -av sourceFile username@host:destPath
选项参数说明
选项 | 功能 |
---|---|
-a | 归档拷贝 |
-v | 显示复制过程 |
例如hadoop01执行以下命令同步zk安装包 |
rsync -av /bigdata/soft/apache-zookeeper-3.6.2-bin.tar.gz hadoop02:/bigdata/soft/
3. 通过rsync来封装分发脚本
我们可以通过rsync这个命令工具来实现脚本的分发,可以增量的将文件分发到我们所有其他的机器上面去
(1)需求:循环复制文件到所有节点的相同目录下
(2)需求分析:
(a)rsync命令原始拷贝:
rsync -av /bigdata/soft hadoop@hadoop02:/bigdata/soft
(b)期望脚本使用方式:
xsync要同步的文件名称
(c)说明:在/home/hadoop/bin这个目录下存放的脚本,hadoop用户可以在系统任何地方直接执行。
(3)脚本实现
三台机器执行以下命令安装rsync工具
sudo yum -y install rsync
(a)在/home/hadoop目录下创建bin目录,并在bin目录下xsync创建文件,文件内容如下:
[hadoop@hadoop01 ~]$ cd ~
[hadoop@hadoop01 ~]$ mkdir bin
[hadoop@hadoop01 ~]$ cd /home/hadoop/bin
[hadoop@hadoop01 bin]$ touch xsync
[hadoop@hadoop01 bin]$ vim xsync
在该文件中编写如下代码
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if ((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo $fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo $pdir
#4 获取当前用户名称
user=`whoami`
#5 循环
for((host=1; host<4; host++)); do
echo ------------------- hadoop0$host --------------
rsync -av $pdir/$fname $user@hadoop0$host:$pdir
done
(b)修改脚本 xsync 具有执行权限
[hadoop@hadoop01 bin]$ cd ~/bin/
[hadoop@hadoop01 bin]$ chmod 777 xsync
(c)调用脚本形式:xsync 文件名称
[hadoop@hadoop01 bin]$ xsync /home/hadoop/bin/
注意:如果将xsync放到/home/hadoop/bin目录下仍然不能实现全局使用,可以将xsync移动到/usr/local/bin目录下
一键启动hadoop集群的脚本
- 为了便于一键启动hadoop集群,我们可以编写shell脚本
- 在主节点hadoop01服务器的/home/hadoop/bin目录下创建脚本
[hadoop@hadoop01 bin]$ cd /home/hadoop/bin/
[hadoop@hadoop01 bin]$ vi hadoop.sh
- 内容如下
#!/bin/bash
case $1 in
"start" ){
source /etc/profile;
/bigdata/install/hadoop-3.1.4/sbin/start-dfs.sh
/bigdata/install/hadoop-3.1.4/sbin/start-yarn.sh
#/bigdata/install/hadoop-3.1.4/sbin/mr-jobhistory-daemon.sh start historyserver
/bigdata/install/hadoop-3.1.4/bin/mapred --daemon start historyserver
};;
"stop"){
/bigdata/install/hadoop-3.1.4/sbin/stop-dfs.sh
/bigdata/install/hadoop-3.1.4/sbin/stop-yarn.sh
#/bigdata/install/hadoop-3.1.4/sbin/mr-jobhistory-daemon.sh stop historyserver
/bigdata/install/hadoop-3.1.4/bin/mapred --daemon stop historyserver
};;
esac
- 修改脚本权限
[hadoop@hadoop01 bin]$ chmod 777 hadoop.sh
[hadoop@hadoop01 bin]$ ./hadoop.sh start # 启动hadoop集群
[hadoop@hadoop01 bin]$ ./hadoop.sh stop # 停止hadoop集群
所有机器查看进程脚本
- 我们也可以通过jps在每台机器上面查看进程名称,为了方便我们以后查看进程,我们可以通过脚本一键查看所有机器的进程
- 在主节点hadoop01服务器的/home/hadoop/bin目录下创建文件xcall
[hadoop@hadoop01 bin]$ cd ~/bin/
[hadoop@hadoop01 bin]$ vi xcall
- 添加以下内容
#!/bin/bash
params=$@
for (( i=1 ; i <= 3 ; i = $i + 1 )) ; do
echo ============= hadoop0$i $params =============
ssh hadoop0$i "source /etc/profile;$params"
done
- 然后一键查看进程并分发该脚本
chmod 777 /home/hadoop/bin/xcall
xsync /home/hadoop/bin/
- 各节点应该启动的hadoop进程如下图
xcall jps