Apache Hadoop — HDFS 와 YARN 을 한 파드에 세우고 운영한다 · MapReduce · 实验
낱말 세기와 TeraSort 를 YARN 에 올리고 카운터로 읽는다
목표
YARN 을 켜고 책 다섯 편의 낱말을 맵리듀스로 센다. 잡이 끝난 뒤 HDFS 에 남은 잡 이력(.jhist)을 열어 카운터를 읽고, 리듀서 수를 바꿨을 때 출력이 어떻게 나뉘는지, 셔플이 정렬을 어떻게 보장하는지를 TeraSort 로 확인한다.
왜 중요한가
맵리듀스는 요즘 새로 쓰는 일이 드물지만, 그 모델 — 맵이 (키, 값)을 내고, 프레임워크가 키로 모아 정렬해 넘기고(셔플), 리듀스가 키마다 합친다 — 은 Spark·Flink·SQL 엔진의 셔플이 전부 물려받았다. 셔플이 왜 비싼지, 컴바이너(맵 쪽 미리 합치기)가 왜 셔플을 줄이는지, 리듀서 수가 왜 출력 파일 수가 되는지를 여기서 가장 적나라하게 볼 수 있다.
카운터는 잡이 무엇을 했는지를 숫자로 남긴 기록이다. 맵이 몇 줄을 읽고 몇 줄을 냈는지, 컴바이너가 몇 줄로 줄였는지, 리듀스가 키 몇 개를 받았는지. 결과가 이상할 때 가장 먼저 보는 곳이고, 잡이 끝난 뒤에도 이력 파일에 남아 있다.
이 파드의 YARN 은 파드 메모리(2Gi)에 맞춰 컨테이너를 작게 잡아 두었다(AM 384MB, 맵·리듀스 256MB). 그래서 태스크가 한두 개씩 차례로 돈다 — 느려도 결과와 카운터는 같다.
단계
1. lab-hadoop start yarn 으로 YARN 을 켜고 yarn node -list -all 출력을 /root/hdp/mr/nodes.txt 에 저장하세요.
2. /data/books/book-*.txt 다섯 편을 HDFS /user/root/mr/in/ 에 올리세요.
3. 예제 jar 의 wordcount 로 /user/root/mr/in 을 세어 /user/root/mr/wc 에 쓰세요.
4. 3단계 잡의 ID(job_…)를 /root/hdp/mr/jobid.txt 에 적으세요.
5. 그 잡의 이력 파일(.jhist)에서 TaskCounter 의 MAP_INPUT_RECORDS·MAP_OUTPUT_RECORDS·COMBINE_INPUT_RECORDS·COMBINE_OUTPUT_RECORDS·REDUCE_INPUT_GROUPS·REDUCE_OUTPUT_RECORDS 를 꺼내 /root/hdp/mr/counters.json 에 쓰세요.
6. 같은 wordcount 를 리듀서 3개(-D mapreduce.job.reduces=3)로 /user/root/mr/wc3 에 쓰세요.
7. teragen 으로 10만 줄을 /user/root/mr/tera-in 에 만들고, terasort 로 /user/root/mr/tera-out 에 정렬한 뒤, teravalidate 로 /user/root/mr/tera-val 에 검증 결과를 쓰세요.
8. /root/hdp/mr/report.md 에 ## 맵과 리듀스 ## 카운터 ## 정렬 세 절을 쓰세요. 둘째 절에 5단계의 MAP_OUTPUT_RECORDS 와 COMBINE_OUTPUT_RECORDS 를 넣으세요.
참고
- 예제 jar:
/opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.5.0.jar. 실행은yarn jar <jar> wordcount <입력> <출력>. 출력 디렉터리가 이미 있으면 잡이 시작하지 않습니다. - 잡 이력:
/tmp/hadoop-yarn/staging/history/done_intermediate/root/에<잡ID>-…-<잡 이름>-…-<상태>-<대기열>-….jhist와.summary·_conf.xml. .jhist 는 첫 두 줄(형식·스키마) 뒤에 이벤트가 한 줄씩 JSON 으로 있고,JOB_FINISHED이벤트의totalCounters에 카운터가 있습니다. - 잡 하나가 1분 안팎 걸립니다. YARN 을 켜 두면 메모리를 1GB 가까이 더 쓰니, 다른 무거운 일은 함께 하지 마세요.
- 흔한 실수: 출력 디렉터리를 지우지 않고 다시 돌리는 것, 잡 ID 대신 애플리케이션 ID(
application_…)를 적는 것(숫자는 같고 이름이 다릅니다). - 공식 문서: [MapReduce Tutorial](https://hadoop.apache.org/docs/r3.5.0/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html) · [Apache Hadoop YARN](https://hadoop.apache.org/docs/r3.5.0/hadoop-yarn/hadoop-yarn-site/YARN.html) · [mapred-default.xml](https://hadoop.apache.org/docs/r3.5.0/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml) · [YARN Commands](https://hadoop.apache.org/docs/r3.5.0/hadoop-yarn/hadoop-yarn-site/YarnCommands.html)
8个步骤
- YARN 켜기
- 입력 올리기
- wordcount 돌리기
- 잡 이력 찾기
- 카운터 읽기
- 리듀서 셋이면 출력도 셋
- TeraSort — 셔플이 정렬을 만든다
- 셔플을 숫자로 남기기