Hadoop--xsync分发脚本
編寫集群分發腳本xsync:
1. scp(secure copy):安全拷貝
①. scp定義:scp可以實現服務器與服務器之間的數據拷貝(from server1 to server2);
②. 基本語法:
scp -r $pdir/$fname $user@host:$pdir/$fname命令 遞歸 要拷貝的文件路徑/名稱 目的地用戶@主機:目的地路徑/名稱③. 案例:
a. 在Hadoop102、Hadoop103、Hadoop104上都已創建好的opt/module//opt/software兩個目錄,并且目錄名修改為xiaobai:xiaobai:
b. 在hadoop102上,將hadoop102中的/opt/module/jdk1.8.0_144 目錄拷貝到hadoop103上:
[xiaobai@hadoop102 ~]$ scp -r /opt/module/jdk1.8.0_144 xiaobai@hadoop103:/opt/module/c. 在hadoop103上,將hadoop102中/opt/module/hadoop-3.2.2目錄拷貝到hadoop103上:
[xiaobai@hadoop103 ~]$ scp -r xiaobai@hadoop102:/opt/module/hadoop-3.2.2 /opt/module/tips:
1.在hadoop102上連接hadoop103要輸入hadoop103的用戶名及主機名稱和對應的地址:xiaobai@hadoop103: /地址;
同樣,在hadoop103上連接hadoop102也要輸入hadoop102的用戶名及主機名稱和對應的地址:xiaobai@hadoop102: /地址;
2.在hadoop103上也可以將hadoop102的文件拷貝到hadoop104上(由于/opt/module下只有jdk/hadoop,所以可用 “ * ” 一次性復制,要復制單個文件也可補全文件名):
[xiaobai@hadoop103 ~]$ scp -r xiaobai@hadoop102:/opt/module/* xiaobai@hadoop104:/opt/module/ xiaobai@hadoop102's password: The authenticity of host 'hadoop104 (192.168.10.104)' can't be established. ECDSA key fingerprint is SHA256:97X64xBWvWbC3aB39376dykfVlJ1/Eq6kNFSObPp7NQ. ECDSA key fingerprint is MD5:98:00:9e:9c:15:7a:7c:20:f8:a4:32:97:af:c2:1d:25. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'hadoop104,192.168.10.104' (ECDSA) to the list of known hosts. xiaobai@hadoop104's password:2. rsync遠程同步工具:
rsync主要用于備份和鏡像。具有速度快、避免復制相同內容和支持符號鏈接的優點。
rsync和scp區別: 用rsync做文件的復制要比scp的速度快,rsync只對差異文件做更新。scp是把所有文件都復制過去。
①. 基本語法:
rsync -av $pdir/$fname $user@$host:$pdir/$fname 命令 選項參數 要拷貝的文件路徑/名稱 目的地用戶@主機:目的地路徑/名稱選項參數說明:
選項 功能
-a 歸檔拷貝
-v 顯示復制過程
②. 案例:
a. 刪除hadoop103中/opt/module/hadoop-3.2.2/wcinput:
b. 同步hadoop102中的/opt/module/hadoop-3.2.2到hadoop103中(只同步了wcinput/ wcoutput/):
[xiaobai@hadoop102 module]$ rsync -av hadoop-3.2.2/ xiaobai@hadoop103:/opt/module/hadoop-3.2.2/③. xsync集群分發腳本:
1). 需求:循環復制文件到所有節點的相同目錄下:
2). 需求分析:
a. rsync命令原始拷貝:
b. 期望腳本:
xsync要同步的文件名稱
c. 期望腳本在任何路徑都能使用(腳本放在聲明了全局環境變量的路徑):
[xiaobai@hadoop102 ~]$ echo $PATH /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/module/jdk1.8.0_144/bin:/opt/module/hadoop-3.2.2/bin:/opt/module/hadoop-3.2.2/sbin:/home/xiaobai/.local/bin:/home/xiaobai/bin3). 腳本實現:
a. 在/home/xiaobai/bin目錄下創建xsync文件:
[xiaobai@hadoop102 ~]$ cd /home/xiaobai/ [xiaobai@hadoop102 ~]$ mkdir bin [xiaobai@hadoop102 ~]$ cd bin [xiaobai@hadoop102 bin]$ vim xsync在該文件中編寫如下代碼:
#!/bin/bash#1. 判斷參數個數 if [ $# -lt 1 ] thenecho Not Enough Argument!exit; fi#2. 遍歷集群所有機器 for host in hadoop102 hadoop103 hadoop104 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 exits!fidone donetips:
#5. 獲取父目錄
pdir=$(cd -P $(dirname $file);pwd)
-P 表示進入根目錄,而非軟鏈接!
#6. 獲取當前文件的名稱
fname=$(basename $file)
ssh $host “mkdir -p $pdir”
-p 表示無論目標路徑上的目標文件夾是否存在,都創建一個目標文件夾,以保證目標路徑/目標文件夾 $ pdir/$fname存在!
b. 修改腳本xsync具有執行權限:
[xiaobai@hadoop102 bin]$ chmod +x xsync
tips:記得修改xsync權限!變色啦,xsync有了可執行的權限!
c. 測試腳本:
[xiaobai@hadoop102 ~]$ xsync /home/xiaobai/bin/d. 將腳本復制到/bin中,以便全局調用:
[xiaobai@hadoop102 bin]$ sudo cp xsync /bin/eg:同步當前/bin目錄:
[xiaobai@hadoop102 ~]$ xsync bin/查看hadoop103/hadoop104已經存在了xsync腳本:
e. 同步環境變量配置(root所有者)
[xiaobai@hadoop102 ~]$ sudo ./bin/xsync /etc/profile.d/my_env.shtips: 如果用了sudo,那么xsync一定要補全路徑!
使用sudo找不到xsync命令,因為腳本在/home/xiaobai/bin/目錄下,root用戶找不到這個路徑,所以用./bin/xsync當前路徑,可找到xsync命令,可同步root用戶;
在hadoop103/hadoop104上使用以下命令查看環境變量是否已經存在:
[xiaobai@hadoop103 bin]$ sudo vim /etc/profile.d/my_env.sh總結
以上是生活随笔為你收集整理的Hadoop--xsync分发脚本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL 2005启用组件Ad Hoc D
- 下一篇: 【Java虚拟机的垃圾收集算法】