使用shell脚本获取在hadoop中最近5分钟内创建的文件

Moh*_*ane 3 unix shell hadoop hdfs

我在HDFS中的文件为:

drwxrwx---   - root supergroup          0 2016-08-19 06:21 /tmp/logs/root/logs/application_1464962104018_1639064
drwxrwx---   - root supergroup          0 2016-08-19 06:21 /tmp/logs/root/logs/application_1464962104018_1639065
Run Code Online (Sandbox Code Playgroud)

现在/tmp/logs/root/logs/目录将不断在其中获取新文件。考虑到当前时间,我想获取在最近五分钟内创建的文件。然后,我需要将这些文件复制到本地计算机中。

dae*_*n12 5

这个怎么样:

hdfs dfs -ls /tmp | tr -s " " | cut -d' ' -f6-8 | grep "^[0-9]" | awk 'BEGIN{ MIN=5; LAST=60*MIN; "date +%s" | getline NOW } { cmd="date -d'\''"$1" "$2"'\'' +%s"; cmd | getline WHEN; DIFF=NOW-WHEN; if(DIFF < LAST){ print $3 }}'
Run Code Online (Sandbox Code Playgroud)

说明:

列出所有文件:

hdfs dfs -ls / tmp

替换多余的空格:

tr -s“”

获取所需的列:

切-d''-f6-8

删除不需要的行:

grep“ ^ [0-9]”

使用awk处理:

awk

初始化DIFF持续时间和当前时间:

MIN = 5;LAST = 60 * MIN; “日期+%s” | 立即获取

创建一个命令以获取HDFS上文件时间戳记的纪元值:

cmd =“ date -d'\''” $ 1“” $ 2“'\''+%s”;

执行命令以获取HDFS文件的纪元值:

cmd | getline WHEN;

得到时差:

DIFF = NOW-WHEN;

根据差异打印输出:

if(DIFF <LAST){打印$ 3}

您只需要MIN根据需要更改变量值即可(此处为5分钟)。高温超导