욱'S 노트

Hadoop - 클러스터 세팅 본문

Programming/Hadoop

Hadoop - 클러스터 세팅

devsun 2015. 3. 20. 10:12

목적


이 문서는 몇개의 노드부턴 수천개의 이르는 노드까지 주요한 하둡 클러스터를 어떻게 설치하고, 설정하고 관리하는지에 대해 설명한다.


먼저 할 일


일단 하둡 릴리이즈 버젼을 다운로드 하자.


설치


하둡 클러스터 설치는 일반적으로 머신에 소프트웨어를 압축을 해제하거나 RPM을 설치하는 것을 얘기한다. 일반적으로 클러스터의 한 대의 머신은 네임노드로 사용되고 나머지 머신은 리소스매니져로 이용된다. 이들이 마스터이다. 나머지 클러스터의 머신들은 데이터노드와 노드매니져이다. 이것이 슬레이브이다.


Non-secure 모드로 하둡 클러스터 기동하기


다음 섹션은 하둡 클러스터를 어떻게 설정하는지에 대해 설명한다. 하둡 설정에 이용되는 두가지 타입의 주요한 설정 파일은 다음과 같가.

  • Read-only default configuration - core-default.xmlhdfs-default.xmlyarn-default.xml and mapred-default.xml.
  • Site-specific configuration - conf/core-site.xmlconf/hdfs-site.xmlconf/yarn-site.xml and conf/mapred-site.xml.


추가적으로 배포판의 bin/ 디렉토리에서 있는 하둡 스크립트파일(conf/hadoop-env.sh 과 yarn-env.sh)을 수정함으로써 사이트에 맞는 값을 세팅할 수 있다. 하둡 클러스터를 설정하기 위해 하둡 데몬의 환경과 하둡 데몬의 설정 파라미터를 이해할 필요가 있다. 하둡 데몬은 네임노드/데이터노드와 리소스매니져/노드매니져 이다.


하둡 데몬 환경 설정하기


관리자는 conf/hadoop-env.sh과 conf/yarn-env.sh 스크립트를 수정하여 사이트에 맞는 하둡 데몬 프로세스 환경을 커스터마이징할 수 있다. 적어도 각 원격 노드에 JAVA_HOME은 정확하게 지정해야 한다. 많은 경우 하둡 데몬을 수행할려고 하는 유저에 의해 작성될 수 있는 HADDOP_PID_DIR과 HADDOP_SECURE_DN_PID_DIR 디렉토리를 명시해야 한다.  그렇지 않으면 symlink attack의 잠재적인 위험이 발생한다.


관리자는 다음 있는 속성을 설정함으로써 개별적인 데몬 설정을 할 수 있다.


  • NameNode - HADOOP_NAMENODE_OPTS
  • DataNode - HADOOP_DATANODE_OPTS
  • Secondary NameNode - HADOOP_SECONDARYNAMENODE_OPTS
  • ResourceManager - YARN_RESOURCEMANAGER_OPTS
  • NodeManager - YARN_NODEMANAGER_OPTS
  • WebAppProxy - YARN_PROXYSERVER_OPTS
  • Map Reduce Job History Server - HADOOP_JOB_HISTORYSERVER_OPTS
예를 들어 네임노드를 parallelGC를 사용하고 싶다면 hadoop-env.sh에 다름과 같은 문장을 추가하면 된다.

export HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC ${HADOOP_NAMENODE_OPTS}"


다른 유용한 설정 파라미터는 다음과 같다.


  • HADOOP_LOG_DIR / YARN_LOG_DIR - 데몬의 로그 파일이 저장될 디렉토리. 존재하지 않으면 자동적으로 생성한다.
  • HADDOP_HEAPSIZE / YARN_HEAPSIZE - 최대 사용할 수 있는 힙사이즈. 만약 1000이라고 세팅하면 1000MB가 할당 된다. 데몬을 위한 힙사이즈 설정시 사용된다. 기본은 1000이다.
  • ResourceManager - YARN_RESOURCEMANAGER_HEAPSIZE
  • NodeManager - YARN_NODEMANAGER_HEAPSIZE
  • WebAppProxy - YARN_PROXYSERVER_HEAPSIZE
  • Map Reduce Job History Server - HADOOP_JOB_HISTORYSERVER_HEAPSIZE
하둡 데몬 No-Secure모드 설정하기

이번 섹션의 내용은 주어진 설정 파일에 중요한 파라미터들을 설명한다.

