본문 바로가기

Development/Hadoop

Hadoop_1.2.1 설치 및 설정

- 시스템 구성

window 7 with VMWare(CentOS 6.6 - 4대)

완전분산모드

 호스트명

 하둡 설치 내용

 사양

 wikibooks01

 네임노드(NameNode)

 1G, 40G

 wikibooks02

 보조네임노드(SecondaryNameNode), 데이터노드(DataNode)

 

 wikibooks03

 데이터노드

 

 wikibooks04

 데이터노드

 



- wget 설치

ftp 이용해서 필요한 파일들을 업로드 하지않고 서버에서 바로 다운로드 하기 위해서 설치


# yum 을 이용하여 wget 을 설치한다.

[root@wikibooks01 local]# yum install wget



- hosts 파일 수정

각 서버를 hosts 파일에 기록한다.


[hadoop@wikibooks01 conf]$ vi /etc/hosts

192.168.40.101  wikibooks01

192.168.40.102  wikibooks02

192.168.40.103  wikibooks03

192.168.40.104  wikibooks04


- iptables 설정

CentOS 를 설치하면 기본적인 포트를 제외하고는 모두 막혀있다. 따라서 하둡설치시 마스터 와 슬레이브 간의 통신이 제한된다.

하둡 데몬들이 사용 여러 포트를 모두 열어두도록 설정 하거나,

iptables 데몬 정지 및 서비스 off 를 해두면 된다.(위험하나, 테스트용 하둡설정 이므로 나는 이렇게 했다.)

[root@wikibooks02 ~]# /etc/init.d/iptables stop

[root@wikibooks02 ~]# chkconfig iptables off



- java 설치

64bit CentOS 이므로 64bit java 를 다운받아 설치 한다.


# /usr/local/ 경로에 위치 시킨다.


jdk-8u74-linux-x64.gz 를 755 권한으로 변경한다.

[root@wikibooks01 local]# chmod 755 jdk-8u74-linux-x64.gz


# 압축푼다.

[root@wikibooks01 local]# tar xvzf ./jdk-8u74-linux-x64.gz


# 심볼릭링크 생성한다.

[root@wikibooks01 local]# ln -s jdk1.8.0_74 ./java


# 환경변수 등록 한다.

[root@wikibooks01 local]# vi /etc/profile

export JAVA_HOME=/usr/local/java

export PATH=$PATH:$JAVA_HOME/bin

export CLASS_PATH="."


# source 명령을 실행한다.

[root@wikibooks01 local]# source /etc/profile


# java 어디에 설치 되어있느냐?

[root@wikibooks01 usr]# which java, 

/usr/local/java/bin/java


# java version

[root@wikibooks01 usr]# java -version

java version "1.8.0_74"

Java(TM) SE Runtime Environment (build 1.8.0_74-b02)

Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode)



- Hadoop 설치

# hadoop 계정 만들기

[root@wikibooks01 src]# adduser hadoop


# hadoop 다운로드 받기

# hadoop 계정으로 변경한후, http://apache.mirror.cdnetworks.com/hadoop/common/ 에서 설치하고자 하는 버전의 소스를 다운받는다.

[root@wikibooks01 ~]# su - hadoop

[hadoop@wikibooks01 ~]$ wget http://apache.mirror.cdnetworks.com/hadoop/common/hadoop-1.2.1/hadoop-1.2.1.tar.gz


# hadoop 압축파일 풀기

[hadoop@wikibooks01 ~]$ tar xvzf ./hadoop-1.2.1.tar.gz


# 링크파일 생성

[hadoop@wikibooks01 ~]$ ln -s ./hadoop-1.2.1 hadoop


# JAVA_HOME 설정

[hadoop@wikibooks01 conf]$ vi hadoop-env.sh

export JAVA_HOME=/usr/local/java


# HADOOP_PID_DIR 설정

하둡 데몬의 PID 정보를 저장하는 경로

[hadoop@wikibooks01 conf]$ vi hadoop-env.sh

export HADOOP_PID_DIR=/home/hadoop/hadoop-1.2.1/pids


# masters 수정

보조네임노드를 실행할 서버를 설정

[hadoop@wikibooks01 conf]$ vi masters

#localhost

wikibooks02


# slaves 수정

데이터노드를 실행할 서버를 설정

[hadoop@wikibooks01 conf]$ vi slaves

