天天看點

寫了2個簡單的工具腳本用來分發hdfs叢集上的檔案到所有節點,和遠端執行指令

本博文轉自寫了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;”

多個指令之間用分号分隔

繼續閱讀