过去两年中每周安排一次 Hadoop 作业

过去两年中每周安排一次 Hadoop 作业

我是 Linux Shell 脚本编写的新手。目前,我正在处理一项要求,该项目在每天的分区中驻留 2 年的数据。每天的分区有 200 个文件需要合并到一个文件中。

我开发了一个代码,可以输入一个利用当前日期的变量。下面是代码片段。我正在寻找一种无需任何手动干预即可使用循环的方法,它应该每周运行一次。

daysToDeduct=<number>
day1=$((daysToDeduct-1))
day2=$((daysToDeduct-2))
day3=$((daysToDeduct-3))
day4=$((daysToDeduct-4))
day5=$((daysToDeduct-5))
day6=$((daysToDeduct-6))
day7=$((daysToDeduct-7))

DAY1=`date --date="$day1 days ago" +%Y%m%d`
DAY2=`date --date="$day2 days ago" +%Y%m%d`
DAY3=`date --date="$day3 days ago" +%Y%m%d`
DAY4=`date --date="$day4 days ago" +%Y%m%d`
DAY5=`date --date="$day5 days ago" +%Y%m%d`
DAY6=`date --date="$day6 days ago" +%Y%m%d`
DAY7=`date --date="$day7 days ago" +%Y%m%d`


hadoop fs -getmerge  /apps/..../$DAY1  /.../$DAY1
.

...
hadoop fs -getmerge  /apps/..../$DAY7  /.../$DAY7

提前致谢

答案1

这是一些可以帮助您的代码。

#!/bin/bash
for i in $(seq 1 10)
do 
    echo $i: $(date --date="$i days ago" +%Y%m%d)
done

该片段打印:

1: 20191006
2: 20191005
3: 20191004
4: 20191003
5: 20191002
6: 20191001
7: 20190930
8: 20190929
9: 20190928
10: 20190927
  1. 您使用 sec 从 1 循环到 200
  2. 您将其定义为日期(我只是打印)

希望这会有所帮助:)

感谢@Stephen Kitt 的改进!

相关内容