Hadoop 완전분산 설치

■ Hadoop 완전분산 모드 설치에 대해 알아보고자 한다. 먼저 설치하려는 서버 정보는 아래와 같으며 각 서버간 통신을 원활히 하기 위한 ssh 공개키 분배는 이미 완료된것으로 가정한다. 참고 ssh 자동 로그인

Hadoop 설치 대상 서버 정보
Host NameIP용도
centos01192.168.192.128Master Node
centos02192.168.192.130Slave Node
centos03192.168.192.133Data Node 1
centos04192.168.192.132Data Node 2
centos05192.168.192.131Data Node 3

■ 각 서버의 /etc/hosts 파일 정보

127.0.0.1   localhost
::1         localhost
192.168.192.128 centos01
192.168.192.130 centos02
192.168.192.133 centos03
192.168.192.132 centos04
192.168.192.131 centos05

■ 프로그램 설치 정보

NameVersionLocationSymbolic Link
JDKjdk1.7.0_79/usr/local/java
Mavenapache-maven-3.3.3/usr/local/maven
Hadoophadoop-2.6.0/usr/local/hadoop

■ Symbloic Link – 위의 표에 명시된 각 서버의 /usr/local 디렉토리에서 아래와 같이 symbloic link 작업을 한다.

[nextman@centos01 ~]$ cd ~
[nextman@centos01 ~]$ cd /usr/local
[nextman@centos01 local]$ ln -s apache-maven-3.3.3/ maven
[nextman@centos01 local]$ ln -s hadoop-2.6.0/ hadoop
[nextman@centos01 local]$ ln -s jdk1.7.0_79 java

■ 일반사용자(‘nextman’)의 .bash_profile 파일 편집을 아래와 같이 한다.

[nextman@centos01 ~]$ vi ~/.bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

alias tstart='/usr/local/tomcat/bin/catalina.sh start'
alias tstop='/usr/local/tomcat/bin/catalina.sh stop'
alias tstat='ps ax | grep tomcat'
alias tlog='tail -f /usr/local/tomcat/logs/catalina.out &'

export JAVA_HOME=/usr/local/java
export TOMCAT_HOME=/usr/local/tomcat
export MAVEN_HOME=/usr/local/maven
export HADOOP_HOME=/usr/local/hadoop

PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$MAVEN_HOME/bin:$TOMCAT_HOME/bin:$JAVA_HOME/bin:$PATH:$HOME/.local/bin:$HOME/bin

export PATH

[nextman@centos01 ~]$ source ~/.bash_profile

■ 일반사용자(‘nextman’)의 .bashrc 파일 편집을 아래와 같이 한다.

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

export JAVA_HOME=/usr/local/java

# User specific aliases and functions

■ 모든 서버(5대, centos01~05)에서 hadoop에서 사용할 데이터 디렉토리를 생성한다.

[nextman@centos01 ~]$ mkdir /home/data/hadoop/tmp
[nextman@centos01 ~]$ mkdir /home/data/hadoop/dfs/name
[nextman@centos01 ~]$ mkdir /home/data/hadoop/dfs/data

■ 모든 서버(총 5대, centos01~05)의 core-site.xml파일을 아래와 같이 편집한다. /home/data/hadoop 이하의 디렉토리는 소유권을 nextman 사용자가 가지도록 한다.

[nextman@centos01 ~]$ vi /usr/local/hadoop/etc/hadoop/core-site.xml
<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://centos01:9000</value>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/home/data/hadoop/tmp</value>
  </property>
</configuration>

■ 모든 서버(5대, centos01~05)의 hdfs-site.xml파일을 아래와 같이 편집한다.

[nextman@centos01 ~]$ vi /usr/local/hadoop/etc/hadoop/hdfs-site.xml
<configuration>
<property>
  <name>dfs.replication</name>
  <value>3</value>
</property>
<property>
  <name>dfs.namenode.name.dir</name>
  <value>file:/home/data/hadoop/dfs/name</value>
  <final>true</final>
</property>
<property>
  <name>dfs.datanode.data.dir</name>
  <value>file:/home/data/hadoop/dfs/data</value>
  <final>true</final>
</property>
<property>
  <name>dfs.permissions</name>
  <value>false</value>
