Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.
설치
하둡 클러스터 설치는 일반적으로 머신에 소프트웨어를 압축을 해제하거나 RPM을 설치하는 것을 얘기한다. 일반적으로 클러스터의 한 대의 머신은 네임노드로 사용되고 나머지 머신은 리소스매니져로 이용된다. 이들이 마스터이다. 나머지 클러스터의 머신들은 데이터노드와 노드매니져이다. 이것이 슬레이브이다.
Non-secure 모드로 하둡 클러스터 기동하기
다음 섹션은 하둡 클러스터를 어떻게 설정하는지에 대해 설명한다. 하둡 설정에 이용되는 두가지 타입의 주요한 설정 파일은 다음과 같가.
- Read-only default configuration - core-default.xml, hdfs-default.xml, yarn-default.xml and mapred-default.xml.
- Site-specific configuration - conf/core-site.xml, conf/hdfs-site.xml, conf/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
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
- fs.defaultFS - NameNode URI (hdfs://host:port)
- io.file.buffer.size - 시퀀스 파일을 쓸때 사용되는 read/write 버퍼 사이즈
- dfs.namenode.name.dir - 네임노드가 네임스페이스와 트랜잭션로그를 저장할 로컬 파일시스템 경로. 콤마로 분리된 디렉토리리스트면 redundancy를 위해 네임테이블은 복제된다.
- dfs.namenode.hosts / dfs.namenode.hosts.exclude - 포함 또는 제외될 데이터노드 리스트 (필요하다면 접근 데이터노드 리스트를 관리하기 위해 사용할 수 있다.)
- dfs.blocksize - 대용량 파일 시스템을 위한 HDFS 블럭사이즈 (256MB)
- dfs.namenode.handler.count - 많은 수의 데이터노드로 부터 RPC를 처리할 네임 노드 스레드 수 (100)
- 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초로 계산할 것이다
- 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_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