说明
该脚本是根据输入起始日期-结束日期,执行从数据库拉取日期间隔数据到HDFS。日期间隔中的日期就是每一年的自然日。
日期格式可以是以下几种:
2018-01-01 2018-12-31 [-][/][.]['']
2018/01/01 2018/12/31 [-][/][.]['']
20180101 20181231 [-][/][.]['']
代码片段
if [[ $# -le 2 || $# -gt 3 ]]; then echo "Usage: $0 2018-01-01 2018-12-31 or $0 2018/01/01 2018/12/31 or $0 20180101 20181231 [-][/][.]['']" exit 1 fi START_DAY=$(date -d "$1" +%s) END_DAY=$(date -d "$2" +%s) SPLITER=${3} declare -a DATE_ARRAY function getDateRange { if [[ $# -ne 3 ]]; then echo "Usage: getDateRange 2018-01-01 2018-12-31 or getDateRange 2018/01/01 2018/12/31 or getDateRange 20180101 20181231 [-][/][.]['']" exit 1 fi START_DAY_TMP=${1} END_DAY_TMP=${2} SPLITER_TMP=${3} I_DATE_ARRAY_INDX=0 while (( "${START_DAY_TMP}" <= "${END_DAY_TMP}" )); do cur_day=$(date -d @${START_DAY_TMP} +"%Y${SPLITER_TMP}%m${SPLITER_TMP}%d") DATE_ARRAY[${I_DATE_ARRAY_INDX}]=${cur_day} START_DAY_TMP=$((${START_DAY_TMP}+86400)) ((I_DATE_ARRAY_INDX++)) done } getDateRange "${START_DAY}" "${END_DAY}" "${SPLITER}" . /etc/profile.d/custom.sh for SINGLE_DAY in ${DATE_ARRAY[@]}; do
#replace your task command in this line echo `spark-submit --master yarn --deploy-mode client --packages "mysql:mysql-connector-java:6.0.6" --num-executors 4 --executor-memory 4G --class "com.cm.data.datasync.ReadLogDb2HDFS" /home/ubuntu/target/data_analysis-1.0.1.jar order_log_${SINGLE_DAY} 4` done exit 0
下载地址:Shell
最后奉送 nohub 方式命令 ./spark_submit_script.sh 20180101 20180823 '' > spark_task_2018.out 2>&1 &
一样的颜色的地方可以使用 [-][/][.][''] 替换