복붙노트

[HADOOP] 쉘 스크립트를 사용하여 hadoop에서 마지막 5 분 동안 생성 된 파일 얻기

HADOOP

쉘 스크립트를 사용하여 hadoop에서 마지막 5 분 동안 생성 된 파일 얻기

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 / 디렉토리는 계속해서 새 파일을 가져옵니다. 지난 5 분 동안 작성된 파일을 현재 시간을 고려하여 가져 오려고합니다. 그런 다음이 파일을 로컬 컴퓨터에 복사해야합니다.

해결법

  1. ==============================

    1.이것은 어떤가요:

    이것은 어떤가요:

    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 }}'
    

    설명:

    모든 파일 나열 :

    여분의 공백 대체 :

    필수 항목 가져 오기 :

    불필요한 행 제거 :

    awk를 사용하여 처리 :

    DIFF 지속 시간 및 현재 시간 초기화 :

    HDFS에서 파일의 타임 스탬프에 대한 에포크 값을 가져 오는 명령을 만듭니다.

    명령을 실행하여 HDFS 파일의 획기적인 값을 얻습니다.

    시차를 잡으십시오 :

    차이에 따라 출력을 인쇄하십시오.

    요구 사항 (여기 5 분)에 따라 MIN의 변수 값을 변경하면됩니다. HTH

  2. ==============================

    2.나는 아래 명령을 사용하여 그것을했다 : 그것은 5 분 창 사이에 만들어지는 파일을 내게 줄 것이다 :

    나는 아래 명령을 사용하여 그것을했다 : 그것은 5 분 창 사이에 만들어지는 파일을 내게 줄 것이다 :

    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 } ' 
    

    현재 시간 스탬프로 적절하게 수정할 수 있습니다.

  3. from https://stackoverflow.com/questions/39032539/get-files-which-are-created-in-last-5-minutes-in-hadoop-using-shell-script by cc-by-sa and MIT license