编写xcall.sh脚本,方便在集群中的每个节点上面执行相同命令
linux参数介绍:
$? //访问上次命令执行结果
$# //参数个数
$@ //提取所有参数
$1 //提取第几个参数
$0 //脚本本身
首先通过echo $PATH查看命令搜索路径
echo $PATH
然后登陆到/usr/local/bin/目录下面,创建.hosts文件
随后编写核心脚本:
#!/bin/bash#遍历集群列表所有机器
for host in 'cat /usr/local/bin/.hosts'
do
tput setaf 2
echo ====== $host ======
tput setaf 7
#免密码登录到响应机器,执行命令.
ssh $host "source /etc/profile;$@"
done
将该脚本的权限修改为777:
chmod 777 xcall.sh
查看每个节点进程:
xcall .sh jps
安装rsync命令(支持软连接拷贝)
1、scp命令和rsync命令对比
1、scp 不支持软连接拷贝
2、rsync 性能高于scp,支持软连接拷贝。centos7没有内置,需要单独安装,进行文件比对,文件相同的时候不进行覆盖,但是scp是直接覆盖。
2、安装scp命令
我们先查看rsync命令是否在远程仓库存在:
which rsync
yum search rsync
3、通过xcall.sh命令在所有节点上面安装rsync命令
xcall.sh "yum install -y rsync.x86_64"
4、安装完毕检查
xcall.sh "which rsync"
5、远程拷贝样例
我们将page01下面的一个文件拷贝到page02:
-ls:软连接+递归的意思
rsync -lr tmp1 root@page02:/usr/local/zmy_project/
6、编写xsync.sh(为了从主节点向外分发软件用的脚本)
我们在/usr/local/bin路径下编写xsync.sh脚本,并将脚本的权限改为777:
#!/bin/bash
#先获取同步文件或者文件夹的名字
f=$1
#文件或者文件夹的名字
filename='dirname $f'
#获取路径的名字
dirname='dirname $f'
cd -P $dirname
path='pwd'
who='whoami'
#同步的时候不算自己
for host in 'sed -n '2,$p' /usr/local/bin/.hosts';
do
tput setaf 2
echo ====== $host ======
tput setaf 7
#-ls:软连接+递归的意思
rsync -lr $f $who@$host:$path
done
如果目标目录不存在,rsync命令会创建目录
当启动集群之后,发现NameNode主节点为启动解决方案?
解决方案:
1、停掉Hadoop集群
mr-jobhistory-daemon.sh stop historyserverstop-all.sh
2、删除所有节点的Hadoop临时目录
rm -rf /usr/local/software/hadoop/tmp3、删除hadoopde的所有日志文件
rm -rf /usr/local/software/hadoop/logs
4、重新格式化系统(记住这个步骤)
hadoop namenode -format
5、重启集群
start-all.sh
mr-jobhistory-daemon.sh start historyserver
虚拟机启动各种问题,任务管理器无法关闭vmware-vmx.exe 且无法删除虚拟机对应文件?