수정 전에 복구 지점 만들기

빅 데이터Beginner
지금 연습하기

소개

지역 워크숍에서는 공간별 활동 일정, 방문객 연락처, 출입 안내를 공유 HDFS 폴더에 보관합니다. 일정을 수정하기 전에, 현재 폴더가 변경된 뒤에도 승인된 파일을 확인할 수 있는 복구 지점이 필요합니다.

먼저 정상 데이터를 읽고 일반 소유자 자격으로 HDFS의 네이티브 스냅샷을 만든 다음, 범위를 제한한 두 가지 변경을 수행합니다. HDFS 경로, 파일 업로드, 디렉터리, 소유자와 그룹의 기본 권한을 이미 알고 있어야 합니다. 이 실습에서는 스냅샷과 이력 경로를 소개합니다. 처음부터 끝까지 Terminal을 사용하세요. 모든 데이터는 다른 실습과 독립적입니다. 읽기와 일반적인 실수 복구를 포함한 저자의 예상 소요 시간은 40분입니다.

수정 전에 승인된 파일 보존하기

이 단계에서는 운영 중인 활동 일정을 읽고 이름이 있는 복구 지점을 만듭니다. Terminal에서 시작하세요. cd는 이 셸의 로컬 작업 디렉터리를 변경합니다. HDFS 명령에서 /user/labex/로 시작하는 경로는 로컬 디스크가 아닌 HDFS에 속합니다.

cd /home/labex/project

현재 일정을 읽습니다.

hdfs dfs -cat /user/labex/snapshot-workshop/team/schedule.csv

쉼표로 구분된 필드는 공간과 그곳의 활동을 나타냅니다.

room,session
A,Printmaking
B,Bookbinding

팀 폴더에는 contacts.csv와 notes.txt도 있습니다. 내용을 나열합니다.

hdfs dfs -ls /user/labex/snapshot-workshop/team

이 정상 공유 파일의 소유자는 labex, 그룹은 bigdata입니다. 준비된 사용자 analyst는 이 그룹에 속하며 읽을 수 있지만 쓸 수는 없습니다. 여러분은 일반 소유자이며 NameNode의 서비스 계정인 hdfs가 아닙니다. 이 교육 환경은 단순 인증을 사용하며 Kerberos 보안을 시연하지 않습니다.

스냅샷은 이름을 붙인 특정 시점의 디렉터리를 보여 주는 읽기 전용 이력 보기입니다. 관리자는 이 과정의 폴더에만 스냅샷 기능을 켜 두었습니다. 실제 복구 지점은 직접 만듭니다. -createSnapshot에는 현재 디렉터리를 지정한 다음 스냅샷 이름을 지정합니다.

hdfs dfs -createSnapshot /user/labex/snapshot-workshop/team morning-approved

응답에는 .snapshot/morning-approved로 끝나는 HDFS 네이티브 경로가 표시됩니다. 특수 경로 요소인 .snapshot은 이력을 선택합니다. -mkdir로 만드는 일반 백업 디렉터리가 아닙니다. 이력의 일정을 읽습니다.

hdfs dfs -cat /user/labex/snapshot-workshop/team/.snapshot/morning-approved/schedule.csv

동일한 두 가지 승인된 활동이 들어 있습니다. 이력 파일 세 개를 모두 나열합니다.

hdfs dfs -ls /user/labex/snapshot-workshop/team/.snapshot/morning-approved

스냅샷에는 원래 연락처와 출입 안내도 포함됩니다. 명령에 No such file or directory가 표시되면 경로의 철자를 이 목록과 비교한 뒤 실패한 읽기만 다시 실행하세요. -createSnapshot이 이름이 이미 있다고 알리면 삭제하거나 다시 만들지 말고 해당 스냅샷을 살펴보세요. 환경 설정을 다시 실행하지 마세요. 기존 작업을 덮어쓰지 않도록 재실행을 거부합니다.

이제 수정 전의 실제 복구 지점이 있습니다. 로컬로 다운로드한 사본이나 같은 이름의 일반 폴더로는 이 HDFS 네이티브 이력을 만들 수 없습니다.

이력과 나중에 추가된 작업 비교하기

