본 문서는 하둡(Hadoop)에서 의사 분산 모드(Pseudo Distributed Mode)를 설정하는 방법을 기술하고 있다.
본 문서의 내용은 본 문서가 작성된 일자 이전 대해서 확인 된 방법으로써 이후 변경된 내용을 담고 있지 않거나 혹은 일부는 추후 업데이트할 예정이다.
의사 분산 모드? (Pseudo Distributed Mode) 하나의 서버에서 하둡 소프트웨어 데몬들을 모두 실행하여 HDFS를 사용함. 데몬들은 다음과 같음.
- 네임노드
- 2차 네임노드
- 데이터노드
- 잡 트래커
- 태스크 트래커
$ vi $HADOOP_HOME/conf/hadoop-env.sh 내용은 아래와 같다. # The java implementation to use. Required. #export JAVA_HOME=/usr/lib/jvm/java-6-jdk
위 내용에서 #을 제거하고 실제 경로로 바꿔준다.
# The java implementation to use. Required. export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-amd64
SSH(Secure Shell) 자동 로그인을 위한 공개키와 비밀키 생성 $ ssh-keygen -t dsa -P "" -f ~/.ssh/id_dsa
더보기 접기
root@ailabhadoop:/home/redcarrot# ssh-keygen -t dsa -P "" -f ~/.ssh/id_dsa Generating public/private dsa key pair. Your identification has been saved in /root/.ssh/id_dsa. Your public key has been saved in /root/.ssh/id_dsa.pub. The key fingerprint is: 4f:f5:3b:f4:5e:ff:f0:94:91:a2:d5:6f:0d:5c:9a:69 root@ailabhadoop The key's randomart image is: +--[ DSA 1024]----+ | | | | | . .| | . o.=.| | S . oE+ | | o oo.+=| | .. +.B| | Bo| | *| +-----------------+
접기
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
ssh-keygen으로 한 쌍의 공개키와 비밀키를 생성하는데, id_dsa는 private key, id_dsa.pub 는 public key가 된다.
생성한 공개키로 SSH 자동 로그인 하고 싶은 시스템의 ~/.ssh/authorized_keys라는 파일 뒤에 추가한다.
자동 로그인이 되는지 아래와 같이 실행해 본다.
$ ssh localhost
더보기 접기
root@ailabhadoop:/home/redcarrot# ssh localhost Welcome to Ubuntu 12.04.4 LTS (GNU/Linux 3.11.0-19-generic x86_64) * Documentation: https://help.ubuntu.com/ 34 packages can be updated. 13 updates are security updates. Last login: Thu Apr 10 06:58:15 2014 from localhost
접기
자동 로그인이 안되는 경우 공개/비밀키 생성에 문제가 있거나 authorized_keys 에 추가가 잘못되었을 가능성이 높다.
자동 로그인을 확인한 후 다시 빠져 나온다.
$ exit
$ vi $HADOOP_HOME/conf/mapred-sit e.xml
mapred-site.xml은 MapReduce 프레임워크와 관련된 내용을 담고 있으며, 아래와 같이 포트번호를 지정함.
더보기 접기
<configuration>
<property>
<name> mapred.job.tracker </name>
<value> localhost:9001 </value>
</property>
</configuration>
접기
$ vi $HADOOP_HOME/conf/hdfs-site.xml
hdfs-site.xml은 HDFS(Hadoop Distributed File System)과 관련된 내용을 담고 있으며, 블록 복제수를 지정하는데 여기서는 하나의 서버에서 실험하는 의사 분산 모드이기 때문에 1로 지정함.
더보기 접기
<configuration>
<property>
<name> dfs.replication </name>
<value> 1 </value>
</property>
</configuration>
접기
$ vi $HADOOP_HOME/conf/core-site.xml
core-site.xml은 네임노드 위치 지정과 관련된 내용을 담고 있으며, 네임노드의 주소를 지정함.
더보기 접기
<configuration>
<property>
<name> fs.default.name </name>
<value> hdfs://localhost:9000 </value>
</property>
</configuration>
접기
위 3개의 환결설정 파일은 앞서 데몬들 중
- 네임노드 - localhost:9000
- 2차 네임노드 - 아직 미지정 - conf/masters
- 데이터노드 - 아직 미지정 - conf/slaves
- 잡 트래커 - localhost:9001
- 태스크 트래커 - 아직 미지정 - conf/slaves
만 지정한 상태이다.
$ vi $HADOOP_HOME/conf/masters
를 확인하면 현재 localhost 만 지정되어 있는데 여기서 2차 네임노드가 지정할 수 있다.
더보기 접기
root@ailabhadoop:/home/redcarrot# cat $HADOOP_HOME/conf/masters
localhost
접기
$ vi $HADOOP_HOME/conf/slaves
를 확인하면 현재 localhost 만 지정되어 있는데 여기서 데이터노드와 태스크 트래커 서버 리스트를 지정할 수 있다.
더보기 접기
root@ailabhadoop:/home/redcarrot# cat $HADOOP_HOME/conf/slaves
localhost
접기
포맷에 앞서 hdfs-site.xml 설명 내에 dfs.data.dir 파라미터가 가리키는 디렉토리를 데이터 노드에서 사용할 위치인데 해당 파라미터를 사용하지 않는 다면 기본으로 /tmp/hadoop-(사용자이름)/dfs/data 디렉토리를 사용함. 문제는 /tmp 디렉토리에 셋업되면 서버가 reboot 될 때 /tmp 디렉토리가 정리될 수 있음 그래서 다른 위치로 지정하기를 추천함. 아니면 hadoop.tmp.dir 을 다른 곳으로 설정함.
여기서는 $HADOOP_HOME/dfs/data 디렉토리에 지정하도록 한다. 우선 디렉토리를 생성하고,
$ mkdir $HADOOP_HOME/dfs
$ mkdir $HADOOP_HOME/dfs/data
hdfs-site.xml 파일을 아래와 같이 수정한다.
$ vi $HADOOP_HOME/conf/hdfs-site.xml
더보기 접기
<configuration>
<property>
<name> dfs.replication </name>
<value> 1 </value>
</property>
<property>
<name> dfs.data.dir </name>
<value> $HADOOP_HOME/dfs/data </value>
</property>
</configuration>
접기
위와 가팅 데이터 노드 위치를 변경하고 HDFS로 포맷을 아래와 같이 수행한다. 하둡 실행 위치가 환경 변수에 추가되어 있을 때,
$ hadoop namenode -format
더보기 접기
root@ailabhadoop:/home/redcarrot# hadoop namenode -format
14/04/12 11:59:55 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = ailabhadoop/127.0.1.1
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 1.0.3
STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.0 -r 1335192; compiled by 'hortonfo' on Tue May 8 20:31:25 UTC 2012
************************************************************/
14/04/12 11:59:55 INFO util.GSet: VM type = 64-bit
14/04/12 11:59:55 INFO util.GSet: 2% max memory = 17.77875 MB
14/04/12 11:59:55 INFO util.GSet: capacity = 2^21 = 2097152 entries
14/04/12 11:59:55 INFO util.GSet: recommended=2097152, actual=2097152
14/04/12 11:59:55 INFO namenode.FSNamesystem: fsOwner=root
14/04/12 11:59:55 INFO namenode.FSNamesystem: supergroup=supergroup
14/04/12 11:59:55 INFO namenode.FSNamesystem: isPermissionEnabled=true
14/04/12 11:59:55 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=100
14/04/12 11:59:55 INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s)
14/04/12 11:59:55 INFO namenode.NameNode: Caching file names occuring more than 10 times
14/04/12 11:59:55 INFO common.Storage: Image file of size 110 saved in 0 seconds.
14/04/12 11:59:56 INFO common.Storage: Storage directory /tmp/hadoop-root/dfs/name has been successfully formatted.
14/04/12 11:59:56 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at ailabhadoop/127.0.1.1
************************************************************/
접기
$ start-all.sh
더보기 접기
root@ailabhadoop:/home/redcarrot# start-all.sh
starting namenode, logging to /home/redcarrot/hadoop-1.0.3/libexec/../logs/hadoop-root-namenode-ailabhadoop.out
localhost: starting datanode, logging to /home/redcarrot/hadoop-1.0.3/libexec/../logs/hadoop-root-datanode-ailabhadoop.out
localhost: starting secondarynamenode, logging to /home/redcarrot/hadoop-1.0.3/libexec/../logs/hadoop-root-secondarynamenode-ailabhadoop.out
starting jobtracker, logging to /home/redcarrot/hadoop-1.0.3/libexec/../logs/hadoop-root-jobtracker-ailabhadoop.out
localhost: starting tasktracker, logging to /home/redcarrot/hadoop-1.0.3/libexec/../logs/hadoop-root-tasktracker-ailabhadoop.out
접기
위와 같이 실행 시킨 후 5개 데몬이 모두 실행되었는지 확인하려면 jps 커맨드(자바 스포레스를 보여주는 커맨드)를 실행
$ jps
더보기 접기
root@ailabhadoop:/home/redcarrot# jps
18754 DataNode
19355 TaskTracker
19013 SecondaryNameNode
18485 NameNode
19521 Jps
19105 JobTracker
접기
만약 위에서 5개 데몬이 정상수행되지 않는 경우 $HADOOP_HOME/logs 에서 각 hadoop-(사용자이름)-(데몬이름).log 파일을 확인하여 진행할 수 있다.
모든 데몬을 종료하려면
$ stop-all.sh
더보기 접기
root@ailabhadoop:/home/redcarrot# stop-all.sh
stopping jobtracker
localhost: stopping tasktracker
stopping namenode
localhost: stopping datanode
localhost: stopping secondarynamenode
접기
http://localhost:50030/ - 잡 트래커 웹 인터페이스 (맵리듀스)
http://l ocalhost:50070/ - 네임노드 웹 인터페이스 (HDFS)
http://localhost:50075/ - 데이터노드 웹 인터페이스
http://localhost:50060/ - 태스크 트래커 웹 인터페이스
$ hadoop fs -ls /
더보기 접기
root@ailabhadoop:/home/redcarrot/hadoop-1.0.3# hadoop fs -ls /
Found 1 items
drwxr-xr-x - root supergroup 0 2014-04-12 12:02 /tmp
접기
실행에 앞서 HDFS 상의 입력 파일들과 출력 디렉토리가 필요함. 따라서 입력 파일들을 HDFS 위에 만들어 주어야 함.
$ cd $HADOOP_HOME
$ hadoop fs -mkdir /input
$ hadoop fs -copyFromLocal README.txt /input
$ hadoop fs -ls /input
더보기 접기
root@ailabhadoop:/home/redcarrot/hadoop-1.0.3# hadoop fs -mkdir /input
root@ailabhadoop:/home/redcarrot/hadoop-1.0.3# hadoop fs -copyFromLocal README.txt /input
root@ailabhadoop:/home/redcarrot/hadoop-1.0.3# hadoop fs -ls /input
Found 1 items
-rw-r--r-- 1 root supergroup 1366 2014-04-12 12:21 /input/README.txt
접기
wordcount를 실행한다.
$ hadoop jar hadoop-examples-1.0.3.jar wordcount /input/README.txt /output
더보기 접기
root@ailabhadoop:/home/redcarrot/hadoop-1.0.3# hadoop jar hadoop-examples-1.0.3.jar wordcount /input/README.txt /output
14/04/12 12:24:08 INFO input.FileInputFormat: Total input paths to process : 1
14/04/12 12:24:08 INFO util.NativeCodeLoader: Loaded the native-hadoop library
14/04/12 12:24:08 WARN snappy.LoadSnappy: Snappy native library not loaded
14/04/12 12:24:08 INFO mapred.JobClient: Running job: job_201404121204_0001
14/04/12 12:24:09 INFO mapred.JobClient: map 0% reduce 0%
14/04/12 12:24:24 INFO mapred.JobClient: map 100% reduce 0%
14/04/12 12:24:39 INFO mapred.JobClient: map 100% reduce 100%
14/04/12 12:24:44 INFO mapred.JobClient: Job complete: job_201404121204_0001
14/04/12 12:24:44 INFO mapred.JobClient: Counters: 29
14/04/12 12:24:44 INFO mapred.JobClient: Job Counters
14/04/12 12:24:44 INFO mapred.JobClient: Launched reduce tasks=1
14/04/12 12:24:44 INFO mapred.JobClient: SLOTS_MILLIS_MAPS=10838
14/04/12 12:24:44 INFO mapred.JobClient: Total time spent by all reduces waiting after reserving slots (ms)=0
14/04/12 12:24:44 INFO mapred.JobClient: Total time spent by all maps waiting after reserving slots (ms)=0
14/04/12 12:24:44 INFO mapred.JobClient: Launched map tasks=1
14/04/12 12:24:44 INFO mapred.JobClient: Data-local map tasks=1
14/04/12 12:24:44 INFO mapred.JobClient: SLOTS_MILLIS_REDUCES=12700
14/04/12 12:24:44 INFO mapred.JobClient: File Output Format Counters
14/04/12 12:24:44 INFO mapred.JobClient: Bytes Written=1306
14/04/12 12:24:44 INFO mapred.JobClient: FileSystemCounters
14/04/12 12:24:44 INFO mapred.JobClient: FILE_BYTES_READ=1836
14/04/12 12:24:44 INFO mapred.JobClient: HDFS_BYTES_READ=1469
14/04/12 12:24:44 INFO mapred.JobClient: FILE_BYTES_WRITTEN=46765
14/04/12 12:24:44 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=1306
14/04/12 12:24:44 INFO mapred.JobClient: File Input Format Counters
14/04/12 12:24:44 INFO mapred.JobClient: Bytes Read=1366
14/04/12 12:24:44 INFO mapred.JobClient: Map-Reduce Framework
14/04/12 12:24:44 INFO mapred.JobClient: Map output materialized bytes=1836
14/04/12 12:24:44 INFO mapred.JobClient: Map input records=31
14/04/12 12:24:44 INFO mapred.JobClient: Reduce shuffle bytes=0
14/04/12 12:24:44 INFO mapred.JobClient: Spilled Records=262
14/04/12 12:24:44 INFO mapred.JobClient: Map output bytes=2055
14/04/12 12:24:44 INFO mapred.JobClient: CPU time spent (ms)=850
14/04/12 12:24:44 INFO mapred.JobClient: Total committed heap usage (bytes)=301727744
14/04/12 12:24:44 INFO mapred.JobClient: Combine input records=179
14/04/12 12:24:44 INFO mapred.JobClient: SPLIT_RAW_BYTES=103
14/04/12 12:24:44 INFO mapred.JobClient: Reduce input records=131
14/04/12 12:24:44 INFO mapred.JobClient: Reduce input groups=131
14/04/12 12:24:44 INFO mapred.JobClient: Combine output records=131
14/04/12 12:24:44 INFO mapred.JobClient: Physical memory (bytes) snapshot=269979648
14/04/12 12:24:44 INFO mapred.JobClient: Reduce output records=131
14/04/12 12:24:44 INFO mapred.JobClient: Virtual memory (bytes) snapshot=4862070784
14/04/12 12:24:44 INFO mapred.JobClient: Map output records=179
접기
에러 없이 수행되었다면 HDFS의 /output 디렉토리 내용을 확인
$ hadoop fs -ls /output
더보기 접기
root@ailabhadoop:/home/redcarrot/hadoop-1.0.3# hadoop fs -ls /output
Found 3 items
-rw-r--r-- 1 root supergroup 0 2014-04-12 12:24 /output/_SUCCESS
drwxr-xr-x - root supergroup 0 2014-04-12 12:24 /output/_logs
-rw-r--r-- 1 root supergroup 1306 2014-04-12 12:24 /output/part-r-00000
접기
최종 데이터는 /output/part-r-00000 파일은 HDFS에 있기 때문에 내용을 그대로 볼 수 없고 하둡 파일 셸 커맨드를 이용해서.
-copyToLocal - 로컬 파일 시스템으로 내려서 보거나
-cat - 바로 화면으로 출력해서 볼 수 있음.
$ hadoop fs -cat /output/part-r-00000 | more
더보기 접기
root@ailabhadoop:/home/redcarrot/hadoop-1.0.3# hadoop fs -cat /output/part-r-00000 | more
(BIS), 1
(ECCN) 1
(TSU) 1
(see 1
5D002.C.1, 1
740.13) 1
<http://www.wassenaar.org/> 1
Administration 1
Apache 1
BEFORE 1
BIS 1
Bureau 1
Commerce, 1
Commodity 1
Control 1
Core 1
Department 1
ENC 1
Exception 1
Export 2
For 1
Foundation 1
Government 1
Hadoop 1
Hadoop, 1
Industry 1
Jetty 1
License 1
Number 1
Regulations, 1
SSL 1
Section 1
Security 1
See 1
Software 2
Technology 1
The 4
This 1
U.S. 1
Unrestricted 1
about 1
algorithms. 1
and 6
and/or 1
another 1
any 1
as 1
asymmetric 1
at: 2
both 1
by 1
check 1
classified 1
code 1
code. 1
concerning 1
country 1
country's 1
country, 1
cryptographic 3
currently 1
details 1
distribution 2
eligible 1
encryption 3
exception 1
export 1
following 1
for 3
form 1
from 1
functions 1
has 1
have 1
http://hadoop.apache.org/core/ 1
http://wiki.apache.org/hadoop/ 1
if 1
import, 2
in 1
included 1
includes 2
information 2
information. 1
is 1
it 1
latest 1
laws, 1
libraries 1
makes 1
manner 1
may 1
more 2
mortbay.org. 1
object 1
of 5
on 2
or 2
our 2
performing 1
permitted. 1
please 2
policies 1
possession, 2
project 1
provides 1
re-export 2
regulations 1
reside 1
restrictions 1
security 1
see 1
software 2
software, 2
software. 2
software: 1
source 1
the 8
this 3
to 2
under 1
use, 2
uses 1
using 2
visit 1
website 1
which 2
wiki, 1
with 1
written 1
you 1
your 1
접기
Reference :
1. 직접 해보는 하둡 프로그래밍, 이지스퍼블리싱, 한기용 저
2. 하둡(Hadoop) 설치부터 테스트까지 정리~, http://blog.acronym.co.kr/329