本博文轉自寫了2個簡單的工具腳本用來分發hdfs叢集上的檔案到所有節點,和遠端執行指令
#!/bin/bash
if [ $# != ]; then
echo "useage: $0 <hdfs_file> <dest_dir>"
exit
fi
CURR_PATH="$(cd "`dirname "$0"`"/; pwd)"
hosts_file=$CURR_PATH"/hosts"
if [ ! -f "$hosts_file" ]; then
echo "$hosts_file not exist"
exit
fi
source_file=$1
dest_dir=$2
filename=$(echo $source_file | awk -F '/' '{print $NF}')
destfilename=$dest_dir"/"$filename
echo $filename
echo $destfilename
hadoop fs -get $source_file $dest_dir
for h in $(cat $hosts_file)
do
scp $destfilename root@$h:$destfilename
done
原理就是在主節點上(能夠免秘鑰ssh叢集其他所有節點)執行該腳本(取名為distribute-file),hdfs_file為hdfs上的一個檔案的完整路徑,dest_dir為節點本地目錄用來存放分發檔案的目錄。
必須以root使用者執行,與該腳本同級目錄下面必須放置一個名叫hosts的檔案,裡面寫上你要分發的所有的節點的hostname。
eg.:
./distribute-file /user/hdfs/tmp/fairscheduler.xml /etc/Spark
#!/bin/bash
if [ $# != ]; then
echo "useage: $0 <cmd>"
exit
fi
CURR_PATH="$(cd "`dirname "$0"`"/; pwd)"
hosts_file=$CURR_PATH"/hosts"
if [ ! -f "$hosts_file" ]; then
echo "$hosts_file not exist"
exit
fi
remote_cmd=$1
for h in $(cat $hosts_file)
do
ssh root@$h "$remote_cmd"
done
遠端分發執行指令腳本(取名叫distribute-exec),通過免秘鑰ssh到遠端主機上執行指令,用法大體和上面那個腳本相似,也是要目前目錄下面放置hosts檔案,舉例:
./distribute-exec “cd /opt/cloudera/parcels/CDH/lib/spark/lib; rm -f spark-assembly.jar; ln -s spark-assembly-with-hive-cdh5.3.2.jar spark-assembly.jar;”
多個指令之間用分号分隔