Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.
1. 서버준비(5대, CentOS설치, Jdk설치)(root로 실행)
2. SSH설정(root로 실행)
가. [root@sda1 ~]# ssh-keygen -t rsa -P ""
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
69:08:3e:f2:60:6f:29:90:a9:64:e5:7a:d8:9f:11:5c root@sda1
The key's randomart image is:
+--[ RSA 2048]----+
| |
| |
| .. E |
| oo..... . |
|+o+.oo. S |
|+o+= o.. |
|.o.o=. |
| .o. o |
| o |
+-----------------+
나. /root/.ssh/에 id_rsa.pub이 생성됨, "cat id_rsa.pub >> authorized_keys"를 실행해서 파일을 만들어 주고
각 서버에 authorized_keys를 복사해준다.
==> [root@sda1 .ssh]# cat id_rsa.pub >> authorized_keys
==> [root@sda1 .ssh]# scp -P 22 /root/.ssh/authorized_keys root@sda2:/root/.ssh/authorized_keys에서 호스트이 름만 바꿔서 각 서버에 복사해준다.
* master에서 생성하고 authorized_keys를 각서버에 복사해주면 node1~node4는 패스워드를 묻지 않고 master의 접속을 받아 들이게 된다.
(상호 접근이 가능하도록 하려면 모든 서버에서 ssh-keygen을 실행후 각각의 서버에 생성된 authorized_keys 의 내용을 모아서
각서버의 authorized_keys 에 추가해준다.)
3. /etc/hosts파일 수정및 5개 서버에 복사/배포(root로 실행)
scp -P 22 /etc/hosts root@sda1:/etc/hosts
scp -P 22 /etc/hosts root@sda2:/etc/hosts
scp -P 22 /etc/hosts root@so1:/etc/hosts
scp -P 22 /etc/hosts root@so2:/etc/hosts
scp -P 22 /etc/hosts root@so-db2:/etc/hosts
4. hadoop계정 생성(모든 서버에서 수행해줌, root로 실행)
가. adduser hadoop
나. passwd hadoop
5. /etc/profile수정(모든 서버에서 수행해줌, root로 수정)
가. [root@sda1 ~]# vi /etc/profile
export JAVA_HOME=/opt/jdk1.8.0_66
export PATH="$JAVA_HOME/bin:$PATH"
export CLASSPATH=".:$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar"
export CATALINA_OPTS="Djava.awt.headless=true"
나. 변경내용 반영(각서버에서 모두 실행해줌) : [root@sda1 ~]# source /etc/profile
6. YARN설치(root로 수행)
가. 설치할 폴더로 생성및 이동 : mkdir /svc/apps/sda/bin/hadoop
나. jar파일 다운로드 :
[root@sda1 hadoop]# wget http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz
다. 압축풀어서 링크생성
==> [root@sda1 hadoop]# tar xvfz hadoop-2.7.2.tar.gz
==> [root@sda1 hadoop]# ln -s hadoop-2.7.2 hadoop
7. /etc/profile수정(root로 수행)후 각 서버에 scp한후 각 서버에서 "source /etc/profile"로 반영시켜준다.
#java Setting
export JAVA_HOME=/opt/jdk1.8.0_66
export PATH="$JAVA_HOME/bin:$PATH"
export CLASSPATH=".:$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar"
export CATALINA_OPTS="Djava.awt.headless=true"
# Hadoop Path
export HOME=/svc/apps/sda/bin/hadoop
export HADOOP_PREFIX=$HOME/hadoop
export PATH=$PATH:$HADOOP_PREFIX/bin
export PATH=$PATH:$HADOOP_PREFIX/sbin
export HADOOP_HOME=$HOME/hadoop
export HADOOP_MAPRED_HOME=${HADOOP_PREFIX}
export HADOOP_COMMON_HOME=${HADOOP_PREFIX}
export HADOOP_HDFS_HOME=${HADOOP_PREFIX}
export YARN_HOME=${HADOOP_PREFIX}
export HADOOP_YARN_HOME=${HADOOP_PREFIX}
export HADOOP_CONF_DIR=${HADOOP_PREFIX}/etc/hadoop
# Native Path
export HADOOP_COMMON_LIB_NATIVE_DIR=${YARN_HOME}/lib/native
export HADOOP_OPTS="-Djava.library.path=$YARN_HOME/lib"
8. 필요한 경로 생성(서버모두 실행, root로 실행)
* mkdir /data, /logs 두개만 만들고 각 데몬을 띄위면 각 데몬에서 필요한 경로및 파일을 만든다
----------------------파일관련 경로 지정(참고)------------------------
가. etc/hadoop/hdfs-site.xml
- dfs.namenode.name.dir : /data/hadoop/dfs/namenode
- dfs.namenode.checkpoint.dir : /data/hadoop/dfs/checkpoint
- dfs.datanode.data.dir : /data/hadoop/dfs/datanode
- dfs.journalnode.edits.dir : /data/hadoop/dfs/journal/data
나. etc/hadoop/core-site.xml
- hadoop.tmp.dir : /data/hadoop/tmp
다. etc/hadoop/mapreduce-site.xml
- mapred.system.dir : /data/hadoop/mapred/system
- mapred.local.dir : /data/hadoop/mapred/local
- mapreduce.jobtracker.staging.root.dir : /data/hadoop/tmp/staging
라. etc/hadoop/yarn-site.xml
- 파일경로 지정없음
(파일 경로 생성 명령문 - hadoop관련 데몬이 실행되면서 자동으로 생성되지 않는 경우 개별 생성해줄것)
root@sda1:/hadoop/mapred:> mkdir /data/hadoop
root@sda1:/hadoop/mapred:> mkdir /data/hadoop/tmp
root@sda1:/hadoop/mapred:> mkdir /data/hadoop/tmp/staging
root@sda1:/hadoop/mapred:> mkdir /data/hadoop/mapred
root@sda1:/hadoop/mapred:> mkdir /data/hadoop/mapred/system
root@sda1:/hadoop/mapred:> mkdir /data/hadoop/mapred/local
root@sda1:/hadoop/mapred:> mkdir /data/hadoop/dfs
root@sda1:/hadoop/mapred:> mkdir /data/hadoop/dfs/namenode
root@sda1:/hadoop/mapred:> mkdir /data/hadoop/dfs/checkpoint
root@sda1:/hadoop/mapred:> mkdir /data/hadoop/dfs/datanode
root@sda1:/hadoop/mapred:> mkdir /data/hadoop/journal
root@sda1:/hadoop/mapred:> mkdir /data/hadoop/journal/data
9. 설정파일 수정(master에서 수정후 나머지는 scp명령으로 복사한다, root로 실행)
가. hdfs-site.xml
나. yarn-site.xml
다. mapred-site.xml
라. core-site.xml
마. hadoop-env.sh, yarn-env.sh: JAVA_HOME값 및 log경로 저장
바. hadoop-env.sh(아래 환견경수 추가)
(export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_PREFIX}/lib/native
export HADOOP_OPTS="${HADOOP_OPTS} -Djava.library.path=$HADOOP_PREFIX/lib"
#export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/hadoop/hadoop/share/hadoop/mapreduce:/hadoop/hadoop/share/hadoop/mapreduce/lib:$HIVE_HOME/lib:$HIVE_HOME/conf
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/svc/apps/sda/bin/hadoop/hadoop/share/hadoop/mapreduce:/svc/apps/sda/bin/hadoop/hadoop/share/hadoop/mapreduce/lib:$HIVE_HOME/lib:$HIVE_HOME/conf
#export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/hadoop/hadoop-2.5.2/share/hadoop/common/postgresql-9.3-1103.jdbc4.jar
)
* hadoop-env.sh에서 HADOOP_LOG_DIR값을 log파일이 저장될 경로로 지정한다.
#export HADOOP_LOG_DIR=${HADOOP_LOG_DIR}/$USER
export HADOOP_LOG_DIR=/logs/hadoop
* yarn-env.sh에서 YARN_LOG_DIR값을 지정하여 log파일이 저장될 경로로 지정한다.
export YARN_LOG_DIR=/logs/hadoop
사. slaves
아. masters
10. 각 서버에 복사(root로 실행)
root@sda1:~:> scp -r -P 22 hadoop-2.7.2 root@sda2:/svc/apps/sda/bin/hadoop
11. namenode포맷
root@sda1:~:> hdfs namenode -format
12. zookeeper설치/기동
https://www.gooper.com/ss/index.php?mid=bigdata&category=2779&document_srl=3016
13. zkfc포맷
root@sda1:~:> hdfs zkfc -formatZK
14. hadoop cluster 기동
https://www.gooper.com/ss/index.php?mid=bigdata&category=2789&document_srl=3021