微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 bootstrap

如何解决从 bootstrap

我有一个 bash 脚本来处理将数据文件导入数据库,由于数据量巨大,我想将文件(27 个)分发到我的 4 节点集群,并在每台机器上本地执行 shell 脚本,而不需要与引导程序相关(脚本将在每台机器上独立地将数据加载到数据库中)。

我将加载脚本复制到每个节点,并且我确实将多个文件复制到同一文件夹中,因此在本地运行会一个一个加载它们。但我需要从引导程序中触发它。

我的工人姓名是:WORKER1 ... WORKER4

我尝试使用:

processloadingFiles() {
    for FILE in `ls -1 data_migration_part*`
    do
        echo "copying file $FILE to WORKER$WORKER"
        scp $FILE $ENV_IP$WORKER:$DIR_BIN/data_migration.csv
        echo "Processing file $FILE" "" $WORKER
        ssh $ENV_IP$WORKER "cd /home/datausr/files/Migration; ./loadfiles.sh " &
        ((WORKER++))
        if [ $WORKER -eq 5 ]; then
            wait
            WORKER=1
        fi
    done
}

运行上面的代码将开始在节点上加载,但它将逐个节点而不是独立地加载。

结果将是:

[datausr@bootstrap Migration]$ ps -ef | grep migrate
datausr    91290  90149  0 09:16 pts/0    00:00:00 ssh 20.18.8.21 cd /home/datausr/VivoHistoryMigration;source ./loadfiles.sh 
datausr    91306  90149  0 09:16 pts/0    00:00:00 ssh 20.18.8.22 cd /home/datausr/VivoHistoryMigration;source ./loadfiles.sh 
datausr    91335  90149  0 09:16 pts/0    00:00:00 ssh 20.18.8.23 cd /home/datausr/files/Migration ;source ./loadfiles.sh 
datausr    91356  61457  0 09:16 pts/0    00:00:00 grep --color=auto migrate
[datausr@bootstrap Migration]$

那些进程正在引导程序中运行,新的加载作业在最后一个完成之前不会启动。

如何执行本地脚本,让它在远程节点上运行,以便它可以在不涉及引导程序的情况下自行完成?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。