View
하둡 클러스터 설치(hadoop cluster setup)
rura6502 2018. 5. 23. 10:03순서
- 머신 준비
- hadoop document 기준 권장사항 NameNode 1대,ResourceManager 1대, DataNode와 NodeManager은 일반적으로 같은 머신(하둡은 기본 3개의 복제본을 가지기 때문에 3대이상 권장)
- hadoop 사용 계정 생성
- key 기반 ssh 통신 설정
- 하둡 환경변수 및 옵션 설정
- 각 머신에 파일 배포
- 실행
기본사항(사전에 알아야 할 것들)
구성
클러스터내의 모든 시스템이 software(파일)를 가지고 있어야 함. 일반적으로 클러스터는 NameNode, ResourceManager를 각 1대 씩 세팅하고 DataNode와 NodeManager를 같이 동작시키는 machine들로 구성함. 여러가지 상황에 따라 Web App Proxy Server나 MapReduce Job History Server를 구성.
환경설정
기본환경변수 설정
환경설정파일들
- read-only default configuration : core-default.xml, hdfs-default.xml, yarn-default.xml, mapred-default.xml
- site-specific configuration : core-site.xml, hdfs-site.xml, yarn-site.xml and mapred-site.xml
주요 환경설정 값들
xml 파일에 설정되어지는 주요 환경설정 값들. hdfs가 원하는데로 동작을 하지 않거나 주소 또는 포트 조정을 하고자할 때 이 파일들을 편집하면 됨. 주요 환경설정 값들은 ClusterSetup 의 Configuring the Hadoop Daemons 섹션을 참고.
데몬구성
HDFS 데몬은 NameNode, SecondaryNameNode, DataNode로 구성되있고 YARN 데몬은 ResourceManager. NodeManager, WebAppProxy로 구성되있음. MapReduce를 쓴다면 MapReduce Job History Server를 돌려야함.
데몬 실행 옵션
etc/hadoop/hadoop-env.sh 파일 또는 상황에 따라서 mapred-env.sh, yarn-env.sh를 설정해서 데몬 실행에 옵션을 줄 수 있음.
하둡에는 여러가지 요소(hdfs, yarn 등)가 있는데 각 데몬에 옵션을 주려면 etc/hadoop/hadoop-env.sh, mapred-env.sh, yarn-env.sh 파일에 설정해서 옵션을 줄 수 있음. 각 요소별 변수는 정해져있음.
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 |
예를들어서 hdfs를 실행할 때 namenode의 옵션을 조정정하고 싶다면 etc/hadoop/hadoop-env.sh에 아래와 같이 쓰면 됨
export HDFS_NAMENODE_OPTS="-XX:+UseParallelGC -Xmx4G"
슬레이브 노드 설정
슬레이브 노드는 hadoop cluster에서 datanode, nodemanager 역할을 맡게 되는데 etc/hadoop/workers 파일에 슬레이브로 사용할 호스트 주소를 적으면 됨. 보통은 /etc/hosts 파일에 도메인을 임시로 등록하거나 등의 방법을 이용해서 도메인으로 등록하는 방식을 많이 사용함. 마스터에서는 ssh를 통해서 슬레이브와 통신하게 되는데 사전에 마스터의 ssh키를 슬레이브에 등록해야 함.
설치
ssh 설정
- Master/Slave : 하둡계정 생성
- Master : ssh 키 생성
- Master : ssh키를 각 Slave에 등록
- Master : 확인
다운로드 및 설정(개발용)
- 파일 다운로드
- 설정
- 파일배포
- 실행
1 2 3 4 5 6 7 8 9 10 11 12 | <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master.com</value> <description>hi</description> </property> <property> ..... </property> </configuration> | cs |
name |
value |
description |
-------- core-site.xml -------- |
||
fs.defaultFS |
hdfs://NN.com:9000 |
hadoop은 클라이언트(접속하고자 하는 앱 등, slave가 아님)에서 접속할 때 http, hdfs 프로토콜을 지원하는데 hdfs 프로토콜을 사용할 때 엑세스하는 master의 주소 |
hadoop.security.authorization |
false |
kerberos나 기타 인증을 통해서 hadoop을 사용할 것인지? |
hadoop.proxyuser.{계정}.hosts |
* | 클라이언트에서 master에 엑세스할 때 값에 나열된 host에서만 사용할 수 있다. 예를들어서 192.168.1.1 로 값을 지정하면 192.168.1.1에서만 {계정}을 사용하여 엑세스 해서 사용할 수 있다. 이 값과 아래 proxyuser 값들은 애플리케이션 개발하거나 다른 hadoop echosystem을 사용할 때 권한과 관련해서 많이 설정하게 되는데 예를들어서 hue(오픈소스 hadoop web UI)를 사용하려고 하면 hue는 hadoop에 'hue'라는 계정으로 엑세스하게 되는데 proxyuser 설정을 통해서 접속 허가나 권한을 주지 않으면 hue 계정은 hdfs에 접근할 수 없게 된다. |
hadoop.proxyuser.{계정}.groups |
* |
클라이언트에서 {계정}을 통해 접속하면 그 계정은 값에 나열된 그룹의 권한으로 활동이 가능하다. |
hadoop.proxyuser.{계정}.users |
* |
클라이언트에서 {계정}을 통해서 접속하면 그 계정은 값에 나열된 유저로 impersonate 한다. |
-------- hdfs-site.xml -------- |
||
dfs.namenode.name.dir |
PATH |
네임노드에서 실제로 구동에 필요한 파일이나 이미지등을 저장하는 local filesystem의 path |
dfs.datanode.data.dir |
PATH |
dfs.namenode.name.dir의 datanode 버전 |
dfs.blocksize | 134217728 | 하둡은 파일을 block 형태로 보관하는데 이 블록사이즈를 설정. 기본 128MB |
dfs.replication | 3 | 하둡은 안정성, 병렬처리 등의 이유로 block을 이 설정값에 따라 복제해서 각 데이터노드에 보관하는데 기본값은 3개. 이 때문에 기본적으로 3개 이상의 데이터노드를 권장함 |
dfs.secondary.http.address | SC.com:9868 | 하둡은 크게 NameNode, SecondaryNode, DataNode로 구성되는데 SecondaryNode의 http 접속 주소를 설정 |
dfs.permissions | false | false로 하면 파일에 대한 권한 체크를 하지 않는다. 모든 계정이 모든 파일에 엑세스할 수 있다. |
dfs.datanode.dns.namenserver | DNS 값 | 저장한 파일을 다시 받아갈 때 네임노드를 통해서 파일을 받으려고 하면 네임노드는 직접 주지 않고 '1번 데이터노드에서 받아가세요' 하면서 파일을 받을 수 있는 데이터노드의 주소를 반환하는데 1번 데이터노드의 ip주소를 돌려준다. 이 설정값을 바로 앞 주소로 설정 해 놓으면(예를들어 a.b.c.com의 경우 b.c.com)통해서 dns를 설정하면 정상적으로 도메인주소로 반환해준다. |
-------- yarn-site.xml -------- | ||
yarn.resourcemanager.address | RM.com:8032 | resource manager의 내부 통신용 포트로써 브라우저로 접속해도 아래와 같은 문구가 나옴 'It looks like you are making an HTTP request to a Hadoop IPC port. This is not the correct port for the web interface on this daemon.' |
yarn.resourcemanager.scheduler.address | RM.com:8030 | |
yarn.resourcemanager.resource-tracker.address | RM.com:8031 | |
yarn.resourcemanager.admin.address | RM.com.8033 | |
yarn.resourcemanager.webapp.address | RM.com:8088 | yarn의 web UI, 접속하면 yarn의 상태와 submission의 작업 상태등을 확인할 수 있다. |
yarn.resourcemanager.hostname | RM | yarn 관련 설정 중에 address 관련 설정들은 이 프로퍼티의 값을 가지고 뒤에 기본 포트를 붙여서 동작한다. |
yarn.nodemanager.local-dirs | PATH | slave에서 구동되는 NodeManager가 작업시 생성되는 파일들이 보관되는 local path |
yarn.nodemanager.log-dirs | PATH | NodeManager의 컨테이너 로그를 저장하는 장소 |
yarn.nodemanager.remote-app-log-dir | PATH | Where to aggregate logs to. 로그를 집계한다는데 설정 값에 따라 hdfs로도 로그가 저장이 됨. |
yarn.nodemanager.remote-app-log-suffix | logs | 이 값은 위 remote-app-log-dir 설정값에 /${user}/logs 와 같은 형태로 저장되게 해준다. |
yarn.log-aggregation-enable | true | 로그를 수집할 것인지, 말것인지 설정. 이 값을 true로 하면 app(사용자가 yarn으로 보낸 사용자 프로그램)이 완료되고나서 remote-app-log-** 설정값에 따라 로그가 저장되고 Application Timeline Server를 통해서 볼 수 있음. |
yarn.nodemanager.resource.memory-mb | -1 | MB 단위, 컨테이너에 할당할 physical memory. 이 값이 -1이고 yarn.nodemanager.reousrce.detect-hardware-capabilities가 true면 자동으로 계산됨. 아니면 기본값 8192MB로 잡힘. |
yarn.nodemanager.resource.detect-hardware-capabilities | true | yarn에서 memory와 cpu를 auto-detection해서 여러 값들을 자동으로 적절한 값으로 설정해주게 허락해준다 |
-------- mapred-default.xml -------- | ||
mapreduce.framework.name | yarn | MapReduce job을 실행하기 위한 runtime framework. local/classic/yarn 이 설정 가능함 |
mapreduce.jobhistory.address | JH.com:10020 | JobHistoryServer의 IPC 주소 |
mapreduce.jobhistory.webapp.address | JH.com:19888 | JobHistoryServer의 web ui, JobHistoryServer는 경험상으로는 yarn을 쓰고 다른 hadoop-echosystem의 요소들을 쓰게되면 그 요소들이 yarn의 mapreduce 작업을 사용하는 경우가 생기는데 그 mapreduce 작업에 대한 history를 관리하는 역할을 하는 것 같다. |
mapreduce.jobhistory.intermediate-done-dir | PATH |
|
mapreduce.jobhistory.done-dir | PATH |
배포 및 실행
// 마스터 노드에서 각 슬레이브 노드로 파일전송 커맨드 예제
#scp -r /opt/apache-hadoop root@SL0.com:/opt/apache-hadoop
// 각 노드에 접속해서 하둡 폴더 권한 모두 변경하면서 같이 링크생성
#chown hadoop:hadoop apache-hadoop -R
#ln -sf apache-hadoop hadoop
#chown hadoop:hadoop hadoop -R
실행파일은 hadoop/sbin 파일 안에 있는 명령어를 주로 사용하는데 3가지 정도가 메인으로 보면된다.
- start/stop-all.sh : hdfs(namenode, secondarynode, datanode), yarn(resource-manager, node-manager) 모두 실행하거나 종료
- start/stop-hdfs.sh : hdfs만 실행/종료
- start/stop-yarn.sh : yarn만 실행/종료
- mr-jobhistory-daemon.sh : Job History server 실행/종료
$jps
이 명령어를 통해서도 프로세스가 잘올라와있는지 확인할 수 있다.