Hadoop 클러스터 설정
Hadoop 클러스터 설정
몇 대부터 수천 대에 이르는 Hadoop 클러스터를 설치하고 설정하는 방법을 다루는 문서예요. 각 데몬이 어디서 실행되는지, 핵심 설정 파라미터는 무엇인지, 클러스터를 어떻게 시작하고 모니터링하는지 큰 흐름을 잡아볼게요. 이 문서는 고가용성(High Availability) 같은 고급 주제는 다루지 않아요.
본문
Hadoop 데몬 구성(비보안 모드)
클러스터의 각 역할은 별도 데몬으로 실행돼요. 핵심 데몬과 그 설정 파라미터를 소개할게요.
YARN 자원 관리 관련 설정
| 파라미터 | 값 | 설명 |
|---|---|---|
yarn.acl.enable |
true / false |
ACL을 사용할지. 기본값은 false예요. |
yarn.log-aggregation-enable |
false |
로그 집계(aggregation)를 켜고 끔. |
yarn.resourcemanager.hostname |
host | 모든 yarn.resourcemanager*address 대신 단일 호스트명으로 지정. ResourceManager 컴포넌트의 기본 포트가 자동 설정돼요. |
yarn.resourcemanager.resource-tracker.address |
host:port | NodeManager들을 위한 ResourceManager 주소. |
yarn.resourcemanager.admin.address |
host:port | 관리 명령용 ResourceManager 주소. |
yarn.resourcemanager.scheduler.class |
클래스명 | 스케줄러 클래스. CapacityScheduler(권장), FairScheduler(역시 권장), FifoScheduler 중 하나. 예: org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler |
NodeManager 자원 설정
| 파라미터 | 값 | 설명 |
|---|---|---|
yarn.nodemanager.resource.memory-mb |
숫자(MB) | 해당 NodeManager가 제공할 총 물리 메모리(MB). 실행 중인 컨테이너들이 쓸 수 있는 총 자원을 정의해요. |
yarn.nodemanager.local-dirs |
경로 목록 | 중간 데이터가 쓰이는 로컬 파일 시스템 경로(콤마 구분). 경로를 여러 개 두면 디스크 I/O가 분산돼요. |
yarn.nodemanager.log-dirs |
경로 목록 | 로그가 쓰이는 로컬 경로(콤마 구분). |
yarn.nodemanager.aux-services |
mapreduce_shuffle |
MapReduce 애플리케이션이 필요로 하는 셔플 서비스. |
yarn.nodemanager.log.retain-seconds |
10800 |
로그 집계가 꺼져 있을 때 NodeManager가 로그를 보관하는 기본 시간(초). |
리소스매니저·로그 관련 설정
| 파라미터 | 값 | 설명 |
|---|---|---|
yarn.log-aggregation.retain-seconds |
-1 |
집계된 로그를 보관할 기간을 초 단위로. -1이면 비활성화. 너무 작게 잡으면 네임노드에 부담을 줄 수 있어요. |
MapReduce 작업 설정
| 파라미터 | 값 | 설명 |
|---|---|---|
mapreduce.framework.name |
yarn |
실행 프레임워크를 Hadoop YARN으로 설정. |
mapreduce.map.memory.mb |
1536 |
맵의 더 큰 자원 한도. |
mapreduce.reduce.memory.mb |
3072 |
리듀스의 더 큰 자원 한도. |
mapreduce.reduce.java.opts |
-Xmx2560M |
리듀스 자식 JVM의 더 큰 힙 크기. |
mapreduce.task.io.sort.mb |
512 |
정렬 중 데이터에 쓸 더 높은 메모리 한도. |
mapreduce.task.io.sort.factor |
100 |
정렬 중 한 번에 병합하는 스트림 수를 늘림. |
mapreduce.reduce.shuffle.parallelcopies |
50 |
아주 많은 맵의 출력을 가져올 때 리듀스가 동시에 도는 병렬 복사 수. |
MapReduce JobHistory Server
| 파라미터 | 값 | 설명 |
|---|---|---|
mapreduce.jobhistory.address |
host:port | MapReduce JobHistory Server 주소. 기본 포트는 10020. |
mapreduce.jobhistory.intermediate-done-dir |
/mr-history/tmp |
MapReduce 작업이 기록을 쓰는 디렉터리. |
mapreduce.jobhistory.done-dir |
/mr-history/done |
MR JobHistory Server가 기록을 관리하는 디렉터리. |
NodeManager 상태 확인
노드 상태 스크립트로 NodeManager의 건강 상태를 모니터링할 수 있어요.
| 파라미터 | 값 | 설명 |
|---|---|---|
yarn.nodemanager.health-checker.script.path |
노드 상태 스크립트 | 노드의 건강 상태를 확인하는 스크립트. |
yarn.nodemanager.health-checker.interval-ms |
밀리초 | 상태 스크립트 실행 간격. |
랙 인식(Rack Awareness)
Hadoop의 많은 컴포넌트는 랙 인식을 지원해서 네트워크 토폴로지를 성능과 안전에 활용해요. 데몬들은 관리자가 설정한 모듈을 호출해 워커의 랙 정보를 얻어요.
클러스터 운영
etc/hadoop/workers와 ssh 신뢰 접근이 설정돼 있으면(단일 노드 설정 참고) 유틸리티 스크립트로 YARN 전체 프로세스를 멈출 수 있어요. yarn 사용자로:
[yarn]$ $HADOOP_HOME/sbin/stop-yarn.sh
WebAppProxy 서버를 멈추려면 WebAppProxy 서버에서 yarn 사용자로 실행해요. 다중 서버에 로드 밸런싱을 쓰는 경우 각각에서 실행해야 해요:
[yarn]$ $HADOOP_HOME/bin/yarn stop proxyserver
MapReduce JobHistory Server는 지정된 서버에서 mapred 사용자로 다음과 같이 멈춰요.
웹 인터페이스
| 데몬 | 웹 인터페이스 | 설명 |
|---|---|---|
| NameNode | http://nn_host:port/ |
기본 HTTP 포트는 9870. |
| MapReduce JobHistory Server | http://jhs_host:port/ |
기본 HTTP 포트는 19888. |