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/目录将不断在其中获取新文件。考虑到当前时间,我想获取在最近五分钟内创建的文件。然后,我需要将这些文件复制到本地计算机中。
这个怎么样:
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分钟)。高温超导
| 归档时间: |
|
| 查看次数: |
3246 次 |
| 最近记录: |