Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.
1. 서버준비(4대(gsda1, gsda2, gsda3, gsda4), Lubuntu 16.04LTS 설치됨)(root로 실행)
2. 사용자 생성(모든 서버, root로 실행)
* root로 hadoop등을 설치한다.
가. adduser gooper(사용자 어플리케이션 실행)
나. adduser hadoop(필요시)
3. JDK8설치(https://tecadmin.net/install-oracle-java-8-ubuntu-via-ppa/#)(모든서버, root로 실행)
: 일반적인 방법으로 설치하면 라이센스 동의 관련 오류가 발생하는데 다.라. 과정을 통해서 라이센스 동의를 자동으로 처리하고 있다.(Silent Install)
: Oracle Java가 더이상 Ubuntu repos에 존재하지 않는다. 그래서 WebUpd8team의 PPA를 이용하여 설치한다.
가. apt-get install -y software-properties-common
나. add-apt-repository ppa:webupd8team/java && apt-get update
다. echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 select true" | debconf-set-selections
라. echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 seen true" | debconf-set-selections
마. apt-get install -y oracle-java8-installer
* 설치확인(java -version)
root@gsda1:~# java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
4. /etc/profile수정(root로 수정, 각 서버에서 실행)
가. root@gsda1:~# vi /etc/profile
#java Setting
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
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@gsda1:~# source /etc/profile
5. /etc/hosts파일 수정한다. (root로 실행, 각 서버에서 실행)
vi /etc/hosts
6. 키설정(root로 실행)
가. root@gsda1:~# 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:
SHA256:CdibP1Oxs+DTpR5bMsUQx30tfklt4RR6HdEM303pHb0 root@gsda1
The key's randomart image is:
+---[RSA 2048]----+
| .....O@|
| o o. **&|
| . o o oo*X|
| + . = oEo|
| o S + + . |
| o + * |
| * B . |
| = * |
| o |
+----[SHA256]-----+
나. /root/.ssh/에 id_rsa.pub이 생성됨, "cat id_rsa.pub >> authorized_keys"를 실행해서 파일을 만들어 주고
각 서버에 authorized_keys를 복사해준다.
==> [root@gsda1 .ssh]# cat id_rsa.pub >> authorized_keys
==> [root@gsda1 .ssh]# scp /root/.ssh/authorized_keys root@gsda2:/root/.ssh/authorized_keys에서 호스트이름만 바꿔서 각 서버에 복사해준다.
* master에서 생성하고 authorized_keys를 각서버에 복사해주면 gsda1~gsda4는 패스워드를 묻지 않고 master의 접속을 받아 들이게 된다.(상호 접근이 가능하도록 하려면 모든 서버에서 ssh-keygen을 실행후 각각의 서버에 생성된 authorized_keys 의 내용을 모아서 각서버의 authorized_keys 에 추가해준다.)
7. zookeeper설치/기동
https://www.gooper.com/ss/index.php?mid=bigdata&category=2779&document_srl=3016
8. YARN설치(root로 수행)
가. 설치할 폴더로 생성(/svc/apps/gsda/bin/hadoop)
root@gsda1:/root/.ssh# mkdir /svc
root@gsda1:/root/.ssh# mkdir /svc/apps
root@gsda1:/root/.ssh# mkdir /svc/apps/gsda
root@gsda1:/root/.ssh# mkdir /svc/apps/gsda/bin
root@gsda1:/root/.ssh# mkdir /svc/apps/gsda/bin/hadoop
나. jar파일 다운로드(http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.8.0/hadoop-2.8.0.tar.gz)및 설치할 폴더에 업로드
다. 압축풀고 링크생성
==> [root@gsda1 hadoop]# tar xvfz hadoop-2.8.0.tar.gz
==> [root@gsda1 hadoop]# ln -s hadoop-2.8.0 hadoop
* /etc/profile에 아래 정보를 추가해준다(root로 실행, 모든 서버에 적용)
# 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"
9. 필요한 경로 생성(서버모두 실행, root로 실행)
* mkdir /data, /logs 두개만 만들고 각 데몬을 띄위면 각 데몬에서 필요한 경로및 파일을 만든다
----------------------참고 경로------------------------
가. 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
나. core-site.xml
- hadoop.tmp.dir : /data/hadoop/tmp
다. 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
라. yarn-site.xml
- 파일경로 지정없음
(명령문) - 필요시 사용
root@gsda1:/hadoop/mapred:> mkdir /data/hadoop
root@gsda1:/hadoop/mapred:> mkdir /data/hadoop/tmp
root@gsda1:/hadoop/mapred:> mkdir /data/hadoop/tmp/staging
root@gsda1:/hadoop/mapred:> mkdir /data/hadoop/mapred
root@gsda1:/hadoop/mapred:> mkdir /data/hadoop/mapred/system
root@gsda1:/hadoop/mapred:> mkdir /data/hadoop/mapred/local
root@gsda1:/hadoop/mapred:> mkdir /data/hadoop/dfs
root@gsda1:/hadoop/mapred:> mkdir /data/hadoop/dfs/namenode
root@gsda1:/hadoop/mapred:> mkdir /data/hadoop/dfs/checkpoint
root@gsda1:/hadoop/mapred:> mkdir /data/hadoop/dfs/datanode
root@gsda1:/hadoop/mapred:> mkdir /data/hadoop/journal
root@gsda1:/hadoop/mapred:> mkdir /data/hadoop/journal/data
10. 설정파일 수정(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_SSH_OPTS="-p 22"
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 수정
11. 각 서버에 복사(root로 실행)
root@gsda1:~:> scp -r hadoop-2.8.0 root@gsda2:/svc/apps/gsda/bin/hadoop
12. 링크생성(root로 실행, 각서버에서 수행)
ln -s hadoop-2.8.0 hadoop
13. hadoop cluster 기동
https://www.gooper.com/ss/bigdata/3021