Hadoop 클러스터 설정

Hadoop 클러스터 설정

이 문서는 몇 개의 노드에서 수천 노드의 극도로 큰 클러스터에 이르는 Hadoop 클러스터를 설치하고 구성하는 방법을 설명해요. Hadoop을 가지고 놀아보려면 먼저 단일 머신에 설치하고 싶을 거예요 (Single Node Setup 참고).

출처: 문서

본문

목적 (Purpose)

이 문서는 몇 개의 노드에서 수천 노드의 극도로 큰 클러스터에 이르는 Hadoop 클러스터를 설치하고 구성하는 방법을 설명해요. Hadoop을 가지고 놀아보려면 먼저 단일 머신에 설치하고 싶을 거예요 (Single Node Setup 참고). 이 문서는 High Availability 같은 고급 주제는 다루지 않아요.

중요: 모든 프로덕션 Hadoop 클러스터는 Kerberos를 사용해 호출자를 인증하고 HDFS 데이터 접근을 보호하며 계산 서비스(YARN 등) 접근을 제한해요. 이 지침은 어떤 Kerberos 서비스와의 통합도 다루지 않아요. 프로덕션 클러스터를 구축하는 모든 사람은 조직의 Kerberos 인프라에 연결하는 것을 배포의 핵심 부분으로 포함해야 해요. 클러스터를 보호하는 방법은 Security 문서를 참고하세요.

전제 조건 (Prerequisites)

  • Java를 설치해요. 알려진 좋은 버전은 Hadoop Wiki를 참고하세요.
  • Apache 미러에서 안정 버전의 Hadoop을 다운로드해요.

설치 (Installation)

Hadoop 클러스터 설치에는 보통 클러스터의 모든 머신에서 소프트웨어 압축을 풀거나 운영체제에 적합하게 패키징 시스템을 통해 설치하는 것이 포함돼요.

하드웨어를 기능별로 나누는 것이 중요해요. 보통 클러스터의 한 머신은 NameNode로, 다른 머신은 ResourceManager로 지정되며, 전적으로 그렇게만 사용돼요. 이것들이 마스터(masters)예요. 다른 서비스(Web App Proxy Server, MapReduce Job History server 같은)는 부하에 따라 보통 전용 하드웨어나 공유 인프라에서 실행돼요. 클러스터의 나머지 머신은 DataNode와 NodeManager 역할을 모두 해요. 이것들이 워커(workers)예요.

비-보안 모드에서 Hadoop 구성 (Configuring Hadoop in Non-Secure Mode)

Hadoop의 Java 구성은 두 가지 유형의 중요한 구성 파일이 관장해요:

  • 읽기 전용 기본 구성: core-default.xml, hdfs-default.xml, yarn-default.xml, mapred-default.xml
  • 사이트 특정 구성: etc/hadoop/core-site.xml, etc/hadoop/hdfs-site.xml, etc/hadoop/yarn-site.xml, etc/hadoop/mapred-site.xml

추가로 etc/hadoop/hadoop-env.sh와 etc/hadoop/yarn-env.sh를 통해 사이트 특정 값을 설정해 배포판 bin/ 디렉터리의 Hadoop 스크립트를 제어할 수 있어요.

Hadoop 클러스터를 구성하려면 Hadoop 데몬이 실행되는 환경과 Hadoop 데몬의 구성 파라미터를 구성해야 해요. HDFS 데몬은 NameNode, SecondaryNameNode, DataNode예요. YARN 데몬은 ResourceManager, NodeManager, WebAppProxy예요. MapReduce를 사용한다면 MapReduce Job History Server도 실행될 거예요. 대규모 설치에서는 이것들이 보통 별도 호스트에서 실행돼요.

Hadoop 데몬의 환경 구성 (Configuring Environment of Hadoop Daemons)

관리자는 etc/hadoop/hadoop-env.sh, 선택적으로 etc/hadoop/mapred-env.sh와 etc/hadoop/yarn-env.sh 스크립트를 사용해 Hadoop 데몬의 프로세스 환경을 사이트 특정적으로 커스터마이즈해야 해요. 최소한 각 원격 노드에서 올바르게 정의되도록 JAVA_HOME을 지정해야 해요.

관리자는 아래 표에 표시된 구성 옵션으로 개별 데몬을 구성할 수 있어요:

Daemon Environment Variable
NameNode HDFS_NAMENODE_OPTS
DataNode HDFS_DATANODE_OPTS
Secondary NameNode HDFS_SECONDARYNAMENODE_OPTS
ResourceManager YARN_RESOURCEMANAGER_OPTS
NodeManager YARN_NODEMANAGER_OPTS
WebAppProxy YARN_PROXYSERVER_OPTS
Map Reduce Job History Server MAPRED_HISTORYSERVER_OPTS

예를 들어 Namenode가 parallelGC와 4GB Java 힙을 사용하도록 구성하려면 hadoop-env.sh에 다음 문장을 추가해야 해요:

export HDFS_NAMENODE_OPTS="-XX:+UseParallelGC -Xmx4g"

etc/hadoop/hadoop-env.sh를 참고하세요.

