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