date
명령 $(date +%Y-%m-%d)
당신은 bash는 사용할 수 있습니다
예를 들어, 다음과 같이 실행하면 /user/hdfs/eventlog/2017-01-04.snappy
로그 파일을 찾을 것이다 및 출력이 /user/hdfs/eventlog_output/2017-01-04
hdfs
디렉토리에 저장됩니다 :
hadoop jar EventLogsSW.jar EventSuspiciousWatch /user/hdfs/eventlog/$(date +%Y-%m-%d).snappy /user/hdfs/eventlog_output/$(date +%Y-%m-%d)
하면 얻을 수있는 특정 날짜 형식을 참조하십시오 this answer또는 유형 man date
에 대해 자세히 알아 보려면 명령을 참조하십시오. 10 ... 제공 자세한 내용은 이후
갱신 :
1. 설명 : 매일 이러한 명령을 재사용 할 수
$ file=$(hadoop fs -ls /user/cloudera/*.snappy|grep $(date +%Y-%m-%d)|awk '{print $NF}')
$ echo $file
/user/cloudera/xyz.snappy
$ file_out=$(echo $file|awk -F '/' '{print $NF}'|awk -F '.' '{print $1}')
$ echo $file_out
xyz
$hadoop jar EventLogsSW.jar EventSuspiciousWatch /user/hdfs/eventlog/$file /user/hdfs/eventlog_output/$file_out
2. 메이크업 쉘 스크립트 ... 그리고에 더 논리적 인 방법
이 스크립트는 하나 이상의 파일을 처리 할 수 있습니다 현재 시스템 날짜 HDFS에서 ES :
#!/bin/sh
#get today's snappy files
files=$(hadoop fs -ls /user/hdfs/eventlog/*.snappy|grep $(date +%Y-%m-%d)|awk '{print $NF}')
#Only process if today's file(s) available...
if [ $? -eq 0 ]
then
# file(s) found now create dir
hadoop fs -mkdir /user/hdfs/eventlog/$(date +%Y-%m-%d)
counter=0
#move each file to today's dir
for file in $files
do
hadoop fs -mv $file /user/hdfs/eventlog/$(date +%Y-%m-%d)/
counter=$(($counter + 1))
done
#run hadoop job
hadoop jar EventLogsSW.jar EventSuspiciousWatch /user/hdfs/eventlog/$(date +%Y-%m-%d) /user/hdfs/eventlog_output/$(date +%Y-%m-%d)
fi
echo "Total processed file(s): $counter"
echo "Done processing today's file(s)..."
하나 개 이상의 파일을 처리 할 수있는이 스크립트 - 시간에 하나의 파일을 - 현재 시스템 날짜 HDFS에서 다음에 대한
#!/bin/sh
#get today's snappy files
files=$(hadoop fs -ls /user/hdfs/eventlog/*.snappy|grep $(date +%Y-%m-%d)|awk '{print $NF}')
#Only process if today's file(s) available...
if [ $? -eq 0 ]
then
counter=0
for file in $files
do
echo "Processing file: $file ..."
#get output dir name
file_out=$(echo $file|awk -F '/' '{print $NF}'|awk -F '.' '{print $1}')
#run hadoop job
hadoop jar EventLogsSW.jar EventSuspiciousWatch /user/hdfs/eventlog/$file /user/hdfs/eventlog_output/$file_out
counter=$(($counter + 1))
done
fi
echo "Total processed file(s): $counter"
echo "Done processing today's file(s)..."
감사 응답. 파일 이름에 날짜가 없습니다. 예 : --199346735859.snappy –
@MohankumarManivannan - 업데이트 된 대답보기 .... –
하지만이 파일은 한 번에 하나씩 처리됩니다. 하나의 단일 hadoop 작업을 모두 실행하려면 처리 할 모든 파일을 이동해야합니다. 새 디렉터리에 다음 해당 디렉터리에 hadoop 작업을 실행합니다 –