Hadoop 데몬 구성 (Configuring the Hadoop Daemons)

이 섹션은 주어진 구성 파일에 지정할 중요한 파라미터를 다뤄요.

etc/hadoop/core-site.xml:

Parameter Value Notes
fs.defaultFS NameNode URI hdfs://host:port/
io.file.buffer.size 131072 SequenceFiles에서 사용되는 읽기/쓰기 버퍼 크기

etc/hadoop/hdfs-site.xml:

NameNode 구성:

Parameter Value Notes
dfs.namenode.name.dir 로컬 파일시스템의 경로 NameNode가 네임스페이스와 트랜잭션 로그를 영구히 저장하는 곳. 쉼표로 구분된 디렉터리 목록이면 이름 테이블이 중복성을 위해 모든 디렉터리에 복제돼요.
dfs.hosts / dfs.hosts.exclude 허용/제외된 DataNode 목록 필요하면 이 파일들을 사용해 허용 가능한 datanode 목록을 제어해요.
dfs.blocksize 268435456 대형 파일시스템을 위한 256MB의 HDFS 블록 크기
dfs.namenode.handler.count 100 많은 수의 DataNode로부터 RPC를 처리하는 더 많은 NameNode 서버 스레드

DataNode 구성:

Parameter Value Notes
dfs.datanode.data.dir 쉼표로 구분된 경로 목록 DataNode의 로컬 파일시스템에서 블록을 저장해야 하는 경로들. 쉼표로 구분된 디렉터리 목록이면 모든 지정된 디렉터리(보통 서로 다른 장치)에 데이터가 저장돼요.

etc/hadoop/yarn-site.xml:

ResourceManager와 NodeManager 구성:

Parameter Value Notes
yarn.acl.enable true / false ACL을 활성화? 기본값은 false.
yarn.admin.acl Admin ACL 클러스터에 관리자를 설정하는 ACL. ACL은 쉼표로-구분된-사용자들 공백 쉼표로-구분된-그룹들 형식이에요. 기본값은 아무나 를 의미하는 특수 값 *. 특수 값인 단순 공백은 아무도 접근하지 못함을 의미해요.
yarn.log-aggregation-enable false 로그 집계를 활성화/비활성화하는 구성

ResourceManager 구성:

Parameter Value Notes
yarn.resourcemanager.address host:port 클라이언트가 작업을 제출하는 ResourceManager host:port. 설정되면 yarn.resourcemanager.hostname에 설정된 호스트 이름을 덮어써요.
yarn.resourcemanager.scheduler.address host:port ApplicationMasters가 스케줄러와 통신하는 host:port
yarn.resourcemanager.resource-tracker.address host:port NodeManagers가 ResourceManager와 통신하는 host:port
yarn.resourcemanager.admin.address host:port 관리 명령이 ResourceManager와 통신하는 host:port
yarn.resourcemanager.webapp.address host:port ResourceManager 웹 UI의 host:port

NodeManager 상태 모니터링 (Monitoring Health of NodeManagers)

Hadoop은 관리자가 NodeManager가 노드가 건강한지 여부를 결정하기 위해 관리자 제공 스크립트를 주기적으로 실행하도록 구성할 수 있는 메커니즘을 제공해요. 관리자는 스크립트에서 선택한 어떤 검사든 수행해 노드가 건강한 상태인지 결정할 수 있어요. 스크립트가 노드가 건강하지 않은 상태라고 감지하면 표준 출력에 ERROR 문자열로 시작하는 줄을 출력해야 해요.

NodeManager는 스크립트를 주기적으로 생성해 그 출력을 검사해요. 스크립트의 출력이 위에서 설명한 대로 ERROR 문자열을 포함하면 노드의 상태가 건강하지 않은 것으로 보고되고 노드는 ResourceManager에 의해 블랙리스트 처리돼요. 이 노드에는 더 이상 태스크가 할당되지 않아요. 그러나 NodeManager는 스크립트를 계속 실행하므로, 노드가 다시 건강해지면 ResourceManager의 블랙리스트 노드에서 자동으로 제거돼요.

노드의 건강 상태와, 건강하지 않다면 스크립트의 출력은 ResourceManager 웹 인터페이스에서 관리자가 확인할 수 있어요. 노드가 건강해진 이후의 시간도 웹 인터페이스에 표시돼요.

etc/hadoop/yarn-site.xml에서 노드 건강 모니터링 스크립트를 제어하는 데 다음 파라미터를 사용할 수 있어요:

Parameter Value Notes
yarn.nodemanager.health-checker.script.path Node health script 노드의 건강 상태를 검사하는 스크립트
yarn.nodemanager.health-checker.script.opts Node health script options 노드의 건강 상태를 검사하는 스크립트 옵션
yarn.nodemanager.health-checker.interval-ms Node health script interval 건강 스크립트를 실행하는 시간 간격
yarn.nodemanager.health-checker.script.timeout-ms Node health script timeout interval 건강 스크립트 실행 타임아웃