</property>
<property>
  <name>dfs.http.address</name>
  <value>centos01:50070</value>
</property>
<property>
  <name>dfs.secondary.http.address</name>
  <value>centos02:50090</value>
</property>
<property>
  <name>fs.checkpoint.dir</name>
  <value>/home/data/hadoop/checkpoint</value>
</property>
<property>
  <name>fs.checkpoint.period</name>
  <value>360</value>
</property>
<property>
  <name>dfs.backup.address</name>
  <value>centos02:50100</value>
</property>
<property>
  <name>dfs.backup.http.address</name>
  <value>centos02:50105</value>
</property>
</configuration>

■ 모든 서버(5대, centos01~05)의 mapred-site.xml파일을 아래와 같이 편집한다.

[nextman@centos01 ~]$ cd /usr/local/hadoop/etc/hadoop/
[nextman@centos01 ~]$ cp mapred-site.xml.template mapred-site.xml
[nextman@centos01 ~]$ vi /usr/local/hadoop/etc/hadoop/mapred-site.xml
<configuration>
  <property>
    <name>mapred.job.tracker</name>
    <value>centos01:9001</value>
  </property>
</configuration>

■ 모든 서버(5대, centos01~05)의 masters파일을 아래와 같이 편집한다. 이 파일이 없으면 새로 생성한다.

[nextman@centos01 ~]$ vi /usr/local/hadoop/etc/hadoop/masters
centos01

■ 모든 서버(5대, centos01~05)의 workers파일을 아래와 같이 편집한다.(hadoop 2.x.x버전에서는 파일명이 slaves이고 3.x.x버전에서는 workers로 변경된 듯 하다.)

[nextman@centos01 ~]$ vi /usr/local/hadoop/etc/hadoop/workers
centos02
centos03
centos04
centos05

네임노드(centos01)에서 네임노드 포맷 – 반드시 네임노드상에서 실행해야됨
$HADOOP_HOME/etc/hadoop/hdfs-site.xml의 dfs.namenode.name.dir에 명시된 디렉토리(여기서는 /home/data/hadoop/dfs/name)가 hdfs 파일 포맷으로 포맷된다. 이 디렉토리가 없으면 생성되고 이 디렉토리 하위에 current 디렉토리가 생성된 것을 확인할 수 있다.

[nextman@centos01 ~]$ /usr/local/hadoop/bin/hdfs namenode -format
...
[nextman@centos01 name]$ pwd
/home/data/hadoop/dfs/name
[nextman@centos01 name]$ ls
current

■ hadoop 시작 – 이전 버전에서는 $HADOOP_HOME/sbin/start-all.sh로 hadoop을 시작 하였으나 hadoop 버전 hadoop-2.6.0에서는 $HADOOP_HOME/sbin/start-dfs.sh, $HADOOP_HOME/sbin/start-yarn.sh 스크립트를 실행하는 것으로 변경되었다.

[nextman@centos01 sbin]$ pwd
/usr/local/hadoop/sbin
[nextman@centos01 sbin]$ ./start-dfs.sh
[nextman@centos01 sbin]$ ./start-dfs.sh
Starting namenodes on [centos01]
centos01: starting namenode, logging to /usr/local/hadoop-2.6.0/logs/hadoop-nextman-namenode-centos01.out
centos04: starting datanode, logging to /usr/local/hadoop-2.6.0/logs/hadoop-nextman-datanode-centos04.out
centos05: starting datanode, logging to /usr/local/hadoop-2.6.0/logs/hadoop-nextman-datanode-centos05.out
centos02: starting datanode, logging to /usr/local/hadoop-2.6.0/logs/hadoop-nextman-datanode-centos02.out
centos03: starting datanode, logging to /usr/local/hadoop-2.6.0/logs/hadoop-nextman-datanode-centos03.out
Starting secondary namenodes [centos02]
centos02: starting secondarynamenode, logging to /usr/local/hadoop-2.6.0/logs/hadoop-nextman-secondarynamenode-centos02.out
[nextman@centos01 sbin]$ ./start-yarn.sh
starting yarn daemons
starting resourcemanager, logging to /usr/local/hadoop-2.6.0/logs/yarn-nextman-resourcemanager-centos01.out
centos04: starting nodemanager, logging to /usr/local/hadoop-2.6.0/logs/yarn-nextman-nodemanager-centos04.out
centos05: starting nodemanager, logging to /usr/local/hadoop-2.6.0/logs/yarn-nextman-nodemanager-centos05.out
centos02: starting nodemanager, logging to /usr/local/hadoop-2.6.0/logs/yarn-nextman-nodemanager-centos02.out
centos03: starting nodemanager, logging to /usr/local/hadoop-2.6.0/logs/yarn-nextman-nodemanager-centos03.out

