CentOS7安装与配置
硬件部分
进入VMware,新建虚拟机
——>自定义
——>下一步
——>下一步
这里我们先安装好硬件,随后安装操作系统,选择稍后安装操作系统
——>下一步
操作系统选择Linux
,版本选择CentOS 7
——>下一步
,将虚拟机命名为hadoop100
,作为我们最原始的虚拟机
在我的电脑中打开任务管理器查看CPU个数,根据自己电脑的配置为虚拟机分配处理器数量和每个处理器的内核数量(未来我们需要三台虚拟机和windows本身,所以这里加起来不要超过硬件资源的最高配置),点击下一步
,为虚拟机分配内存
网络模式选择NAT模式
,点击下一步
,I/O控制器类型
选择推荐的LSI Logic
,虚拟磁盘类型
选择默认的SCSI
,选择创建新版的虚拟机
为虚拟机分配50G的硬盘空间,并选择将虚拟磁盘拆分成多个文件
,选择物理磁盘文件存储的位置,完成虚拟机硬件配置。点击完成
。
软件部分(操作系统)
注意:要先查看自己电脑上虚拟机bios是否开启
在CentOS官网下载ISO映像
在hadoop100
虚拟机点击CD/DVD
——>使用ISO映像文件
,填入刚才下载好的映像文件地址——>确定
启动hadoop100
虚拟机,耐心等待安装
进行语言、日期时间的配置
软件选择可以选择最小安装
,也可以选择GNOME桌面
安装,最小安装没有图形化界面,学习阶段我们先安装桌面版
点击安装目标位置
,选择我要配置分区
——>完成
。点击+
号,添加新挂载点,我们先配置/boot
为1G
(刚启动虚拟机需要的资源);再添加一个swap
交换分区为4G
;还剩45G
挂载给根目录\
关闭KDUMP(内核崩溃转储机制),节约资源
选择系统
——>网络和主机名
,进行网络配置,将主机名修改为hadoop100
,并打开以太网连接
所有配置完成,点击开始安装
,在这个过程中我们可以设置root密码和创建用户
配置IP地址
有三个地方需要配置,hadoop100虚拟机,VMware,window系统
我们先来配置VMware,点击编辑
——>虚拟网络编辑器
再次选择VMnet8
,将子网IP改为192.168.10.0
,点击进入NAT设置
,将网关IP修改为192.168.10.2
再来配置Window网络
最后对hadoop100虚拟机进行网络配置
进入hadoop100虚拟机的终端,用root身份进行配置
su root
vim /etc/sysconfig/network-scripts/ifcfg-ens33
将文件中的
BOOTPROTO="dhcp"
#改为
BOOTPROTO="static"
#文件末尾加上
#IP地址
IPADDR=192.168.10.100
#网关
GATEWAY=192.168.10.2
#域名解析器
DNS1=192.168.10.2
修改主机名
vim /etc/hostname
#文件内容改为
hadoop100
进行主机名称映射
vim /etc/hosts
#在文件中加入
192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102
192.168.10.103 hadoop103
192.168.10.104 hadoop104
192.168.10.105 hadoop105
192.168.10.106 hadoop106
192.168.10.107 hadoop107
192.168.10.108 hadoop108
reboot
重启一下
重新打开终端,查看虚拟机的IP地址是否为192.168.10.100,能否联通外网
ifconfig
ping wwww.baidu.com
工具的安装与配置
Xshell远程访问工具
在Xshell官网下载Xshell和Xftp,实现各虚拟机中的远程同步
使用Xshell新建对话
打开Xshell,选择文件
——>新建
,名称填入192.168.10.100
,点击用户身份验证
,输入主机的用户名和密码,验证主机密钥选择接受并保存
进行Window hosts设置
进入C:\Windows\System32\drivers\etc
路径,找到hosts文件,并添加以下路径
192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102
192.168.10.103 hadoop103
192.168.10.104 hadoop104
192.168.10.105 hadoop105
192.168.10.106 hadoop106
192.168.10.107 hadoop107
192.168.10.108 hadoop108
这样就可以在名称中填hadoop10x来进行远程控制,而不需要填具体的IP地址
epel-release
安装epel-release
yum install -y epel-release #以管理员的身份运行
注:epel-release是Extra Packages for Enterprise Linux,是为“红帽系”的操作系统提供额外的软件包,相当于是一个软件仓库,大多数rpm包在官方repository中是找不到的
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld.service
配置用户权限
配置atguigu用户具有root权限,方便后期加sudo执行root权限的命令
vim /etc/sudoers
在上图位置加入
atguigu ALL=(ALL) NOPASSWD:ALL
在/opt目录西区创建文件夹,并修改所属主和所属组
mkdir /opt/module
mkdir /opt/software
chown atguigu:atguigu /opt/module
chown atguigu:atguigu /opt/software
卸载虚拟机自带的JDK
rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
- rpm -qa:查询所安装的所有rpm软件包
- grep -i:忽略大小写
- xargs -n1:每次只传输一个参数
- rpm -e --nodeps:强制卸载软件
reboot
重启虚拟机
克隆三台虚拟机
我们用hadoop100克隆出hadoop102、hadoop103、hadoop104搭建完全分布式集群(这里跳过hadoop101是因为历史原因,101留给了伪分布式,后续用101进行源码编译)
关闭hadoop100后,右键hadoop
——>管理
——>克隆
,选择克隆自虚拟机中的当前状态,克隆方法选择创建完整克隆
,重复上述操作三次,克隆出名称分别为hadoop102、hadoop103、hadoop104的三台虚拟机
配置IP地址和主机名称
接下来配置三台克隆虚拟机的ip地址和主机名称
以hadoop102为例,其它虚拟机同理
vim /etc/sysconfig/network-scripts/ifcfg-ens33 #在root角色下运行
#将IPADDR=192.169.10.100改成对对应的IPADDR=192.169.10.102
vim /etc/hostname
#将hadoop100改为对应的hadooop102
Xshell连接
同时在Xshell上连接到hadoop102、hadoop103、hadoop104上
JDK安装与配置
这里我们选择从官网上下载JDK8(JDK版本过高后面启动yarn的时候可能会遇到问题,别问我怎么知道的。。。一定要去hadoop官网检查支持的JDK版本),在hadoop官网下载好hadoop
在Xshell中打开hadoop102,进入到我们之前创立的software文件夹
cd /opt/software
点击Xshell中的文件传输的绿色图标
找到刚才下载好的hadoop和jdk,拖拽到右边
在命令行中解压缩到/opt/module文件夹下
tar -zxvf jdk-8u361-linux-x64.tar.gz -C /opt/module
配置Java环境变量
进入环境变量文件夹
cd /etc/profile.d
我们创建一个自己的环境变量文件
vim my_env.sh
#在文件中加入
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_361 #刚才Java的安装路径
export PATH=$PATH:$JAVA_HOME/bin
重新加载
source /etc/profile
输入java -version
查看是否安装成功
Hadoop安装与配置
同样进入到software目录下,将hadoop解压到module下
tar -zxvf hadoop-3.3.5.tar.gz -C /opt/module
接下来配置hadoop的环境变量
sudo vim /etc/profile.d/my_env.sh
#加上
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.3.5
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
重新加载
source /etc/profile
输入hadoop --help
查看配置是否成功
xsync集群分发脚本
scp(secure copy)安全拷贝
- 定义:scp可以实现服务器之间的数据拷贝
- 基本语法:
scp -r $pdir/$fname $user@host:$pdir/$$fname
#命令 #递归 #要拷贝的文件路径、名称 #目的地用户@主机:目的地路径、名称
- 实例:
把hadoop102中的module里的jdk拷贝到hadoop103相应的路径下
#hadoop102
cd /opt/module
scp -r jdk1.8.0_361/ atguigu@hadoop103:/opt/module/
#这里需要输入hadoop103的密码
在hadoop103上把hadoop102 module里的hadoop拉过来
#hadoop103
cd /opt/module
scp -r atguigu@hadoop102:/opt/module/hadoop-3.3.5 ./
检查hadoop103上是否有对应文件
也可以在hadoop103上把hadoop102的数据传输到hadoop104中
#hadoop103
scp -r atguigu@hadoop102:/opt/module/* atguigu@hadoop104:/opt/module/
rsync远程同步工具
- 定义:rsync主要用于备份和镜像。具有速度快、避免重复复制相同内容和支持符号链接的优点
- 和scp的区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去
- 基本语法:
rsync -av $pdir/$fname $user@$host:$pdir/$fname
#命令 #选项参数 #要拷贝的文件路径/名称 #目的地用户@主机:目的地路径、名称
xsync脚本
- 需求:循环复制文件到所有节点的相同目录下
- 分析:
#rsync命令原始拷贝
rsync -av /opt/module atguigu@hadoop103:/opt #将本机/opt/module目录下的文件拷贝到atguigu@hadoop103的/opt目录下
而我们现在要实现的是xsync <要同步的文件名称>
即可在任何路径实现分发,所以脚本要放在声明了全局环境变量的路径
- 脚本实现
- 在/home/atguigu/bin目录下创建xsync文件
cd /home/atguigu
mkdir bin
cd bin
vim xsync
- 在该文件中编写如下代码
#!/bin/bash
#1.判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Argument!
exit;
fi
#2.遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
echo ==============$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:$pdir
else
echo $file does no exists!
fi
done
done
打开权限
chmod 777 xsync
将bin目录下的文件都分发到hadoop103和hadoop104
cd ..
xsync bin/
将hadoop102中配置好的环境变量分发到其它虚拟机中
sudo ./bin/xsync /etc/profile.d/my_env.sh
并在hadoop103和hadoop104上source一下
source /etc/profile
设置各主机之间SSH免密登录
在刚才的分发过程中,我们一直都需要输入密码,所以我们可以设置免密登录以简化操作
免密登录原理:
#先进入Hadoop102的根目录
cd /home/atguigu
pwd
#列出隐藏文件
ls -al
#发现有一个名为.ssh的文件,进入
cd .ssh/
#列出文件,此时只有一个know_hosts
ll
#生成公钥
ssh-keygen -t rsa
#默认配置,三次回车
#列出文件,现在除了know_hosts,还有存储私钥的id_rsa和存储公钥的id_rsa.pub
ll
#将公钥复制到hadoop103上
ssh-copy-id hadoop103
#按照提示输入hadoop103上用户的密码,完成
#将公钥复制到hadoop104上
ssh-copy-id hadoop103
#按照提示输入hadoop104上用户的密码,完成
#同样的操作设置hadoop103和hadoop104
集群配置
集群部署规划
- NameNode和SecondaryNameNode不要安装在同一台服务器
- ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上
配置文件说明
Hadoop配置文件分为两类:默认配置文件和自定义配置文件,只有用户想要修改某一默认配置值时,才需修改自定义配置文件,更改相应属性值。
(1)默认配置文件
要获取的默认文件
文件存放在Hadoop的jar包中的位置
(2)自定义配置文件
core.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上,用户可根据项目需求重新进行配置
配置集群
核心配置文件
core-site.xml
cd $HADOOP_HOME/etc/hadoop
vim core-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<!-- Put site-specific property overrides in this file. -->
<configuration>
<!--指定NameNode的地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!--指定hadoop数据的存储目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.3.5/data</value>
</property>
<!--配置HDFS网页登录使用的静态用户为atguigu-->
<property>
<name>hadoop.http.staticuser.user</name>
<value>atguigu</value>
</property>
</configuration>
HDFS配置文件
配置hdfs-site.xml
vim hdfs-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> dfs.namenode.http-address hadoop102:9870 dfs.namenode.secondary.http-address hadoop104:9868 ##### YARN配置文件 配置yarn-site.xmlvim yarn-site.xml
文件内容如下:
<?xml version="1.0"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<configuration>
<!-- Site specific YARN configuration properties -->
<!--指定MR走shuffle-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
<!--环境变量的继承-->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
MapReduce配置文件
配置mapred-site.xml
vim mapred-site.xml
文件内容如下:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<!-- Put site-specific property overrides in this file. -->
<configuration>
<!--指定MapReduce程序运行在yarn上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
将上述配置分发到hadoop103和hadoop104上
cd /opt/module/hadoop-3.3.5/etc
xsync hadoop/
检查hadoop103 hadoop104中的配置是否被修改成功
群起集群
配置workers
vim /opt/module/hadoop-3.3.5/etc/hadoop/workers
将该文件内容修改为:
hadoop102
hadoop103
hadoop104
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行
同步所有节点配置文件
xsync workers
启动集群
- 如果集群是第一次启动,需要在hadop102节点格式化NameNode(注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到以往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化)
hdfs namenode -format
注意,这个时候目录下应该出现data和logs文件夹,没有出现就说明上述配置出现了错误,请仔细检查
/opt/module/hadoop-3.3.5/data/dfs/name/current
#可查看当前版本号
vim VERSION
#Tue Mar 28 14:55:58 CST 2023
blockpoolID=BP-314477346-192.168.10.102-1679986558264
cTime=1679986558264
clusterID=CID-2944f855-f8e9-43c4-88e3-8fdf7d0aa335
layoutVersion=-66
namespaceID=606386466
storageType=NAME_NODE
- 启动集群
启动器在sbin中
#在hadoop102上启动
sbin/start-dfs.sh
#在hadoop103上启动!!!!
sbin/start-yarn.sh
启动完成后。分别在hadoop102、hadoop103、hadoop104上使用jps查看运行的进程是否与我们初始分配一致
在虚拟机中安装Chorme浏览器
- 进入yum.repos.d目录
cd /etc/yum.repos.d/
- 创建并编辑google-chrome.repo文件
vi google-chrome.repo
- 在文件中添加如下内容
[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
- 安装google
sudo yum -y install google-chrome-stable --nogpgcheck
- 运行
- 终端运行
cd /opt/google/chrome
./google-chrome --no-sandbox
- 图形界面方式
root用户下,找到/usr/share/applications/Google Chrome.desktop
,鼠标右键弹出菜单->属性->命令,
由原来的字符串/usr/bin/google-chrome-stable %U修改为:
/usr/bin/google-chrome-stable %U --no-sandbox
然后,把文件Google Chrome.desktop拷贝一份到桌面,运行它即可。
Web端查看HDFS和YARN
Hadoop还为我们准备了Web端页面方便操作,在虚拟机或主机浏览器中输入<hadoop102的ip地址>:9870
可打开hdfs页面,输入<hadoop103的ip地址>:8088
可打开yarn页面
集群基本测试
上传文件到集群
- 上传小文件
hadoop fs -mkdir /input
打开网页版的hdfs,可在Utillties中的file system中看到刚才新建的input
在Hadoop应用目录下新建一个txt文件
touch wcinput.txt
vi wcinput.txt
# 内容自行输入
将刚创建好的txt放到input中
hadoop fs -put wcinput.txt /input
可在网页的input中进行查看并下载
- 上传大文件
hadoop fs -put /opt/software/jdk-8u361-linux-x64.tar.gz /
但实际上的文件并不存储在这儿,实际的文件存储在DataNode的hadoop/data中,我们可以进入一个DataNode查看:
可见文件中的内容跟我们刚才新建的txt内容一致
再来查看刚才上传的jdk:
# 首先进行拼接
cat blk_1073741827 >> tmp.tar.gz
cat blk_1073741828 >> tmp.tar.gz
tar -zxvf tmp.tar.gz # 解压缩到当前目录下发现确实是jdk
rm -rf jdk1.8.0_361/ tmp.tar.gz # 删除
- 下载
hadoop fd -get /input/wcinput.txt ./
执行wordcount程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.5.jar wordcount /input /output
#/input是集群上的输入路径 /output是集群上的输出路径
刷新yarn页面可以看到新增一个任务正在处理中
处理完成后可在hdfs页面中查看处理结果:
配置历史服务器
为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:
- 配置
mapred-site.xml
cd /opt/module/hadoop-3.3.5/etc/hadoop
vi mapred-site.xml
在该文件里增加如下配置
<!--历史服务器端地址-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!--历史服务器web端地址-->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
- 分发配置
xsync /opt/module/hadoop-3.3.5/etc/hadoop/mapred-site.xml
- 在hadoop102启动历史服务器
如果yarn启动了,需要关掉yarn重新启动
mapred --daemon start historyserver
- 查看history
重新执行wordcount任务,打开yarn界面,这个时候可点开history查看任务历史
配置日志的聚集
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
日志聚集功能好处:可以方便查看到程序运行详情,方便开发调试
注意:开启日志聚集功能,需要重新启动NodeManager、ResourceManager和HistoryManager
开启日志聚集功能具体步骤如下:
- 配置yarn-site.xml
在该文件里面增加如下配置
<!--开启日志聚集功能-->
<property>
<name>yarn.log-aggregation</name>
<value>true</value>
</property>
<!--设置日志聚集服务器地址-->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!--设置日志保留时间为7天-->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
- 分发配置
xsync /opt/module/hadoop-3.3.5/etc/hadoop/yarn-site.xml
- 关闭NodeManager、ResourceManager和HistoryManager
sbin/stop-yarn.sh
mapred --daemon stop historyserver
集群启动/停止方式总结
- 各个模块分开启动/停止
- 整体启动/停止HDFS
start-dfs.sh/stop-dfs.sh
- 整体启动/停止YARN
start-yarn.sh/stop-yarn.sh
- 各个服务组件逐一启动/停止
- 分别启动/停止HDFS组件
hdfs --daemon start/stop namenode/datanode/secondarynamenode
- 分别启动/停止YARN
yarn --deamon start/stop resourcemanager/nodemanager
编写Hadoop集群常用脚本
Hadoop集群启停脚本(包括HDFS、YARN、HistoryServer):myhadoop.sh
以上的启动方式还是很麻烦,需要一个个地启动HDFS、YARN、HistoryServer,所以我们可以编写一个脚本进行Hadoop集群的启停
cd /home/atguigu/bin
vim myhadoop.sh
输入以下内容
#!/bin/bash
if [ $# -lt 1]
then
echo "No Args Input..."
exit;
fi
case $1 in
"start")
echo "============启动hadoop集群=============="
echo "===============启动hdfs================="
ssh hadoop102 "/opt/module/hadoop-3.3.5/sbin/start-dfs.sh"
echo "===============启动yarn================="
ssh hadoop103 "/opt/module/hadoop-3.3.5/sbin/start-yarn.sh"
echo "===========启动historyserver============"
ssh hadoop102 "/opt/module/hadoop-3.3.5/bin/mapred --daemon start historyserver"
;;
"stop")
echo "============关闭hadoop集群=============="
echo "===========关闭historyserver============"
ssh hadoop102 "/opt/module/hadoop-3.3.5/bin/mapred --daemon stop historyserver"
echo "===============关闭yarn================="
ssh hadoop103 "/opt/module/hadoop-3.3.5/sbin/stop-yarn.sh"
echo "===============关闭hdfs================="
ssh hadoop102 "/opt/module/hadoop-3.3.5/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
注意,在写脚本的时候能写绝对路径就写绝对路径
保存后退出,然后赋予脚本执行权限
chmod 777 myhadoop.sh
输入命令,检查脚本是否能正常使用
jps
myhadoop.sh stop
jps
myhadoop.sh start
jps
查看三台服务器Java进程脚本:jpsall
cd /home/atguigu/bin
vim jpsall
输入以下内容
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo ============= $host ================
ssh $host jps
done
保存后退出,然后赋予脚本执行权限
chmod 777 jpsall
分发/home/atguigu/bin目录,保证自定义脚本在三台机器上都可以使用
xsync /home/atguigu/bin