쉘 스크립트를 사용하여 수정된 날짜를 사용하여 필터링하여 hdfs 폴더에서 다른 hdfs 위치로 파일을 복사합니다.

쉘 스크립트를 사용하여 수정된 날짜를 사용하여 필터링하여 hdfs 폴더에서 다른 hdfs 위치로 파일을 복사합니다.

HDFS 위치에 1년 간의 데이터가 있고 지난 6개월 동안의 데이터를 다른 HDFS 위치에 복사하고 싶습니다. hdfs 명령에서 직접 6개월치의 데이터를 복사할 수 있습니까? 아니면 지난 6개월치의 데이터를 복사하려면 쉘 스크립트를 작성해야 합니까?

나는 성공하지 않고 이 작업을 수행하기 위해 hdfs 명령을 사용해 보았습니다.

아래 쉘 스크립트를 사용해 보았고 TempFile이 생성될 때까지 제대로 작동하지만 오류가 발생합니다.

$ sh scriptnew.sh
scriptnew.sh: line 8: syntax error: unexpected end of file

스크립트는 더 이상 실행되지 않습니다.

아래는 제가 사용하는 쉘 스크립트입니다.

#!/bin/bash
hdfs dfs -ls /hive/warehouse/data.db/all_history/ |awk 'BEGIN{ SIXMON=60*60*24*180; "date +%s" | getline NOW } { cmd="date -d'\''"$6" "$7"'\'' +%s"; cmd | getline WHEN; DIFF=NOW-SIXMON; if(WHEN > DIFF){print $8}}' >> TempFile.txt
cat TempFile.txt |while read line
do
    echo $i
    hdfs dfs -cp -p $line /user/can_anns/all_history_copy/;
done

오류는 무엇이며 해결 방법은 무엇입니까?

답변1

hdfs 위치에서 다른 위치로 6개월 파일을 복사하려면 다음 스크립트를 사용할 수 있습니다.

스크립트는 로컬 Linux 위치에서 실행되어야 합니다.

#!/bin/bash
hdfs dfs -ls /hive/warehouse/data.db/all_history/ |awk 'BEGIN{ SIXMON=60*60*24*180; "date +%s" | getline NOW } { cmd="date -d'\''"$6" "$7"'\'' +%s"; cmd | getline WHEN; DIFF=NOW-SIXMON; if(WHEN > DIFF){print $8}}' >> TempFile.txt
cat TempFile.txt |while read line
do
   echo $i
   hdfs dfs -cp -p $line /user/can_anns/all_history_copy/;
done

2행: 최대 180일까지의 파일 목록을 TempFile에 복사합니다. 그런 다음 이 임시 파일을 반복하고 일치하는 항목이 있으면 파일을 복사합니다.

Windows에서 스크립트를 작성하여 Linux 시스템에 복사하면 때로는 작동하지 않고 구문 오류가 표시될 수 있습니다. 캐리지 리턴 오류를 방지하려면 스크립트를 Linux 시스템의 로컬 경로에 복사하고 다음 명령을 실행하십시오. sed -i 's/\r//' 그런 다음 스크립트를 실행하십시오 >>>sh 파일명.sh

관련 정보