LabHub
배우기 러닝패스 코스

Apache Hadoop — HDFS 와 YARN 을 한 파드에 세우고 운영한다 · 스냅샷과 휴지통 · 실습

실수로 지운 파일을 휴지통과 스냅샷에서 되살린다

LabHub 에서 이어서 보기

목표

주문 폴더에 스냅샷을 허용하고 찍은 뒤, 셸의 rm 으로 지운 파일은 휴지통에서, -skipTrash 로 지운 파일은 스냅샷에서 되살린다. 파일을 고친 뒤 두 스냅샷의 차이를 보고, 스냅샷이 있는 디렉터리가 통째로 지워지지 않는 것과 스냅샷 이름을 바꾸는 것까지 해 본다.

왜 중요한가

지운 파일을 되살리는 길은 둘이고 성격이 다르다. 휴지통은 클라이언트(셸) 가 하는 일이다 — hdfs dfs -rm 이 파일을 지우는 대신 사용자 홈의 .Trash/Current 로 옮긴다. 그래서 -skipTrash 를 주거나, 셸이 아닌 프로그램(Spark·API)이 지우면 휴지통을 거치지 않는다.
스냅샷은 NameNode 가 하는 일이다. 스냅샷을 찍는 순간의 디렉터리 트리를 메타데이터로 기억하고, 그 뒤에 무엇이 지워지거나 바뀌어도 스냅샷 쪽 블록은 지우지 않는다. 데이터를 복사하지 않으므로 찍는 것은 즉시 끝나고, 대신 스냅샷이 붙잡고 있는 블록만큼 공간이 반환되지 않는다.
운영에서는 둘을 함께 쓴다. 휴지통은 사람의 실수를, 스냅샷은 잡의 실수(잘못된 overwrite, 지운 파티션)를 되돌린다. 차이 보고(snapshotDiff)는 '어제부터 무엇이 바뀌었나' 를 답하고, distcp 의 증분 복사도 이것을 쓴다.

단계

1. /snap/ordersa.csv(=/data/finance/q1.csvb.csv(=q2.csvc.csv(=/data/small/sensor-0000.csv)를 올리고 스냅샷을 허용하세요(hdfs dfsadmin -allowSnapshot).
2. 스냅샷 s1 을 찍으세요(hdfs dfs -createSnapshot /snap/orders s1).
3. hdfs dfs -rm /snap/orders/a.csv 로 a.csv 를 지우세요(휴지통으로 갑니다).
4. hdfs dfs -rm -skipTrash /snap/orders/b.csv 로 b.csv 를 지운 뒤, /snap/orders/.snapshot/s1/b.csv 에서 복사해 되살리세요.
5. c.csv 끝에 줄 하나를 덧붙이고(-appendToFile), 스냅샷 s2 를 찍은 뒤 hdfs snapshotDiff /snap/orders s1 s2 출력을 /root/hdp/snap/diff.txt 에 저장하세요.
6. hdfs dfs -rm -r -skipTrash /snap/orders 를 해 보고 오류 출력을 /root/hdp/snap/deny.txt 에 저장하세요.
7. 스냅샷 s2 의 이름을 before-audit 로 바꾸세요(hdfs dfs -renameSnapshot).
8. /root/hdp/snap/report.md## 휴지통 ## 스냅샷 ## 지킬 것 세 절을 쓰세요. 둘째 절에 5단계 차이 보고의 줄 수(머리줄 제외)를 넣으세요.

참고

8단계

  1. 스냅샷을 허용하기
  2. 스냅샷 s1 찍기
  3. rm 은 휴지통으로 옮긴다
  4. -skipTrash 로 지운 것은 스냅샷에서
  5. 두 스냅샷의 차이
  6. 스냅샷이 디렉터리를 지킨다
  7. 스냅샷 이름 바꾸기
  8. 되살리는 두 길을 남기기