#localhost

wikibooks02

wikibooks03

wikibooks04


# core-site.xml 수정

[hadoop@wikibooks01 conf]$ vi core-site.xml

<configuration>

  <!-- HDFS 의 기본 이름 -->

  <property>

    <name>fs.default.name</name>

    <value>hdfs://wikibooks01:9000</value>

  </property>

  <!-- 하둡에서 발생하는 임시 데이터를 저장하기 위한 공간 -->

  <property>

    <name>hadoop.tmp.dir</name>

    <value>/home/hadoop/hadoop-data/</value>

  </property>

</configuration>


# hdfs-site.xml 수정

[hadoop@wikibooks01 conf]$ vi hdfs-site.xml

<configuration>

  <!-- HDFS의 저장될 데이터의 복제본 개수 -->

  <property>

    <name>dfs.replication</name>

    <value>3</value>

  </property>

  <!-- 네임노드용 웹서버 주소 -->

  <property>

    <name>dfs.http.address</name>

    <value>wikibooks01:50070</value>

  </property>

  <!-- 보조네임노드용 웹서버 주소 -->

  <property>

    <name>dfs.secondary.http.address</name>

    <value>wikibooks02:50090</value>

  </property>

</configuration>


# mapred-site.xml

[hadoop@wikibooks01 conf]$ vi mapred-site.xml

<configuration>

  <!-- 

  잡트래커(jobTraker) 데몬의 주소를 의미, 데이터노드에서

  이 주소로 맵리듀스 작업을 요청함.

  -->

  <property>

    <name>mapred.job.tracker</name>

    <value>wikibooks01:9001</value>

  </property>

</configuration>



- Hadoop 실행


# 하둡 초기화

[hadoop@wikibooks01 bin]$ ./hadoop namenode -format

16/02/17 04:46:27 INFO namenode.NameNode: STARTUP_MSG: 

/************************************************************

STARTUP_MSG: Starting NameNode

STARTUP_MSG:   host = wikibooks01/192.168.40.101

STARTUP_MSG:   args = [-format]

STARTUP_MSG:   version = 1.2.1

STARTUP_MSG:   build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1503152; compiled by 'mattf' on Mon Jul 22 15:23:09 PDT 2013

STARTUP_MSG:   java = 1.8.0_74

************************************************************/

16/02/17 04:46:28 INFO util.GSet: Computing capacity for map BlocksMap

16/02/17 04:46:28 INFO util.GSet: VM type       = 64-bit

16/02/17 04:46:28 INFO util.GSet: 2.0% max memory = 1013645312

16/02/17 04:46:28 INFO util.GSet: capacity      = 2^21 = 2097152 entries

16/02/17 04:46:28 INFO util.GSet: recommended=2097152, actual=2097152

16/02/17 04:46:28 INFO namenode.FSNamesystem: fsOwner=hadoop

16/02/17 04:46:28 INFO namenode.FSNamesystem: supergroup=supergroup

16/02/17 04:46:28 INFO namenode.FSNamesystem: isPermissionEnabled=true

16/02/17 04:46:28 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=100

16/02/17 04:46:28 INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s)

16/02/17 04:46:28 INFO namenode.FSEditLog: dfs.namenode.edits.toleration.length = 0

16/02/17 04:46:28 INFO namenode.NameNode: Caching file names occuring more than 10 times 

16/02/17 04:46:29 INFO common.Storage: Image file /home/hadoop/hadoop-data/dfs/name/current/fsimage of size 112 bytes saved in 0 seconds.

16/02/17 04:46:30 INFO namenode.FSEditLog: closing edit log: position=4, editlog=/home/hadoop/hadoop-data/dfs/name/current/edits

16/02/17 04:46:30 INFO namenode.FSEditLog: close success: truncate to 4, editlog=/home/hadoop/hadoop-data/dfs/name/current/edits

16/02/17 04:46:30 INFO common.Storage: Storage directory /home/hadoop/hadoop-data/dfs/name has been successfully formatted.

16/02/17 04:46:30 INFO namenode.NameNode: SHUTDOWN_MSG: 

/************************************************************

SHUTDOWN_MSG: Shutting down NameNode at wikibooks01/192.168.40.101

************************************************************/


# 데몬 실행

[hadoop@wikibooks01 bin]$ ./start-all.sh

