2014-11-25 [Linux] Hadoop 설치 가이드 2
# Hadoop 분산 클러스터 구성
노드 구분명 |
서버 IP |
호스트명 |
Name Node |
192.168.1.100 |
master.namenode |
Secondary Node |
192.168.1.101 |
secondary.namenode |
Data Node 01 |
192.168.1.111 |
slave.datanode01 |
Data Node 02 |
192.168.1.112 |
slave.datanode02 |
Data Node 03 |
192.168.1.113 |
slave.datanode03 |
# 시스템 인코딩 방식 확인
- 하둡은 인코딩 방식으로 UTF-8을 사용함.
- 한글로된 파일을 처리할 경우, 한글이 모두 깨질 수 있음
- 시스템 인코딩 방식을 확인후에 UTF-8이 아닌경우 인코딩을 변경
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
[hadoop@master bin]$ echo $LANG
ko_KR.eucKR
// 인코딩 변경
[hadoop@master bin]$ vi /etc/sysconfig/i18n
LANG="ko_KR.UTF-8"
// 변경한 설정 적용
[hadoop@master bin]$ source /etc/sysconfig/i18n
// 변경된 정보 확인
[hadoop@master bin]$ locale
LANG=ko_KR.UTF-8
LC_CTYPE="ko_KR.UTF-8"
LC_NUMERIC="ko_KR.UTF-8"
LC_TIME="ko_KR.UTF-8"
LC_COLLATE="ko_KR.UTF-8"
LC_MONETARY="ko_KR.UTF-8"
LC_MESSAGES="ko_KR.UTF-8"
LC_PAPER="ko_KR.UTF-8"
LC_NAME="ko_KR.UTF-8"
LC_ADDRESS="ko_KR.UTF-8"
LC_TELEPHONE="ko_KR.UTF-8"
LC_MEASUREMENT="ko_KR.UTF-8"
LC_IDENTIFICATION="ko_KR.UTF-8"
|
# 그룹및 계정 생성, 각 서버별 공통(namenode, secondary_namenode, datanode)
1
2
|
groupadd hadoop
useradd -g hadoop -d /home/hadoop -c /bin/bash hadoop
|
# master.namenode 서버의 hosts 설정 추가
※각 서버의 기본 호스트(localhost)명을 아래와 같은 호스트명으로 구분되도록 변경(웹페이지 확인시 필요)
1
2
3
4
5
6
7
|
/etc/hosts
192.168.1.100 master.namenode
192.168.1.101 secondary.namenode
192.168.1.111 slave.datanode01
192.168.1.112 slave.datanode02
192.168.1.113 slave.datanode03
|
# 호스트명 이용시 각각의 서버에 master.namenode 호스트 정보와 해당 서버의 호스트 정보를 등록해줌
예1) secondary.namenode 일경우
1
2
3
|
cat /etc/hosts
192.168.1.100 master.namenode
192.168.1.101 secondary.namenode
|
예2) slave.datanode01 일경우
1
2
3
|
cat /etc/hosts
192.168.1.100 master.namenode
192.168.1.111 slave.datanode01
|
iptables 방화벽 포트 접근 허용
# master.namenode, secondary_namenode
1
2
3
4
5
6
|
[root@master ~]# vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9000 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9001 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 50030 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 50070 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 50090 -j ACCEPT
|
# 테이터노드(datanode) : 각 datanode 서버들 별로 포트 접근 허용
1
2
3
4
5
6
|
[root@master ~]# vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 50010 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 50020 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 50060 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 50075 -j ACCEPT
|
# Hadoop 에서 사용할 디렉토리 생성
# master.namenode
1
2
|
[root@master data]# mkdir /data/name
[root@master data]# chown -R hadoop.hadoop /data
|
# secondary.namenode
1
2
|
[root@master ~]# mkdir /data
[root@master ~]# chown -R hadoop.hadoop /data
|
# 각각의 slave.datanode(디렉토리 권한 755)
1
2
3
|
[root@slave ~]# mkdir -p /data/node01
[root@slave ~]# mkdir -p /data/node02
[root@slave ~]# chown -R hadoop.hadoop /data
|
# Hadoop 시스템간의 데이터 전송을 위하여 SSH 인증 키 생성및 서버별 배포
# namenode에서 모든 시스템 접근
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
[hadoop@master ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hadoop/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
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:
df:1f:3d:1d:00:37:02:a7:d7:4c:19:4b:cd:71:e3:03 hadoop@master
The key's randomart image is:
+--[ RSA 2048]----+
| ..+ E=oo|
| o O.=oo|
| . . = o |
| . . .|
| S . |
| . . .o|
| . . ..o|
| . ..|
| . |
+-----------------+
|
인증키 배포
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
// master.namenode 서버 자신을 접속하기 위해 인증키 복사
[hadoop@master ~]$ cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
// secondary.namenode
// datanode
// 인증키를 이용한 접근 테스트
|
Hadoop 설치
# master.namenode 서버의 홈디렉토리에 설치
1 |
[hadoop@master ~]$ tar -xzvf hadoop-1.1.2.tar.gz |
# Java 위치 확인
/home/hadoop/jdk1.7.0_17
환경 설정
1 |
[hadoop@master ~]$ cd hadoop-1.1.2/conf/ |
hadoop-env.sh
Hadoop 을 구동하는 스크립트에서 사용하되는 환경 변수를 정의한 파일
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
[hadoop@master conf]$ vi hadoop-env.sh
# Set Hadoop Home
export HADOOP_HOME=/home/hadoop/hadoop-1.1.2
export HADOOP_HOME_WARN_SUPPRESS="TRUE"
# The java implementation to use. Required.
export JAVA_HOME=/home/hadoop/jdk1.7.0_17
# Extra Java CLASSPATH elements. Optional.
# export HADOOP_CLASSPATH=
# The maximum amount of heap to use, in MB. Default is 1000.
# export HADOOP_HEAPSIZE=2000
# Extra Java runtime options. Empty by default.
export HADOOP_OPTS=-server
|
core-site.xml
HDFS 와 Map/Reduce 에 공통적으로 사용되는 I/O 설정 같은 Hadoop 코어를 위한 설정파일
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
[hadoop@master conf]$ vi core-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master.namenode:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/tmp/hadoop-${user.name}</value>
</property>
</configuration>
|
hdfs-site.xml
Name Node, Secondary Node, Data Node 등과 같은 HDFS Daemon 을 위한 환경설정 파일
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
[hadoop@master conf]$ vi hdfs-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master.namenode:9000</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/data/name,/data/backup</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/data/node01,/data/node02</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>fs.trash.interval</name>
<value>30</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.support.append</name>
<value>true</value>
</property>
<property>
<name>dfs.support.broken.append</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions</name>
<value>true</value>
</property>
<property>
<name>dfs.web.ugi</name>
<value>hadoop,supergroup</value>
</property>
<property>
<name>dfs.permissions.supergroup</name>
<value>supergroup</value>
</property>
<property>
<name>dfs.upgrade.permission</name>
<value>0777</value>
</property>
<property>
<name>dfs.umaskmode</name>
<value>022</value>
</property>
<property>
<name>dfs.http.address</name>
<value>master.namenode:50070</value>
</property>
<property>
<name>dfs.secondary.http.address</name>
<value>secondary.namenode:50090</value>
</property>
<property>
<name>fs.checkpoint.dir</name>
<value>/data/checkpoint</value>
</property>
<property>
<name>fs.checkpoint.period</name>
<value>360</value>
</property>
<property>
<name>dfs.backup.address</name>
<value>secondary.namenode:50100</value>
</property>
<property>
<name>dfs.backup.http.address</name>
<value>secondary.namenode:50105</value>
</property>
</configuration>
|
mapred-site.xml
Job Tracker, Task Tracker 같은 Map/Reduce Daemon 을 위한 환경설정 파일
mapred.system.dir : HDFS 상의 디렉토리로 설정합니다.
mapred.local.dir : 실제 Data Node 의 로컬 디렉토리를 지정하며, 콤마(,) 로 여러개의 경로를 지정할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
[hadoop@master conf]$ vi mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>mapred.job.tracker </name>
<value>hdfs://master.namenode:9001</value>
</property>
<property>
<name>mapred.system.dir</name>
<value>/tmp/hadoop/mapred/system</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/data/mapred/local</value>
</property>
<property>
<name>dfs.hosts.exclude</name>
<value>/home/hadoop/hadoop-1.1.2/conf/hosts.exclude</value>
</property>
<property>
<name>mapred.hosts.exclude</name>
<value>/home/hadoop/hadoop-1.1.2/conf/hosts.exclude</value>
</property>
</configuration>
|
masters
보조네임노드 (Secondary Node) 를 구동시킬 서버의 목록을 지정하여 줍니다.
1
2
|
[hadoop@master conf]$ vi masters
secondary.namenode
|
slaves
Data Node 와 Task Tracker 를 구동시킬 서버의 목록을 지정하여 줍니다.
1
2
3
4
|
[hadoop@master conf]$ vi slaves
slave.datanode01
slave.datanode02
slave.datanode03
|
### 서버별 배포
# Java 배포 : 서버별 Java 설정이 필요할 경우
# 서버별 Bit 체크 : 서버의 Bit에 맞는 Java 설치
1
2
3
4
5
6
7
8
9
10
11
12
|
// secondary.namenode
scp -r /home/hadoop/jdk1.7.0_17 secondary.namenode:/home/hadoop/jdk1.7.0_17
// slave.datanode
scp -r /home/hadoop/jdk1.7.0_17 slave.datanode01:/home/hadoop/jdk1.7.0_17
scp -r /home/hadoop/jdk1.7.0_17 slave.datanode02:/home/hadoop/jdk1.7.0_17
scp -r /home/hadoop/jdk1.7.0_17 slave.datanode03:/home/hadoop/jdk1.7.0_17
// jps 정보 확인이 필요한 경우, 프로파일 배포
scp -r /home/hadoop/.bash_profile secondary.namenode:/home/hadoop/.bash_profile
scp -r /home/hadoop/.bash_profile slave.datanode01:/home/hadoop/.bash_profile
scp -r /home/hadoop/.bash_profile slave.datanode04:/home/hadoop/.bash_profile
|
# 최초 배포
master.namenode 에 설치되어 있는 Hadoop 디렉토리 전체를 배포
1
2
3
4
5
6
7
|
// secondary.namenode
scp -r /home/hadoop/hadoop-1.1.2 secondary.namenode:/home/hadoop/hadoop-1.1.2
// slave.datanode
scp -r /home/hadoop/hadoop-1.1.2 slave.datanode01:/home/hadoop/hadoop-1.1.2
scp -r /home/hadoop/hadoop-1.1.2 slave.datanode02:/home/hadoop/hadoop-1.1.2
scp -r /home/hadoop/hadoop-1.1.2 slave.datanode03:/home/hadoop/hadoop-1.1.2
|
# 변경 설정 배포
master.namenode 의 설정이 변경되었을 경우 각 서버별 변경된 파일만 배포
1
2
3
4
5
6
7
|
// secondary.namenode
rsync -av /home/hadoop/hadoop-1.1.2/conf secondary.namenode:/home/hadoop/hadoop-1.1.2
// slave.datanode
rsync -av /home/hadoop/hadoop-1.1.2/conf slave.datanode01:/home/hadoop/hadoop-1.1.2
rsync -av /home/hadoop/hadoop-1.1.2/conf slave.datanode02:/home/hadoop/hadoop-1.1.2
rsync -av /home/hadoop/hadoop-1.1.2/conf slave.datanode03:/home/hadoop/hadoop-1.1.2
|
### namenode 포멧
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
[hadoop@master ~]$ cd hadoop-1.1.2/bin/
[hadoop@master bin]$ ./hadoop namenode -format
13/03/27 11:45:27 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = master/192.168.1.100
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 1.1.2
STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.1 -r 1440782; compiled by 'hortonfo' on Thu Jan 31 02:03:24 UTC 2013
************************************************************/
Re-format filesystem in /data/name ? (Y or N) Y
Re-format filesystem in /data/backup ? (Y or N) Y
13/03/27 11:45:33 INFO util.GSet: VM type = 32-bit
13/03/27 11:45:33 INFO util.GSet: 2% max memory = 19.33375 MB
13/03/27 11:45:33 INFO util.GSet: capacity = 2^22 = 4194304 entries
13/03/27 11:45:33 INFO util.GSet: recommended=4194304, actual=4194304
13/03/27 11:45:34 INFO namenode.FSNamesystem: fsOwner=hadoop
13/03/27 11:45:34 INFO namenode.FSNamesystem: supergroup=supergroup
13/03/27 11:45:34 INFO namenode.FSNamesystem: isPermissionEnabled=true
13/03/27 11:45:34 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=100
13/03/27 11:45:34 WARN namenode.FSNamesystem: The dfs.support.append option is in your configuration, however append is not supported. This configuration option is no longer required to enable sync.
13/03/27 11:45:34 INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s)
13/03/27 11:45:34 INFO namenode.NameNode: Caching file names occuring more than 10 times
13/03/27 11:45:36 INFO common.Storage: Image file of size 112 saved in 0 seconds.
13/03/27 11:45:36 INFO namenode.FSEditLog: closing edit log: position=4, editlog=/data/name/current/edits
13/03/27 11:45:36 INFO namenode.FSEditLog: close success: truncate to 4, editlog=/data/name/current/edits
13/03/27 11:45:36 INFO common.Storage: Storage directory /data/name has been successfully formatted.
13/03/27 11:45:36 INFO common.Storage: Image file of size 112 saved in 0 seconds.
13/03/27 11:45:36 INFO namenode.FSEditLog: closing edit log: position=4, editlog=/data/backup/current/edits
13/03/27 11:45:36 INFO namenode.FSEditLog: close success: truncate to 4, editlog=/data/backup/current/edits
13/03/27 11:45:36 INFO common.Storage: Storage directory /data/backup has been successfully formatted.
13/03/27 11:45:36 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at master/192.168.1.100
************************************************************/
|
# DataNode 제거
1
2
3
4
5
6
7
8
9
10
11
12
13
|
/*
mapred-site.xml 파일에 아래처럼 제외할 호스트 파일정보가 있을경우
hosts.exclude 파일에 DataNode 명을 추가해줌으로 제거 가능
dfs.hosts.exclude, mapred.hosts.exclude 가 기재되어 있지 않을경우, 설정후 전체를 재시작
*/
<property>
<name>dfs.hosts.exclude</name>
<value>/home/hadoop/hadoop-1.1.2/conf/hosts.exclude</value>
</property>
<property>
<name>mapred.hosts.exclude</name>
<value>/home/hadoop/hadoop-1.1.2/conf/hosts.exclude</value>
</property>
|
제외할 DataNode를 NameNode 서버의 hosts.exclude에 등록
1
2
3
4
|
echo slave.datanode01 > /home/hadoop/hadoop-1.1.2/conf/hosts.exclude
// DataNode 반영
[hadoop@master bin]$ ./hadoop dfsadmin -refreshNodes
|
Hadoop 설치 정보 콘솔 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
[hadoop@master bin]$ ./hadoop dfsadmin -report
Configured Capacity: 162174115840 (151.04 GB)
Present Capacity: 104111394816 (96.96 GB)
DFS Remaining: 104111194112 (96.96 GB)
DFS Used: 200704 (196 KB)
DFS Used%: 0%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
-------------------------------------------------
Datanodes available: 3 (3 total, 0 dead)
Name: 192.168.1.111:50010
Decommission Status : Normal
Configured Capacity: 44776726528 (41.7 GB)
DFS Used: 69632 (68 KB)
Non DFS Used: 39449726976 (36.74 GB)
DFS Remaining: 5326929920(4.96 GB)
DFS Used%: 0%
DFS Remaining%: 11.9%
Last contact: Wed Mar 27 14:33:29 KST 2013
Name: 192.168.1.113:50010
Decommission Status : Normal
Configured Capacity: 11708014592 (10.9 GB)
DFS Used: 69632 (68 KB)
Non DFS Used: 5046538240 (4.7 GB)
DFS Remaining: 6661406720(6.2 GB)
DFS Used%: 0%
DFS Remaining%: 56.9%
Last contact: Wed Mar 27 14:33:27 KST 2013
Name: 192.168.1.112:50010
Decommission Status : Normal
Configured Capacity: 105689374720 (98.43 GB)
DFS Used: 61440 (60 KB)
Non DFS Used: 13566455808 (12.63 GB)
DFS Remaining: 92122857472(85.8 GB)
DFS Used%: 0%
DFS Remaining%: 87.16%
Last contact: Wed Mar 27 14:33:26 KST 2013
|
# 사용자 디렉토리 생성
1
2
3
4
5
6
7
8
9
10
11
|
// slave.datanode 에 생성됨
[hadoop@master bin]$ ./hadoop fs -mkdir /user/hadoop
// 디렉토리 정보 확인
[hadoop@master bin]$ ./hadoop fs -ls /
Found 2 items
drwxr-xr-x - hadoop supergroup 0 2013-03-27 14:07 /tmp
drwxr-xr-x - hadoop supergroup 0 2013-03-27 14:39 /user
[hadoop@master bin]$ ./hadoop fs -ls /user
Found 1 items
drwxr-xr-x - hadoop supergroup 0 2013-03-27 14:39 /user/hadoop
|
# 파일 업로드
1
2
|
[hadoop@master bin]$ ./hadoop fs -put ../../cloud_computing_primer.pdf .
[hadoop@master bin]$ ./hadoop fs -put ../../oracle_plsql_language_pocket_reference_fourth_edition.pdf .
|
# 서버별 프로세스 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
// master.namenode
[hadoop@master bin]$ jps
14422 Jps
13714 NameNode
13877 JobTracker
// secondary.namenode
[hadoop@localhost data]$ jps
15764 Jps
14765 SecondaryNameNode
// slave.datanode 동일(TaskTracker, DataNode)
[hadoop@localhost data]$ jps
30475 TaskTracker
30900 Jps
30365 DataNode
|
# Hadoop 구성 웹페이지 확인
Live Nodes 가 연결된 DataNode의 수
# DataNode 노드 리스트 확인
# DataNode 노드 정보 확인
# 노드의 파일 정보 확인
아래와 같이 두개의 DataNode 에 복제가 된 것이 확인됨
> hdfs-site.xml의 설정에서 dfs.replication = 2 로 지정
1
2
3
4
5
6
7
8
|
Total number of blocks: 1
-4234428498334613222: 192.168.1.111:50010 192.168.1.113:50010
Total number of blocks: 1
-1479047574059270437: 192.168.1.113:50010 192.168.1.112:50010
Total number of blocks: 1
-8675812117651072288: 192.168.1.112:50010 192.168.1.111:50010
|
# 한개의 파일의 사이즈가 64MB 를 초과할 경우, 블록을 64MB 단위로 나누어 저장
> 기본 1블록(64MB)
1
2
3
4
5
6
|
// 3개의 블록에 2개씩의 복제
Total number of blocks: 3
-527122170720419961: 192.168.1.111:50010 192.168.1.113:50010
8606886155927734038: 192.168.1.112:50010 192.168.1.113:50010
3788523866326037174: 192.168.1.111:50010 192.168.1.113:50010
|
'Data Science 데이터 과학' 카테고리의 다른 글
2015-09-15 데이터 베이스 관리 - 연세대학교 정보대학원 수업내용 (0) | 2018.04.16 |
---|---|
2015-05-30 [PLS 통계] 나름 정리한 것 - 연세대학교 정보대학원 수업내용 (1) | 2018.04.14 |
2015-05-30 [통계] PLS 간단 설명 버전 (0) | 2018.04.11 |
2015-05-28 사회과학 연구방법론 - 연세대학교 정보대학원 수업내용 (1) | 2018.04.09 |
2015-05-21 사회과학 연구방법론 PLS - 연세대학교 정보대학원 수업내용 (0) | 2018.04.03 |