写了2个简单的工具脚本用来分发hdfs集群上的文件到所有节点,和远程执行命令

20 篇文章 0 订阅
#!/bin/bash

if [ $# != 2 ]; then
    echo "useage: $0 <hdfs_file> <dest_dir>"
    exit 1
fi

CURR_PATH="$(cd "`dirname "$0"`"/; pwd)"
hosts_file=$CURR_PATH"/hosts"

if [ ! -f "$hosts_file" ]; then
    echo "$hosts_file not exist"
    exit 1
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 [ $# != 1 ]; then
    echo "useage: $0 <cmd>"
    exit 1
fi

CURR_PATH="$(cd "`dirname "$0"`"/; pwd)"
hosts_file=$CURR_PATH"/hosts"

if [ ! -f "$hosts_file" ]; then
    echo "$hosts_file not exist"
    exit 1
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;"

多个命令之间用分号分隔

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值