이 단계에서는 유효한 새 작업을 추가하고 제한된 실수를 만든 뒤 스냅샷이 변경되지 않았음을 확인합니다. 같은 Terminal에서 계속하세요.

나중에 추가할 워크숍 활동 파일은 로컬에 준비되어 있습니다. 먼저 읽습니다.

cat /home/labex/project/incoming/late-session.csv

공간 C와 Paper Folding이 들어 있습니다. 현재 팀 폴더에 업로드합니다. 이 파일은 현재 일정의 일부이며 이후 어떤 복구에서도 보존해야 합니다.

hdfs dfs -put /home/labex/project/incoming/late-session.csv /user/labex/snapshot-workshop/team/late-session.csv

-chgrp로 올바른 공유 그룹을 유지합니다. 파일 모드 640은 소유자에게 읽기와 쓰기, 그룹에 읽기를 허용하며, 다른 사용자에게는 파일 접근을 허용하지 않습니다.

hdfs dfs -chgrp bigdata /user/labex/snapshot-workshop/team/late-session.csv
hdfs dfs -chmod 640 /user/labex/snapshot-workshop/team/late-session.csv

이제 의도적으로 잘못된 대체 파일을 살펴봅니다.

cat /home/labex/project/incoming/schedule-draft.csv

A,CANCELLED가 들어 있습니다. 다음 업로드는 지정한 현재 일정 파일만 의도적으로 덮어씁니다. -f는 해당 대상의 교체를 허용합니다. 여기에서는 통제된 수정이기 때문에만 사용합니다. 스냅샷에는 영향을 주지 않습니다.

hdfs dfs -put -f /home/labex/project/incoming/schedule-draft.csv /user/labex/snapshot-workshop/team/schedule.csv

두 번째 통제된 실수는 현재 연락처 파일만 삭제합니다. 먼저 정확한 경로를 확인합니다.

hdfs dfs -ls /user/labex/snapshot-workshop/team/contacts.csv
hdfs dfs -rm /user/labex/snapshot-workshop/team/contacts.csv

와일드카드, 재귀 삭제, 팀 루트 경로를 사용하지 마세요. 변경된 일정을 읽은 다음 이력 버전을 읽습니다.

hdfs dfs -cat /user/labex/snapshot-workshop/team/schedule.csv
hdfs dfs -cat /user/labex/snapshot-workshop/team/.snapshot/morning-approved/schedule.csv

현재 결과에는 취소가 표시되지만 이력에는 Printmaking과 Bookbinding이 남아 있습니다. 실제 공유 읽기 계정으로 이력의 연락처를 읽습니다. sudo -u analyst는 이 일반 테스트 계정으로 해당 클라이언트만 실행합니다. 클라이언트의 절대 경로는 준비된 HDFS 도구를 선택합니다.

sudo -u analyst /usr/local/bin/hdfs dfs -cat /user/labex/snapshot-workshop/team/.snapshot/morning-approved/contacts.csv

현재 연락처 파일이 없어도 주소는 여전히 visitors@example.test입니다. 현재 목록을 확인합니다.

hdfs dfs -ls /user/labex/snapshot-workshop/team

변경된 일정, 변경되지 않은 안내, 새 활동이 들어 있습니다. 앞서 새 파일을 업로드할 때 대상이 이미 있다는 메시지가 나왔다면 삭제하거나 업로드 범위를 넓히지 말고 기존 파일을 읽으세요. 삭제를 반복했을 때 연락처가 없다고 나오면 통제된 삭제가 이미 수행된 것입니다. 목록을 살펴보고 계속하세요.

이 최종 상태를 그대로 두세요. 다음 실습에서는 독립적으로 손상된 환경을 준비하여 복구를 가르칩니다. 스냅샷은 HDFS와 저장소를 공유합니다. 해당 블록은 독립적인 백업 사본이 아니므로 전체 저장소 시스템의 손실로부터 보호하지 않습니다.

요약

수정 전에 HDFS 네이티브 스냅샷을 만들고, 보호된 이력 파일과 변경된 현재 폴더를 구분했습니다. 나중에 추가한 활동은 현재 일정에만 있으므로 폴더 전체를 이력으로 교체하면 유효한 작업을 잃게 됩니다. 또한 실제 공유 읽기 계정인 analyst로 이력을 읽었습니다.