- 시스템 구성
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 서버가 준비 되지않아 오류가 발생했다.
현재까지 작성된 내용은 모든 서버에 동일하게 적용되어야 한다. 따라서, vmware 의 복제기능을 이용해서 나머지 서버 3대를 복제한다.
복제한후 처음 만나는 오류가 네트워크 데몬 오류 이다.
/etc/sysconfig/network-scripts/ifcfg-eth0 의 네트워크 설정이 올바르지 않아서 생기는 문제이다.
/etc/sysconfig/network-scripts/ifcfg-eth0 에 DEVICE=eth0 설정되어 있을경우 아래경로를 조회해 본다.
# 시스템에 존재하는 네트워크 인터페이스 이름
[root@wikibooks02 ~]# ls /sys/class/net/
eth1 lo
- /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 |
+-----------------+
[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