starting namenode, logging to /home/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-hadoop-namenode-wikibooks01.out

wikibooks02: ssh: connect to host wikibooks02 port 22: No route to host

wikibooks03: ssh: connect to host wikibooks03 port 22: No route to host

wikibooks04: ssh: connect to host wikibooks04 port 22: No route to host

wikibooks02: ssh: connect to host wikibooks02 port 22: No route to host

starting jobtracker, logging to /home/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-hadoop-jobtracker-wikibooks01.out

wikibooks02: ssh: connect to host wikibooks02 port 22: No route to host

wikibooks04: ssh: connect to host wikibooks04 port 22: No route to host

wikibooks03: ssh: connect to host wikibooks03 port 22: No route to host


# wikibooks02, wikibooks03, wikibooks04 서버가 준비 되지않아 오류가 발생했다.



- CentOS 6.6 이미지 복제하기

현재까지 작성된 내용은 모든 서버에 동일하게 적용되어야 한다. 따라서, vmware 의 복제기능을 이용해서 나머지 서버 3대를 복제한다.

복제한후 처음 만나는 오류가 네트워크 데몬 오류 이다.


/etc/sysconfig/network-scripts/ifcfg-eth0 의 네트워크 설정이 올바르지 않아서 생기는 문제이다.

/etc/sysconfig/network-scripts/ifcfg-eth0 에 DEVICE=eth0 설정되어 있을경우 아래경로를 조회해 본다.

# 시스템에 존재하는 네트워크 인터페이스 이름

[root@wikibooks02 ~]# ls /sys/class/net/

eth1  lo


eth1 로 되어있다. ifcfg-eth0 의 DEVICE 설정은 eth0 으로 되어있다.
이는 CentOS 가 복제 되면서 맥어드레스가 변경되고 장치관리자 에 의해서 자동생성 되었기 때문이다.
[root@wikibooks02 ~]# vi /etc/udev/rules.d/70-persistent-net.rules
기존의 NAME="eth0" 의 라인을 삭제하고 NAME="eth1" 을 NAME="eth0" 변경후 시스템 재시작 하면 된다.

즉, 아래의 3가지가 모두 같은 네트워크 인터페이스 이름으로 설정되어야지 문제 없이 네트워크가 된다.
- /etc/sysconfig/network-scripts/ifcfg-eth0  DEVICE=eth0 
- /sys/class/net/eth0

/etc/udev/rules.d/70-persistent-net.rules 에 NAME="eth0"


위 문제의 해결책은 여기를 참고 했다. http://netmaid.tistory.com/94



- ssh 설정

# 네임노드에서 보조네임노드 및 데이터노드에 ssh 접속을 위한 공개키 생성

[hadoop@wikibooks01 ~]$ ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/home/hadoop/.ssh/id_rsa): [enter]

Enter passphrase (empty for no passphrase): [enter]

Enter same passphrase again: [enter]

Your identification has been saved in /home/hadoop/.ssh/id_rsa.

Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub.

The key fingerprint is:

29:34:ff:e5:d2:ce:10:1c:8d:50:09:13:d7:d8:33:67 hadoop@wikibooks01

The key's randomart image is:

+--[ RSA 2048]----+

|        =+o=     |

|         +oo= E  |

|      o   o .=   |

|     . o o .     |

|      . S o .    |

|       . . =     |

|          + o    |

|           =     |

|            o    |

+-----------------+



# 각노드서버로 네임노드 서버의 ssh 공개키 전송하기

[hadoop@wikibooks01 ~]$ ssh-copy-id -i /home/hadoop/.ssh/id_rsa.pub hadoop@wikibooks02

Enter passphrase for key '/home/hadoop/.ssh/id_rsa': 

Now try logging into the machine, with "ssh 'hadoop@wikibooks02'", and check in:


  .ssh/authorized_keys


to make sure we haven't added extra keys that you weren't expecting.


[hadoop@wikibooks01 ~]$ ssh-copy-id -i /home/hadoop/.ssh/id_rsa.pub hadoop@wikibooks03

[hadoop@wikibooks01 ~]$ ssh-copy-id -i /home/hadoop/.ssh/id_rsa.pub hadoop@wikibooks04

[hadoop@wikibooks01 ~]$ ssh-copy-id -i /home/hadoop/.ssh/id_rsa.pub hadoop@wikibooks01