我在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
现在/tmp/logs/root/logs/
目录将不断获取其中的新文件。
我想获取在过去五分钟内创建的文件,考虑当前时间。然后我需要将这些文件复制到我的本地机器上。
答案 0 :(得分:3)
这个怎么样:
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 }}'
说明:
列出所有文件:
hdfs dfs -ls / tmp
替换额外的空格:
tr -s&#34; &#34;
获取所需的列:
cut -d&#39; &#39; -f6-8
删除不需要的行:
grep&#34; ^ [0-9]&#34;
使用awk处理:
AWK
初始化DIFF持续时间和当前时间:
MIN = 5; LAST = 60 * MIN; &#34;日期+%s&#34; | getline NOW
创建命令以获取HDFS上文件的时间戳的纪元值:
cmd =&#34; date -d&#39; \&#39;&#39;&#34; $ 1&#34; &#34; $ 2#34;&#39; \&#39;&#39; +%S&#34 ;;
执行命令以获取HDFS文件的纪元值:
cmd | getline WHEN;
获得时差:
DIFF = NOW-WHEN;
根据差异打印输出:
if(DIFF
您只需根据您的要求更改MIN
的变量值(此处为5分钟)。
HTH
答案 1 :(得分:0)
我使用下面的命令完成了它:它将为我提供在五分钟窗口之间创建的文件:
hadoop fs -ls /tmp/logs/root/logs | awk '{ if ((($6 == "'"2016-08-18"'" && $7 <= "'"21:00"'") && ($6 == "'"2016-08-18"'" && $7 >= "'"20:55"'"))) print $8 } '
可以使用当前时间戳进行相应修改。