건강 검사 스크립트는 로컬 디스크 중 일부만 나빠진 경우 ERROR를 주지 않아야 해요. NodeManager는 로컬 디스크의 건강을 주기적으로 검사할 수 있습니다 (구체적으로 nodemanager-local-dirs와 nodemanager-log-dirs를 검사해요).

워커 파일 (Slaves File / Workers file)

etc/hadoop/workers 파일에 모든 워커 호스트 이름이나 IP 주소를 한 줄에 하나씩 나열해요. 헬퍼 스크립트(아래 설명)는 etc/hadoop/workers 파일을 사용해 한 번에 많은 호스트에서 명령을 실행해요. 이것은 Java 기반 Hadoop 구성에는 사용되지 않아요. 이 기능을 사용하려면 Hadoop을 실행하는 데 사용되는 계정에 대해 ssh 신뢰(passphraseless ssh 또는 Kerberos 같은 다른 수단을 통해)가 설정되어야 해요.

Hadoop 랙 인식 (Hadoop Rack Awareness)

많은 Hadoop 컴포넌트는 랙 인식(rack-aware)이며 성능과 안전을 위해 네트워크 토폴로지를 활용해요. Hadoop 데몬은 관리자가 구성한 모듈을 호출해 클러스터의 워커 랙 정보를 얻어요. 더 구체적인 정보는 Rack Awareness 문서를 참고하세요. HDFS를 시작하기 전에 랙 인식을 구성하는 것을 강력히 권장해요.

로깅 (Logging)

Hadoop은 로깅에 Apache Commons Logging 프레임워크를 통해 Apache log4j를 사용해요. etc/hadoop/log4j.properties 파일을 편집해 Hadoop 데몬의 로깅 구성을 커스터마이즈해요 (로그 형식 등).

Hadoop 클러스터 운영 (Operating the Hadoop Cluster)

필요한 구성이 모두 완료되면 파일을 모든 머신의 HADOOP_CONF_DIR 디렉터리에 배포해요. 이것은 모든 머신에서 같은 디렉터리여야 해요. 일반적으로 HDFS와 YARN은 별도의 사용자로 실행하는 것이 권장돼요. 대부분의 설치에서 HDFS 프로세스는 'hdfs'로 실행돼요. YARN은 보통 'yarn' 계정을 사용해요.

Hadoop 시작 (Hadoop Startup)

Hadoop 클러스터를 시작하려면 HDFS와 YARN 클러스터를 모두 시작해야 해요.

HDFS를 처음 시작할 때는 포맷해야 해요. 새 분산 파일시스템을 hdfs로 포맷해요:

[hdfs]$ $HADOOP_HOME/bin/hdfs namenode -format

지정된 노드에서 hdfs로 다음 명령으로 HDFS NameNode를 시작해요:

[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon start namenode

각 지정된 노드에서 hdfs로 다음 명령으로 HDFS DataNode를 시작해요:

[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon start datanode

etc/hadoop/workers와 ssh 신뢰 접근이 구성되어 있으면(Single Node Setup 참고) 모든 HDFS 프로세스를 유틸리티 스크립트로 시작할 수 있어요. hdfs로:

[hdfs]$ $HADOOP_HOME/sbin/start-dfs.sh

지정된 ResourceManager에서 yarn으로 실행해 YARN을 시작해요:

[yarn]$ $HADOOP_HOME/bin/yarn --daemon start resourcemanager

각 지정된 호스트에서 yarn으로 스크립트를 실행해 NodeManager를 시작해요:

[yarn]$ $HADOOP_HOME/bin/yarn --daemon start nodemanager

스탠드얼론 WebAppProxy 서버를 시작해요. WebAppProxy 서버에서 yarn으로 실행해요. 로드 밸런싱과 함께 여러 서버를 사용한다면 각각에서 실행해야 해요:

[yarn]$ $HADOOP_HOME/bin/yarn --daemon start proxyserver

etc/hadoop/workers와 ssh 신뢰 접근이 구성되어 있으면(Single Node Setup 참고) 모든 YARN 프로세스를 유틸리티 스크립트로 시작할 수 있어요. yarn으로:

[yarn]$ $HADOOP_HOME/sbin/start-yarn.sh

지정된 서버에서 mapred로 다음 명령으로 MapReduce JobHistory Server를 시작해요:

[mapred]$ $HADOOP_HOME/bin/mapred --daemon start historyserver

Hadoop 종료 (Hadoop Shutdown)

NameNode와 DataNode 데몬을 중지해요:

[hdfs]$ $HADOOP_HOME/sbin/stop-dfs.sh

ResourceManager, NodeManager, ProxyServer 데몬을 중지해요:

[yarn]$ $HADOOP_HOME/sbin/stop-yarn.sh

웹 인터페이스 (Web Interfaces)

Hadoop 클러스터가 가동되면 아래 설명과 같이 컴포넌트의 웹-ui를 확인해요:

Daemon Web Interface Notes
NameNode http://nn_host:port/ 기본 HTTP 포트는 9870.
ResourceManager http://rm_host:port/ 기본 HTTP 포트는 8088.
MapReduce JobHistory Server http://jhs_host:port/ 기본 HTTP 포트는 19888.

더 알아보기 (Learn more)