LabHub
배우기 러닝패스 코스

Apache Hadoop — 1つのPodにHDFSとYARNを立てて運用する

1 ポッドの HDFS にファイルを置き、二つの道で読む

LabHub 에서 이어서 보기

한국어 원문으로 표시합니다.

목표

파드 하나에 뜬 의사 분산 HDFS 의 설정과 상태를 확인하고, 접근 로그 하나를 올려 셸(hdfs dfs)과 HTTP(WebHDFS) 두 길로 읽는다. 파일을 옮기는(mv) 일이 NameNode 의 이름표만 바꾸는 일이라는 것을 fileId 와 블록 ID 로 확인한다.

왜 중요한가

HDFS 는 역할을 둘로 나눈 파일 시스템이다. NameNode 는 디렉터리 트리와 '이 파일은 어떤 블록들이고 그 블록은 어느 DataNode 에 있다' 는 메타데이터를 메모리에 들고 있고, DataNode 는 블록의 바이트를 자기 디스크에 파일로 들고 있다. 클라이언트는 NameNode 에게 자리를 묻고 바이트는 DataNode 와 직접 주고받는다. 이 분리를 알면 운영의 많은 것이 설명된다. 이름 바꾸기와 옮기기는 바이트를 건드리지 않으니 크기와 상관없이 즉시 끝나고, NameNode 가 멈추면 바이트가 멀쩡해도 아무것도 읽을 수 없다. 설정이 어디서 오는지(*-site.xml*-default.xml 을 덮는다)도 같은 이유로 중요하다 — 클라이언트와 데몬이 서로 다른 설정을 보면 같은 명령이 다르게 동작한다. WebHDFS 는 같은 NameNode 에 HTTP 로 묻는 길이다. 자바 클라이언트 없이 curl 하나로 목록·상태·내용을 받을 수 있어서, 스크립트와 모니터링은 대개 이 길을 쓴다.

단계

  1. hdfs getconf -confKeyfs.defaultFS·dfs.replication·dfs.blocksize 를 물어 /root/hdp/first/conf.txt키=값 세 줄로 쓰세요.
  2. hdfs dfsadmin -report 출력을 /root/hdp/first/report.txt 에 저장하세요.
  3. HDFS 에 /user/root/first/logs 디렉터리를 만드세요.
  4. /data/logs/access-2026-03-01.log/user/root/first/logs/ 에 올리세요.
  5. hdfs dfs -cat 으로 그 파일의 줄 수를 세어 /root/hdp/first/lines.txt 에 정수로 적으세요.
  6. curl 로 WebHDFS 의 LISTSTATUS 를 불러 /user/root/first/logs 목록 응답을 /root/hdp/first/liststatus.json 에 저장하세요.
  7. /user/root/first/archive 를 만들고 로그 파일을 /user/root/first/archive/access-0301.log 로 옮긴 뒤, hdfs fsck <새 경로> -files -blocks 출력을 /root/hdp/first/blocks.txt 에 저장하세요.
  8. /root/hdp/first/report.md## 두 역할 ## 두 길 ## 이름만 바뀐다 세 절을 쓰세요. 둘째 절에 5단계의 줄 수를, 셋째 절에 옮기기 전후 같았던 fileId 를 넣으세요.

참고

설정은 어디서 오나

hdfs getconf -confKey <키>fs.defaultFS, dfs.replication, dfs.blocksize 세 값을 물어 /root/hdp/first/conf.txtfs.defaultFS=값 처럼 키=값 세 줄로 쓰세요.

앞의 둘은 이 이미지가 core-site.xml·hdfs-site.xml 에서 바꾼 값이고, 블록 크기는 아무도 바꾸지 않아 hdfs-default.xml 의 기본값이 나옵니다. 사이트 파일이 기본 파일을 덮는다는 규칙이 이 셋에서 다 보입니다.

NameNode 가 보는 클러스터

hdfs dfsadmin -report 의 출력을 /root/hdp/first/report.txt 에 저장하세요.

보고서의 위쪽은 클러스터 전체(용량·사용량·복제 부족 블록), 아래쪽은 DataNode 마다의 상태입니다. 살아 있는 DataNode 가 몇 대인지, 설정된 용량이 얼마인지 보세요. 채점기는 같은 숫자를 NameNode 의 JMX 에서 읽어 견줍니다.

HDFS 안에 자리 만들기

HDFS 에 /user/root/first/logs 디렉터리를 만드세요(중간 디렉터리까지).

hdfs dfs -mkdir -p 입니다. 디렉터리는 NameNode 의 메타데이터에만 있고 DataNode 에는 아무것도 생기지 않습니다 — 디렉터리에는 블록이 없습니다.

파일 올리기

로컬 /data/logs/access-2026-03-01.log 를 HDFS /user/root/first/logs/ 에 같은 이름으로 올리세요.

hdfs dfs -put 은 NameNode 에게 블록 자리를 받아 DataNode 로 바이트를 흘려 보냅니다. 올리는 동안에는 ._COPYING_ 이 붙은 이름으로 있다가 끝나면 제 이름이 됩니다. 채점기는 길이와 내용을 로컬 원본과 견줍니다.

셸로 읽기

hdfs dfs -cat 으로 /user/root/first/logs/access-2026-03-01.log 를 읽어 줄 수를 세고 /root/hdp/first/lines.txt 에 정수로 적으세요.

hdfs dfs -cat 경로 | wc -l. 바이트는 DataNode 에서 직접 옵니다. 로컬 원본과 줄 수가 같은지도 스스로 견줘 보세요.

HTTP 로 읽기 — WebHDFS

curl 로 http://localhost:9870/webhdfs/v1/user/root/first/logs?op=LISTSTATUS&user.name=root 를 불러 응답 JSON 을 /root/hdp/first/liststatus.json 에 그대로 저장하세요.

응답의 FileStatuses.FileStatus 에 파일마다 길이·블록 크기·복제 계수·소유자·fileId(아이노드 번호)가 들어 있습니다. fileId 를 기억해 두세요 — 다음 단계에서 옮긴 뒤에도 같은지 봅니다.

옮기기는 이름표만 바꾼다

HDFS 에 /user/root/first/archive 를 만들고 로그 파일을 /user/root/first/archive/access-0301.loghdfs dfs -mv 하세요. 그다음 hdfs fsck /user/root/first/archive/access-0301.log -files -blocks 출력을 /root/hdp/first/blocks.txt 에 저장하세요.

mv 는 NameNode 안에서 이름만 바꿉니다. 그래서 fileId 가 그대로이고 블록 ID 도 그대로이며, 파일이 1TB 여도 즉시 끝납니다. 채점기는 6단계에 저장한 fileId 와 지금의 fileId, 그리고 여러분이 저장한 블록 ID 와 지금의 블록 ID 를 견줍니다.

두 역할을 숫자로 남기기

/root/hdp/first/report.md## 두 역할 ## 두 길 ## 이름만 바뀐다 세 절을 쓰세요. 둘째 절에 5단계의 줄 수를, 셋째 절에 옮기기 전후 같았던 fileId 를 숫자로 넣으세요.

첫 절에는 NameNode 와 DataNode 가 각각 무엇을 들고 있는지, 둘째 절에는 셸과 WebHDFS 가 같은 파일을 어떻게 보여 줬는지, 셋째 절에는 mv 뒤에 무엇이 그대로였는지를 적으세요.