conf/core-site.xml

  • fs.defaultFS - NameNode URI (hdfs://host:port)
  • io.file.buffer.size - 시퀀스 파일을 쓸때 사용되는 read/write 버퍼 사이즈

conf/hdfs-site.xml

네임노드 설정

  • dfs.namenode.name.dir - 네임노드가 네임스페이스와 트랜잭션로그를 저장할 로컬 파일시스템 경로. 콤마로 분리된 디렉토리리스트면 redundancy를 위해 네임테이블은 복제된다.
  • dfs.namenode.hosts / dfs.namenode.hosts.exclude - 포함 또는 제외될 데이터노드 리스트 (필요하다면 접근 데이터노드 리스트를 관리하기 위해 사용할 수 있다.)
  • dfs.blocksize - 대용량 파일 시스템을 위한 HDFS 블럭사이즈 (256MB)
  • dfs.namenode.handler.count - 많은 수의 데이터노드로 부터 RPC를 처리할 네임 노드 스레드 수 (100)

데이터노드 설정

dfs.datanode.data.dir - 콤마로 분리된 데이터노드가 블럭을 저장할 로컬 파일 시스템 리스트 (redundancy를 위해 복제될 것이다.)

conf/yarn-site.xml
리소스매니져 및 노드매니져 설정
  • yarn.acl.enable - acl 활셩화 여부. 기본값은 false
  • yarn.admin.acl - Admin ACL. ALC은 콤마로 분리된 유저 스페이스 콤마로 분리된 그룹. 기본값은 *은 모두를 의미하고 단순한 스페이스는 아무도 접근할 수 없다는 것을 의미한다.
  • yarn.log-aggregation-enable - 로그 조합을 가능하게 할지 설정. 기본값은 false.

리소스매니져 설정
  • yarn.resourcemanager.address - 작업 요청을 위한 클라이언트를 위한 리소스매니져 host:port. 세팅하면 yarn.resourcemanager.hostname의 호스트명이 오버라이드된다.
  • yarn.resourcemanager.scheduler.address - 어플리케이션마스터들와 스케쥴러간의 요청을 주고 받기 위한 리소스매니져 host:port. 만약 세팅하면 yarn.resourcemanager.hostname의 호스트명이 오버라이드된다.
  • yarn.resourcemanager.resource-tracker.address - 노드매니져를 위한 리소스매니져 host:port. 세팅하면 yarn.resourcemanager.hostname의 호스트명이 오버라이드된다.
  • yarn.resourcemanager.admin.address - 어드민 커맨드를 위한 리소스매니져 host:port. 세팅하면 yarn.resourcemanager.hostname의 호스트명이 오버라이드된다.
  • yarn.resourcemanager.webapp.address - 리소스매니져 웹UI host:port. 세팅하면 yarn.resourcemanager.hostname의 호스트명이 오버라이드된다.
  • yarn.resourcemanager.hostname - 리소스매니져 호스트. 하나의 호스트명은 yarn.resourcemanager.*.address의 호스트명으로 세팅된다. 결과적으로 포트는 리소스매니져 컴포넌트의 기본값을 사용하게 된다.
  • yarn.resourcemanager.scheduler.class - 리소스매니져 스케쥴러 클래스. CapacityScheduler(추천), FairScheduler(추천) 또는 FifoScheduler
  • yarn.scheduler.minimum-allocation-mb - 리소스 매니져의 각 컨테이너 요청에 할당될 최소 메모리
  • yarn.scheduler.maximum-allocation-mb - 리소스 매니져의 각 컨테이너 요청에 할당될 최대 메모리
  • yarn.resourcemanager.nodes.include-path/yarn.resourcemanager.nodes.exclude-path - 노드매니져 포함 또는 제외 리스트. (필요하다면 접근 노드매니져 리스트를 관리하기 위해 사용할 수 있다.)
노드매니져 설정
  • yarn.nodemanager.resource.memory-mb - 노드매니져에게 주어진 이용가능한 물리 메모리. 노드매니져에 총 이용가능한 리소스는 실행중인 컨테이너를 사용될 수 있게 정의되어야 한다.
  • yarn.nodemanager.vmem-pmem-ratio - 물리 메모리를 초과하였을 경우 작업이 사용할 가상 메모리의 비율. 각 작업의 메모리 사용량은 물리 메모리 사용량을 비율에 따라 초과할 수 있다.
  • yarn.nodemanager.local-dirs - 콤마로 분리된 중간데이터를 작성할 로컬 파일시스템의 경로 리스트. 멀티 패스는 디스크 I/O를 분산한다.
  • yarn.nodemanager.log-dirs - 콤마로 분리된 로그를 작성할 로컬 파일시스템의 경로 리스트, 멀티 패스는 디스크 I/O를 분산한다.
  • yarn.nodemanager.log.retain-seconds - 노드매니져의 로그 파일을 획득하기 위한 기본 시간. log-aggregation이 비활성화 되었을 경우에만 적용된다.
  • yarn.nodemanager.remote-app-log-dir - 어플리케이션 수행완료시 어플리케이션 로그를 옮길 HDFS 디렉토리, 적당한 권한이 필요하고 log-aggregation이 활성화 되었을 경우에만 적용된다. (logs)
  • yarn.nodemanager.remote-app-log-dir-suffix - 리모트 로그 디렉토리에 붙는 suffix. 로그는 ${yarn.nodemanager.remote-app-log-dir}/${user}/{$thisParam}. log-aggregation이 활성화 되었을 경우에만 적용된다. (logs)
  • yarn.nodemanager.aux-services - 맵리듀스 어플리케이션을 위해 세팅될 필요가 있는 shuffle 서비스 (mapreduce_shuffle)

히스토리 서버 설정
  • yarn.log-aggregation.retain-seconds - 어플리케이션 aggregation 로그를 유지하는 시간. 너무 작게 설정하면 네임노드에 스팸이 될 수 있다. (기본값 : -1)
  • yarn.log-aggregation.retain-check-interval-seconds - aggregation 로그 유지를 위해 체크하는 시간 인터벌. 0 이나 음수로 세팅하면 0.1초로 계산할 것이다

conf/mapred-site.xml

맵리듀스 어플리케이션 설정
  • mapreduce.framework.name - Hadoop YARN을 위한 실행 프레임워크(yarn)
  • mapreduce.map.memory.mb - 맵을 위해 사용될 리소스 용량(1536)
  • mapreduce.map.java.opts - 맵의 자식 jvm의 힙사이즈(-Xmx1024m)
  • mapreduce.reduce.memory.mb - 리듀스를 위해 사용될 리소스 용량(3072)
  • mapreduce.reduce.java.opts - 리듀스의 자식 jvm의 힙사이즈 (-Xmx2560m)
  • mapreduce.task.io.sort.mb - 데이터 소팅을 위해 사용될 메모리 사이즈 (512)
  • mapreduce.task.io.sort.factor - 파일 소팅중 한번에 머지할 수 있는 스트림(100)
  • mapreduce.reduce.shuffle.parallelcopies - 맵의 데이터를 패치하기 위해 리듀스에 의해 생성될 병렬 복사본 수

맵리듀스 잡히스토리 서버 설정
  • mapreduce.jobhistory.address - 맵리듀스 작업히스토리 서버 host:port(디폴트 - 10020)
  • mapreduce.jobhistory.webapp.address - 맵리듀스 작업히스터리 서버 웹 UI host:port(디폴트 : 19888)
  • mapreduce.jobhistory.inrermediate-done-dir - 맵리듀스 작업으로 작성된 히스트로 파일이 위치할 디렉토리 (/mr-history/tmp)
  • mapreduce.jobhistory.done-dir - 맵리듀스 작업히스토리 서버에 의해 관리될 히스토리 파일 디렉토리 (/mr-history/done)
Hadoop Rack Awareness

HDFS와 YARN의 컴포넌트들은 rack-aware이다. 네임노드와 리소스매니져는 어드민 설정 모듈에 할당된 API를 호출하기 위해 클러스터 슬레이브의 랙정보를 획득한다. API는 DNS명 또는 ip에 대한 rack id 정보를 유지한다. 사이트 특화된 모듈은 topology.node.switch.mapping.impl 아이템 설정을 활용해 설정될 수 있다. 기본 구현은 topology.script.file.name을 사용해 설정된 script/command를 실행 할 수 있다. 만약 topology.script.file.name이 세팅되어 있지 않다면 모든 전달된 IP address에 기본값을 반환할 것이다

Monitoring Health of NodeManagers

하둡은 관리자로 부터 노드의 헬스체크를 위해 주기적으로 어드민이 제공한 스크립트를 실행하기 위해 노드매니져를 설정할 수 있는 매커니즘을 제공한다. 관리자는 스크립트를 통해 체크를 수행함으로써 노드의 정상여부를 판단할 수 있다. 만약 스크립트가 노드가 죽었다고 판단하면 ERROR와 함께 표준출력으로 추력해야한다. 노드매니져는 주기적으로 스크립트를 실행하고 그것을 결과를 체크한다. 만약 스크립트의 출력이 ERROR를 포함하고 있다면 노드의 상태는 비정상으로 리포트되고 리소스매니져에 의해 노드는 블랙리스트화 된다. 그리고 노드에는 더 이상 작업이 할당되지 않을 것이다. 하지만 노드매니져가 스크립트 수행을 계속하면 노드가 정상으로 판별될 수 있다. 그럴 경우 리소스매니져는 자동으로 블랙리스트에서 제거할 것이다. 노드의 정상여부에 따라 만약 비정상이라면 리소스매니져 웹인터페이스에서 관리자는 조회할 수있다. 노드가 언제 부터 정상인지 또한 웹 인터페이스에 디스플레이에 나타난다. 다음은 노드 정상여부 모니터링 스크립트의 설정을 조정하는 방법인다.

conf/yarn-site.xml

yarn.nodemanager.health-checker.script.path - 노드 헬스상태를 체크하는 스크립트
yarn.nodemanager.health-checker.script.opts - 노드 헬스상태 스크립트를 위한 옵션
yarn.nodemanager.health-checker.script.interval-ms - 헬스 스크립트 수행을 위한 타임 인터벌
yarn.nodemanager.health-checker.script.timeout-ms - 헬스 스크립트 수행을 위한 타임아웃

헬스 체크 스크립트는 로컬 디스크 문제와 같은 에러면 수행될 수 없다. 노드매니져는 로컬 디스크의 정상여부를 주기적으로 체크하고 불량 디렉토리수가 yarn.nodemanager.disk-health-check.min-healthy-disk 에 설정된 임계점에 도달 하면 비정상으로 마크하고 해당 정보를 리소스매니져로 전송한다. 헬스 체크 스크립트에 의해 부트 디스크가 레이드 되어 있는지 실패인지를 판별한다.

Slave files

일반적으로 네임노드 전용으로 동작할 하나의 머신을 선택하고 리소스매니져 전용으로 동작할 하나의 머신을 선택한다. 그리고 나머지를 데이터노드 또는 노드매니져 즉 슬레이브로 사용한다. 모든 슬레이브의 호스트명 혹은 아이피 주소는 conf/slaves 파일에 명시되어야 한다.

Logging

하둡은 로깅을 위해 log4j를 사용한다. conf/log4j.properties를 수정하므로써 하둡 데몬의 로깅 설정을 커스터마이징할 수 있다.

Hadoop Cluster 오퍼레이팅

Hadoop Startup

하둡 클러스터를 시작하기 위해 HDFS와 YARN 클러스터를 모두 시작해야 한다.


새로운 분산 파일시스템 포맷하기: $ $HADOOP_PREFIX/bin/hdfs namenode -format <cluster_name>

네임노드로 지정된 HDFS 시작하기 $ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs start namenode

모든 슬레이브에 있는 데이터노드 시작하기 $ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs start datanode

리소스 매니져로 지정된 YARN 시작하기 $ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR start resourcemanager

모든 슬레이브에 있는 노드매니져 시작하기 $ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR start nodemanager

WebAppProxy서버 시작하기. 로드밸런싱을 위해 여러대를 구동할 경우 각각 수행한다. $ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh start proxyserver --config $HADOOP_CONF_DIR

맵리듀스 작업히스토리 서버 구동하기 $ $HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh start historyserver --config $HADOOP_CONF_DIR

Hadoop Shutdown 네임노드 중지 $ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop namenode

데이터노드 중지 $ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop datanode

리소스매니져 중지 $ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop resourcemanager

노드매니져 중지 $ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop nodemanager

WebaAppProxy서버 중지 $ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh stop proxyserver --config $HADOOP_CONF_DIR

맵리듀스 작업히스토리 서버 중지 $ $HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh stop historyserver --config $HADOOP_CONF_DIR




'Programming > Hadoop' 카테고리의 다른 글

MapReduce 시작하기  (0) 2014.12.22
MapReduce 개요  (0) 2014.12.22
HDFS - FileSystem API 맛보기  (0) 2014.12.18
HDFS 개발 시작하기(java)  (0) 2014.12.18
HDFS 개요  (0) 2014.12.17
Comments