■ http://[Namenode IP]:50070으로 접속해서 설치된 hadoop의 상태를 확인한다. – http://192.168.192.128:50070

■ jps로 hadoop 실행 확인

■ jps로 hadoop 실행 확인

# centos01(master node)에서 hadoop 실행 확인
[nextman@centos01 sbin]$ jps
7147 NameNode
7404 ResourceManager
1543 Bootstrap
7663 Jps

# centos02(secondary name node)에서 hadoop 실행 확인
[nextman@centos02 hadoop]$ jps
4067 Jps
3951 NodeManager
3789 DataNode
3856 SecondaryNameNode

# centos03(data node)에서 hadoop 실행 확인
[nextman@centos03 ~]$ jps
2339 Jps
2128 DataNode
2227 NodeManager

# centos04(data node)에서 hadoop 실행 확인
[nextman@centos04 ~]$ jps
2336 Jps
2125 DataNode
2224 NodeManager

# centos05(data node)에서 hadoop 실행 확인
[nextman@centos05 ~]$ jps
2236 NodeManager
2348 Jps
2136 DataNode

■ hadoop 종료 – master node(namenode, centos01)에서 hadoop를 종료한다. $HADOOP_HOME/sbin/stop-yarn.sh, $HADOOP_HOME/sbin/stop-dfs.sh 스크립트를 실행한다.

■ hadoop 종료 – master node(namenode, centos01)에서 hadoop를 종료한다. $HADOOP_HOME/sbin/stop-yarn.sh, $HADOOP_HOME/sbin/stop-dfs.sh 스크립트를 실행한다.

[nextman@centos01 sbin]$ pwd
/usr/local/hadoop/sbin
[nextman@centos01 sbin]$ ./stop-yarn.sh
stopping yarn daemons
stopping resourcemanager
centos04: stopping nodemanager
centos03: stopping nodemanager
centos05: stopping nodemanager
centos02: stopping nodemanager
centos04: nodemanager did not stop gracefully after 5 seconds: killing with kill -9
centos03: nodemanager did not stop gracefully after 5 seconds: killing with kill -9
centos05: nodemanager did not stop gracefully after 5 seconds: killing with kill -9
centos02: nodemanager did not stop gracefully after 5 seconds: killing with kill -9
no proxyserver to stop
[nextman@centos01 sbin]$ ./stop-dfs.sh
Stopping namenodes on [centos01]
centos01: stopping namenode
centos04: stopping datanode
centos02: stopping datanode
centos05: stopping datanode
centos03: stopping datanode
Stopping secondary namenodes [0.0.0.0]
0.0.0.0: stopping secondarynamenode
[nextman@centos01 sbin]$

■ 관리 편의를 위한 설정 1 – hadoop 디렉토리 symbloic link
hadoop이 설치된 디렉토리로 빨리 이동하기 위해서 일반 사용자 홈 디렉토리에 hadoop설치 디렉토리에 대한 링크 생성

[nextman@centos02 ~]$ pwd
/home/nextman
[nextman@centos02 ~]$ ln -s /usr/local/hadoop-2.6.0 hadoop

■ 관리 편의를 위한 설정 2 – logs 디렉토리 symbloic link
logs 디렉토리가 커질 수 있기 때문에 /usr/local/hadoop-2.6.0/logs 디렉토리를 삭제하고 디스크 여유공간이 비교적 있는 /home/data/hadoop/디렉토리에 logs 디렉토리 생성

[nextman@centos02 hadoop] pwd
/usr/local/hadoop-2.6.0
[nextman@centos02 hadoop] rm -rf logs
[nextman@centos02 hadoop] mkdir /home/data/hadoop/logs
[nextman@centos02 hadoop] ln -s /home/data/hadoop/logs logs

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다