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

来源:互联网 发布:牛贝 微信淘宝客 7.01 编辑:程序博客网 时间:2024/05/16 19:32
#!/bin/bashif [ $# != 2 ]; then    echo "useage: $0 <hdfs_file> <dest_dir>"    exit 1fiCURR_PATH="$(cd "`dirname "$0"`"/; pwd)"hosts_file=$CURR_PATH"/hosts"if [ ! -f "$hosts_file" ]; then    echo "$hosts_file not exist"    exit 1fisource_file=$1dest_dir=$2filename=$(echo $source_file | awk -F '/' '{print $NF}')destfilename=$dest_dir"/"$filenameecho $filenameecho $destfilenamehadoop fs -get $source_file $dest_dirfor h in $(cat $hosts_file)do        scp $destfilename root@$h:$destfilenamedone

原理就是在主节点上(能够免秘钥ssh集群其他所有节点)执行该脚本(取名为distribute-file),hdfs_file为hdfs上的一个文件的完整路径,dest_dir为节点本地目录用来存放分发文件的目录。

必须以root用户执行,与该脚本同级目录下面必须放置一个名叫hosts的文件,里面写上你要分发的所有的节点的hostname。
eg.:

./distribute-file /user/hdfs/tmp/fairscheduler.xml /etc/spark


#!/bin/bashif [ $# != 1 ]; then    echo "useage: $0 <cmd>"    exit 1fiCURR_PATH="$(cd "`dirname "$0"`"/; pwd)"hosts_file=$CURR_PATH"/hosts"if [ ! -f "$hosts_file" ]; then    echo "$hosts_file not exist"    exit 1firemote_cmd=$1for 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