我在Linux中有一个shell脚本:
#!/bin/bash
#This script is to import tables from mysql to hdfs
source /home/$USER/mysql/source.sh
[ $# -ne 1 ] && { echo "Usage : $0 table ";exit 1; }
table=$1
sqoop import --connect ${domain}:${port}/${database} \
--username ${username} --password ${password}\
--query "select * from ${table} where \$CONDITIONS" \
-m 1 --as-parquetfile --hive-import --hive-database ${hivedatabase} \
--hive-table ${table} --map-column-java Date=String \
--target-dir /user/hive/warehouse/${hivedatabase}.db/${table}\
--outdir /home/$USER/logs/outdir
echo "****************************************************"
此脚本将表名作为参数。表名称位于名为 tables.txt 的文件中。
source.sh 文件内容:
domain=jdbc:mysql://XXXXXXXXX
port=3306
database=testing
username=xxxxxx
password=xxxxxxx
hivedatabase=testing
现在我想并行安排这个脚本。我想要做的是一次为10个表安排这个脚本。就像从 tables.txt 中获取前10个表名,然后运行此脚本。如果为表执行脚本,则取第11个表,依此类推......
是否可以在cron
工作中完成,或者我们如何实现这一目标。
请建议最好的方法。
答案 0 :(得分:0)
出于本答案的目的,我们假设您的脚本位于名为load_data.sh
的文件中,您的设置位于settings.sh
,并且您的表名列表位于{{1 }}。现在你可以运行:
tables.txt
阅读xargs --max-procs 10 -n 1 sh load_data.sh < tables.txt
手册页了解详情; xargs
导致--max-procs
一次最多生成10个进程,并且它将为每个调用传递一个表名。