Linux中scp,rsync,xsync命令的区别

scp、 拷贝完全相同

scp -r etc/hadoop/dfs.hosts root@192.168.121.134:/usr/local/hadoop/hadoop-2.7.6/etc/hadoop/

rsync、拷贝有差异的文件

rsync -rvl etc/hadoop/hdfs-site.xml root@192.168.121.136:/usr/local/hadoop/hadoop-2.7.6/etc/hadoop/

xsync、循环复制文件到所有节点相同的目录下

!/bin/bash
#1获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
 
#2 获取文件名称
p1=$1
fname='basename $p1'
echo fname=$fname
 
3 获取上级目录到绝对路径
pdir='cd -P $(dirname $p1); pwd'
echo pdir=$pdir
 
4 获取当前用户名称
user='whoami'
 
5 循环
for((host=103; host<105; host++)); do
echo ------------------- hadooppdir/user@hadooppdir
done
用空格隔开 如果敲错了 按下ctrl+backspace可以删除 注意一定要有四个)" one two three four if [ ! -n $four ] then echo "Args Number Input Error..." exit; fi}# 获取用户的8个配置文件存放路径和将要安装的目录function getFilesAndTargetDir(){ read -p "请输入你的软件包路径(绝对路径)" softwareDir read -p "请输入你的8个配置文件存放路径(配置文件已修改好 绝对路径)" filesDir read -p "你想要将HA安装在哪个目录下(空目录 绝对路径)" targetDir}function getUserPathFileName(){ read -p "你的环境变量配置文件名:(在/etc/profile.d/下 例如my_path.sh 只要文件名)" pathFileName}# 1 function unpackSoftwarePackage(){ echo "----------一、解压软件包----------" sleep 2 echo "----------1.创建hadoop HA高可用目录:$targetDir/----------" if [ ! -d "$targetDir/" ];then mkdir $targetDir/ fi echo "----------2.解压JDK----------" tar -xzvf $softwareDir/jdk-8u202-linux-x64.tar.gz -C $targetDir/ echo "----------3.解压hadoop----------" tar -xzvf $softwareDir/hadoop-3.1.3.tar.gz -C $targetDir/ echo "----------4.解压zookeeper----------" tar -xzvf $softwareDir/apache-zookeeper-3.5.7-bin.tar.gz -C $targetDir/ echo "----------第一步已完成----------" return 0}# 2 function changeName(){ echo "----------二、改名----------" sleep 2 echo "----------1.重命名Zookeeper----------" mv $targetDir/apache-zookeeper-3.5.7-bin/ $targetDir/zookeeper echo "----------2.重命名JDK----------" mv $targetDir/jdk1.8.0_202/ $targetDir/jdk1.8 echo "----------第二步已完成----------" return 0}# 3function copyConfigurationFiles(){ echo "----------三、修改八个配置文件----------" sleep 2 echo "----------1.修改hadoop下的6个文件----------" cat $filesDir/core-site.xml > $targetDir/hadoop-3.1.3/etc/hadoop/core-site.xml cat $filesDir/hdfs-site.xml > $targetDir/hadoop-3.1.3/etc/hadoop/hdfs-site.xml cat $filesDir/mapred-site.xml > $targetDir/hadoop-3.1.3/etc/hadoop/mapred-site.xml cat $filesDir/yarn-site.xml > $targetDir/hadoop-3.1.3/etc/hadoop/yarn-site.xml cat $filesDir/workers > $targetDir/hadoop-3.1.3/etc/hadoop/workers cat $filesDir/hadoop-env.sh > $targetDir/hadoop-3.1.3/etc/hadoop/hadoop-env.sh echo "----------2.修改zookeeper下的1个文件----------" mv $targetDir/zookeeper/conf/zoo_sample.cfg $targetDir/zookeeper/conf/zoo.cfg cat $filesDir/zoo.cfg > $targetDir/zookeeper/conf/zoo.cfg echo "----------3.修改环境变量----------" cat $filesDir/$pathFileName > /etc/profile.d/$pathFileName source /etc/profile.d/$pathFileName echo "----------4.安装psmisc插件----------" sudo yum install -y psmisc ssh $two "sudo yum install -y psmisc" echo "----------第三步已完成----------" return 0}# 4.function createDir(){ echo "----------四、创建目录----------" sleep 2 echo "----------1.创建zkData高可用目录----------" mkdir $targetDir/zookeeper/zkData touch $targetDir/zookeeper/zkData/myid echo "----------2.创建Hadoop数据临时目录----------" mkdir $targetDir/tmp echo "----------3.创建JournalNode日志目录----------" mkdir $targetDir/logs echo "----------第四步已完成----------" return 0}# 5.function xsyncHA(){ echo "----------五、分发HA目录----------" sleep 2 xsync $targetDir/ echo "----------1.分发环境变量配置文件----------" for i in $two $three $four do sudo scp /etc/profile.d/$pathFileName $i:/etc/profile.d/ done echo "----------2.刷新环境变量----------" for i in $two $three $four do ssh $i "source /etc/profile.d/$pathFileName" done echo "----------第五步已完成----------" return 0}# 6.function changeMyIdOfZK(){ echo "----------六、修改zookeeper的myid 使用ssh方式----------" sleep 2 echo "---------- 修改two的myid文件------------" ssh $two "echo '1' >> $targetDir/zookeeper/zkData/myid" echo "---------- 修改three的myid文件------------" ssh $three "echo '2' >> $targetDir/zookeeper/zkData/myid" echo "---------- 修改four的myid文件------------" ssh $four "echo '3' >> $targetDir/zookeeper/zkData/myid" echo "----------第六步已完成----------"}# 7.function startZKOnThreeNode(){ echo "----------七、启动ZK----------" sleep 2 echo "----------启动zookeeper----------" for i in $two $three $four do echo ---------- zookeeper $i 启动 ------------ ssh $i "$targetDir/zookeeper/bin/zkServer.sh start" done echo "----------第七步已完成----------"}# 8.function startHadoop(){ echo "----------八、启动hadoop----------" sleep 2 echo "----------1.启动JournalNode----------" for i in $one $two $three do echo ---------- hadoop $i JournalNode启动 ------------ ssh $i "hdfs --daemon start journalnode" done echo "----------2.初始化NameNode----------" hdfs namenode -format echo "----------3.初始化Zookeeper----------" ssh $two "hdfs zkfc -formatZK" echo "----------4.启动两个NameNode----------" hdfs --daemon start namenode ssh $two "hdfs namenode -bootstrapStandby" echo "----------5.启动集群----------" start-dfs.sh echo "----------第八步已完成----------" echo "----------Hadoop HA高可用搭建已完成----------"}# 调用上述函数完成安装HAtestReadgetFilesAndTargetDirgetUserPathFileNameunpackSoftwarePackagechangeNamecopyConfigurationFilescreateDirxsyncHAchangeMyIdOfZKstartZKOnThreeNodestartHadoop123
03-09
### 编写Bash脚本实现Hadoop HA高可用部署 #### 解压缩软件包并安装 为了自动化解压JDK、Hadoop和ZooKeeper的安装过程,可以利用`tar`命令来完成此操作。假设所有软件包都位于同一目录中,并且目标路径已定义为`$targetDir`。 ```bash #!/bin/bash # 定义变量 software_dir="/path/to/software" target_dir="$HOME/installation" # 创建目标目录 mkdir -p ${target_dir} # 解压软件包到指定位置 cd ${software_dir} for package in jdk-*.tar.gz hadoop-*.tar.gz zookeeper-*.tar.gz; do tar -zxvf "${package}" --strip-components=1 -C "${target_dir}" done ``` #### 复制配置文件 对于已经预先修改完毕的八个配置文件,可以通过简单的循环结构将其分发给各个组件对应的配置目录下: ```bash config_files=("core-site.xml" "hdfs-site.xml" "mapred-site.xml" "yarn-site.xml" \ "zoo.cfg" "slaves" "masters" "hadoop-env.sh") source_config_dir="/path/to/configs" destination_dirs=( "${target_dir}/etc/hadoop/" "${target_dir}/conf/" # 对应于Zookeeper配置 ) for file in "${config_files[@]}"; do cp "${source_config_dir}/${file}" "${destination_dirs[0]}" [[ "$file" =~ ^(zoo\.cfg|slaves|masters)$ ]] && cp "${source_config_dir}/${file}" "${destination_dirs[1]}" done ``` #### 创建必要的工作日志目录 确保每台机器上都有适当的工作空间和日志记录区域是非常重要的。这一步骤同样适用于集群中的每一台计算机。 ```bash work_log_dirs=( "/data/nn/datanode" "/data/jn/journalnode" "/var/log/hadoop-hdfs" "/var/log/hadoop-yarn" "/var/log/hadoop-mapreduce" ) for dir in "${work_log_dirs[@]}"; do mkdir -p "${dir}" chown hdfs:hadoop "${dir}" done ``` #### 同步HA目录及环境变量 在多节点环境中保持一致性至关重要。这里采用`rsync`工具来进行高效的数据传输;而针对环境变量,则是在`.bashrc`或者类似的shell初始化文件里追加相应的导出语句。 ```bash ha_sync_directories=("/etc/hadoop" "/opt/hadoop/conf") remote_nodes=("hadoop102" "hadoop103" "hadoop104") export JAVA_HOME="${target_dir}/jdk" echo 'export JAVA_HOME=/home/user/installation/jdk' >> ~/.bashrc for node in "${remote_nodes[@]}"; do for sync_dir in "${ha_sync_directories[@]}"; do rsync -avzh --delete "${sync_dir}/" maxwell@"${node}":"${sync_dir}" done ssh maxwell@"${node}" << EOF echo 'export JAVA_HOME=${JAVA_HOME}' >> ~/.bashrc EOF done ``` #### 设置Zookeeper `myid` 文件和启动服务 最后,在每个运行着ZooKeeper实例的服务器上设定唯一的ID号,并通过SSH执行远程命令开启JournalNode, NameNode以及ZooKeeper服务[^1]。 ```bash zk_servers=("hadoop102" "hadoop103" "hadoop104") for idx in {1..3}; do zk_server="hadoop10$(($idx + 1))" echo $idx > /tmp/myid scp /tmp/myid maxwell@${zk_server}:${ZOOKEEPER_HOME}/data/ ssh maxwell@${zk_server} << EOF ${target_dir}/sbin/hadoop-daemon.sh start journalnode ${target_dir}/sbin/hadoop-daemon.sh start namenode ${target_dir}/bin/zkServer.sh start EOF done ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值