Running Hadoop On Ubuntu Linux (Single-Node Cluster)
Hadoop설치 과정 한글화 by 유창훈
원문 http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster/
환경 Ubuntu 10.10 , ubuntu 10.04 LTS도 동일함 ,Hadoop 0.20.2
1.우분투에서 제공하는 편리한 설치를 위해 아카이브 추가한다.
sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
2.소스 리스트를 업데이트한다.
sudo apt-get update
3.Sun-java6-jkd를 설치한다.
sudo apt-get install sun-java6-jdk
4. ssh 서버설치
sudo apt-get install ssh 로 ssh설치.
5. Java가 잘 설치되었나 확인
Java –version , javac -version이라고 해서 정상적으로 버전 정보가 뜨면 ok
6 이부분은 꼭 필요한 부분은 아니며 보안이나 권한, 백업등을 위해 hadoop그룹과 유저를 추가하는 과정이다.
sudo addgroup hadoop
sudo adduser –ingroup hadoop hadoop
7.다음으로 SSH 에 대한 환경설정 이다
Hadoop 은 노드의 관리를 위해서 SSH의 접근을 요구한다. 예를들어 원격으로 제어할 경우. 지금우리는 싱글 노드를 위한 설치 과정을 보고있다. 그러므로 우리는 localhost 로의 접근을 위해 SSH의 환경설정을 할 필요가 있다.
여기서 SSH의 설치 운영 및 공개키 인증을 통한 환경설정은 가능하다고 가정한다. 그렇지 않으면 여러 이용가능한 안내서를 찾아보라.
첫째로 우리는 hadoop user을 위한 SSH키를 생성한다.
user@ubuntu:~$ su - hadoop
hadoop@ubuntu:~$ ssh-keygen -t rsa -P ""
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hadoop/.ssh/id_rsa):
Created directory '/home/hadoop/.ssh'.
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:
9b:82:ea:58:b4:e0:35:d7:ff:19:66:a6:ef:ae:0e:d2 hadoop@ubuntu
The key's randomart image is:
[...snipp...]
E. 두번째 라인의 ssh 키 생성은 “암호” 원래 이렇게 들어가는 걸 추천하는데 지금 우리의 경우는 암호를 넣지 않고 진행하도록 한다.
F. 인증키를 방금생성한 공개키로 대체한다.
hadoop@ubuntu:~$ cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
H.마지막으로 SSH setup 테스트를 위해 hadoop user로 local machine 에서 연결을 수행해 본다. 이 과정은 또한 당신의 컴퓨터에 hadoop user 에 대한 fingerprint 를 남기는 과정이다. 만약 ssh에서 다른 포트를 사용한다면 home/.ssh/config 을 수정해야 하는데, 수정을 위한 도움을 받기위해선 맨위에 링크에서 찾아보도록하자.
hadoop@ubuntu:~$ ssh localhost
The authenticity of host 'localhost (::1)' can't be established.
RSA key fingerprint is d7:87:25:47:ae:02:00:eb:1d:75:4f:bb:44:f9:36:26.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
Linux ubuntu 2.6.32-22-generic #33-Ubuntu SMP Wed Apr 28 13:27:30 UTC 2010 i686 GNU/Linux
Ubuntu 10.04 LTS
[...snipp...]
hadoop@ubuntu:~$
I. 디버깅을 위해선 ssh –vvv localhost 를 이용하면 된다.
J. SSH server 환경설정을 체크하기위해 /etc/ssh/sshd_config 옵션중 PubkeyAuthentication(yes로 세팅되어있어야한다) 와 allowusers(if this option is active, add the hadoop user to it).
사용자가 SSH 서버에 환경설정 파일을 바꿨다면 꼭 sudo /etc/init.d/ssh reload 명령어를 써야만 한다.
IPv6해제A. 우분투에서는 0.0.0.0 이라는 주소의 사용으로 인해 IPv6에서 문제가 발생한다. 필자의 경우에는 IPv6를 사용할 일이 없기 때문에 간단하게 사용하지 않는다.
IPv6 를 해제하기 위해서 우분투 10.04 LTS버전에서는 /etc/sysctl.conf 파일을 열어 다음과 같이 추가한다.
(단 이파일은 관리자계정에서수행하도록한다 )
#disable ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
그리고 cat /proc/sys/net/ipv6/conf/all/disable_ipv6를통해서 값이 0이 나오면 ipv6가 enable이란뜻이고 1이면 disable(이게나와야된다)
K.위의 방법 대신에 다음과 같은 방법을 사용할 수 있다. 나중에 하둡설치다하고
~/conf/hadoop-env.sh수정
------------
Export HADOOP_OPTS = -Djava.net.preferIPv4Stack=true
-----------
이제 hadoop 을 인스톨해 보자여기서는 0.20.2 버전을 사용한다. 파일은http://www.apache.org/dyn/closer.cgi/hadoop/core 요기서 받자 버전 잘확인하고
cd /usr/local
sudo mkdir hadoop
sudo tar xzf hadoop-0.20.2.tar.gzsudo mv hadoop-0.20.2 hadoop
sudo chown –R hadoop:hadoop hadoop
이렇게 하면 hadoop 이하 모든 폴더의 소유자가 hadoop으로 바뀐다. HDFS에 대해서는 각자 이론을 쌓았으리라 생각된다. -->> 같이 공부합시다 ㅎ.ㅎ
환경설정
이번 안내서의 목적은 싱글노드를 위한 하둡셋팅이다.
Hadoop-env.sh여기서는 JAVA_HOME 경로 수정만 하면된다.
일단 하둡설치 경로에 위에서는/usr/local/hadoop/conf/hadoop-env.sh 에 JAVA_HOME 항목의 경로를 제대로 지정한다.
필자는 /usr/lib/jvm/java-6-openjdk 으로 바꾸어 주었다.
Conf/*-site.xml
여기서는 한가지 항목을 수정해야한다. 밑에 빨간 부분만 수정하면된다.
hadoop-datastore는 mkdir명령어로 만들면된다.
저부분은 하둡이 데이터 파일을 저장하는 곳이 되겠다. 필자의 경우에는 /usr/local/hadoop/hadoop-datastore/hadoop-hadoop로 지정하였고 이전에 했던것처럼 chown hadoop:hadoop /usr/local/hadoop/hadoop-datastore/hadoop-hadoop 이렇게 하고 또한 sudo chmod 750 /usr/local/hadoop/hadoop-datastore/hadoop-hadoop을 입력한다
** hadoop-0.20.2.tar.gz 파일을 풀게되면 hadoop-0.20.2폴더가 생성되는데 필자는 hadoop-0.20.2폴더안의 모든파일을 /usr/local/hadoop/ 아래에 복사하였다. hadoop-0.20.2 폴더자체를 복사한게 아니고 안에 내용만복사하였다.
그래서 아래 나오는 경로들은 다음과 같게 되는것이다. 참고. 경로들이야 지정하기 나름이다. 편의대로하기바란다.
이제 다음 3개의 파일에 아래와같이 수정하여 준다.
/usr/local/hadoop/conf/core-site.xml:
<!-- In: conf/core-site.xml -->
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/your/path/to/hadoop/tmp/dir/hadoop-${user.name}</value>
<description>A base for other temporary directories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:54310</value>
<description>The name of the default file system. A URI whose scheme and authority determine the FileSystem implementation. The uri's scheme determines the config property (fs.SCHEME.impl) naming the FileSystem implementation class. The uri's authority is used to determine the host, port, etc. for a filesystem.</description>
</property>
</configuration>
usr/local/hadoop/conf/mapred-site.xml
:<!-- In: conf/mapred-site.xml -->
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:54311</value>
<description>The host and port that the MapReduce job tracker runs at. If "local", then jobs are run in-process as a single map and reduce task. </description>
</property>
</configuration>
/usr/local/hadoop/conf/hdfs-site.xml
:<!-- In: conf/hdfs-site.xml -->
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
<description>Default block replication. The actual number of replications can be specified when the file is created. The default is used if replication is not specified in create time. </description>
</property>
</configuration>
네임노드 포멧하기이제 하둡 로컬 파일시스템을 포멧해야한다. 처음에만 해주면된다. 포멧시에는 일반 디스크 포멧처럼 하둡의 데이터 들은 지워지게 되므로 주의한다.
hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop namenode -format
10/05/08 16:59:56 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = ubuntu/127.0.1.1
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 0.20.2
STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.20 -r 911707; compiled by 'chrisdo' on Fri Feb 19 08:07:34 UTC 2010
************************************************************/
10/05/08 16:59:56 INFO namenode.FSNamesystem: fsOwner=hadoop,hadoop
10/05/08 16:59:56 INFO namenode.FSNamesystem: supergroup=supergroup
10/05/08 16:59:56 INFO namenode.FSNamesystem: isPermissionEnabled=true
10/05/08 16:59:56 INFO common.Storage: Image file of size 96 saved in 0 seconds.
10/05/08 16:59:57 INFO common.Storage: Storage directory .../hadoop-hadoop/dfs/name has been successfully formatted.
10/05/08 16:59:57 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at ubuntu/127.0.1.1
************************************************************/
hadoop@ubuntu:/usr/local/hadoop$ 정상적으로 수행되었다면 위와 같이 표시될 것이다.
이제 우리의 싱글노드 클러스터를 시작해 보자/usr/local/hadoop/bin/start-all.sh잘될것이다.
싱글노드 클러스터를 멈추는 방법은 위의 명령어에서 start를 stop로 바꾸면된다.
그럼 이제 잘 작동되는지 적절한 문서를 하나의 예로 들어 동작시켜보자
/usr/local/hadoop/bin/start-all.sh이것은 namenode와 datanode, jobtracker과 tasktracker을 수행시킬 것이다. 위에 것들이 잘 동작하는 지 알아보는 방법으로 jps 를 실행시켜보는 것이다.
/usr/local/hadoop/jps 또한 netstat 를 통해서도 현재 listening중인 포트들을 확인할 수 있다.
sudo netstat -plten | grep java 만약 어떠한 에러가 있다면 /usr/local/hadoop/logs폴더를 살펴보기 바란다.
MapReduce job 예제 따라 하기
위의 예제를 바탕으로 단어의 개수를 세는 일을 수행해 보도록 하겠다. 위의 글을 /tmp/gutenberg 폴더에 저장 하도록한다
hadoop@ubuntu:~$ ls -l /tmp/gutenberg/
total 3592
-rw-r--r-- 1 hadoop hadoop 674425 2007-01-22 12:56 20417-8.txt
-rw-r--r-- 1 hadoop hadoop 1423808 2006-08-03 16:36 7ldvc10.txt
-rw-r--r-- 1 hadoop hadoop 1561677 2004-11-26 09:48 ulyss12.txt
MapReduce jpg을 수행하기 전에 반드시 로컬 파일시스템에서 하둡의 HDFS로 복사를 해야한다.
다음과 같이 수행하도록하자
hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop dfs -copyFromLocal /tmp/gutenberg gutenberg
hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop dfs -ls
Found 1 items
drwxr-xr-x - hadoop supergroup 0 2010-05-08 17:40 /user/hadoop/gutenberg
hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop dfs -ls gutenberg
Found 3 items
-rw-r--r-- 1 hadoop supergroup 674762 2010-05-08 17:40 /user/hadoop/gutenberg/20417.txt
-rw-r--r-- 1 hadoop supergroup 1573044 2010-05-08 17:40 /user/hadoop/gutenberg/4300.txt
-rw-r--r-- 1 hadoop supergroup 1391706 2010-05-08 17:40 /user/hadoop/gutenberg/7ldvc10.txt
이제 실제로 수행하도록 해보자.
hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop jar hadoop-0.20.2-examples.jar wordcount gutenberg gutenberg-output
다음과 같은 결과가 나올 것이다.
hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop jar hadoop-0.20.2-examples.jar wordcount gutenberg gutenberg-output
10/05/08 17:43:00 INFO input.FileInputFormat: Total input paths to process : 3
10/05/08 17:43:01 INFO mapred.JobClient: Running job: job_201005081732_0001
10/05/08 17:43:02 INFO mapred.JobClient: map 0% reduce 0%
10/05/08 17:43:14 INFO mapred.JobClient: map 66% reduce 0%
10/05/08 17:43:17 INFO mapred.JobClient: map 100% reduce 0%
10/05/08 17:43:26 INFO mapred.JobClient: map 100% reduce 100%
10/05/08 17:43:28 INFO mapred.JobClient: Job complete: job_201005081732_0001
10/05/08 17:43:28 INFO mapred.JobClient: Counters: 17
10/05/08 17:43:28 INFO mapred.JobClient: Job Counters
10/05/08 17:43:28 INFO mapred.JobClient: Launched reduce tasks=1
10/05/08 17:43:28 INFO mapred.JobClient: Launched map tasks=3
10/05/08 17:43:28 INFO mapred.JobClient: Data-local map tasks=3
10/05/08 17:43:28 INFO mapred.JobClient: FileSystemCounters
10/05/08 17:43:28 INFO mapred.JobClient: FILE_BYTES_READ=2214026
10/05/08 17:43:28 INFO mapred.JobClient: HDFS_BYTES_READ=3639512
10/05/08 17:43:28 INFO mapred.JobClient: FILE_BYTES_WRITTEN=3687918
10/05/08 17:43:28 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=880330
10/05/08 17:43:28 INFO mapred.JobClient: Map-Reduce Framework
10/05/08 17:43:28 INFO mapred.JobClient: Reduce input groups=82290
10/05/08 17:43:28 INFO mapred.JobClient: Combine output records=102286
10/05/08 17:43:28 INFO mapred.JobClient: Map input records=77934
10/05/08 17:43:28 INFO mapred.JobClient: Reduce shuffle bytes=1473796
10/05/08 17:43:28 INFO mapred.JobClient: Reduce output records=82290
10/05/08 17:43:28 INFO mapred.JobClient: Spilled Records=255874
10/05/08 17:43:28 INFO mapred.JobClient: Map output bytes=6076267
10/05/08 17:43:28 INFO mapred.JobClient: Combine input records=629187
10/05/08 17:43:28 INFO mapred.JobClient: Map output records=629187
10/05/08 17:43:28 INFO mapred.JobClient: Reduce input records=102286
HDFS의 디렉토리인 guntenberg-output 디렉토리에 결과가 성공적으로 저장 되었는지 확인하도록하자
hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop dfs -ls
Found 2 items
drwxr-xr-x - hadoop supergroup 0 2010-05-08 17:40 /user/hadoop/gutenberg
drwxr-xr-x - hadoop supergroup 0 2010-05-08 17:43 /user/hadoop/gutenberg-output
hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop dfs -ls gutenberg-output
Found 2 items
drwxr-xr-x - hadoop supergroup 0 2010-05-08 17:43 /user/hadoop/gutenberg-output/_logs
-rw-r--r-- 1 hadoop supergroup 880330 2010-05-08 17:43 /user/hadoop/gutenberg-output/part-r-00000
hadoop@ubuntu:/usr/local/hadoop$
만약 Reduce task를 좀더 늘이고 싶다면 "-D"옵션을 사용할 수 있다.
hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop jar hadoop-0.20.2-examples.jar wordcount -D mapred.reduce.tasks=16 gutenberg gutenberg-output
하지만 mapred.map.tasks 항목을 사용자가 임의로 수정할 수 는 없다. 오직 mapred.reduce.tasks 뿐이다.
이제 HDFS로부터 결과를 확인해 보도록 하자
hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop dfs -cat gutenberg-output/part-r-00000위와 같은 명령으로 결과를 확인 할 수 있다 .
하지만 여기서는 로컬 파일 시스템으로 복사하도록 해보자
hadoop@ubuntu:/usr/local/hadoop$ mkdir /tmp/gutenberg-output
hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop dfs -getmerge gutenberg-output /tmp/gutenberg-output
hadoop@ubuntu:/usr/local/hadoop$ head /tmp/gutenberg-output/gutenberg-output
"(Lo)cra" 1
"1490 1
"1498," 1
"35" 1
"40," 1
"A 2
"AS-IS". 1
"A_ 1
"Absoluti 1
"Alack! 1
hadoop@ubuntu:/usr/local/hadoop$ 만약 head명령을 사용한다면 처음 10줄만 보여준다. 참고.
하둡 웹 인터페이스하둡은 다음의 웹 인터페이스를 제공한다. 편의에 따라 사용하도록하자
•http://localhost:50030/ – web UI for MapReduce job tracker(s)
•http://localhost:50060/ – web UI for task tracker(s)
•http://localhost:50070/ – web UI for HDFS name node(s)
각 항목마다 로그보기가 있어서 관리적 차원에서 이용할 수 있겠다.
'클라우드 컴퓨팅 > HADOOP' 카테고리의 다른 글
브라우저에 Map-Reduce를 적용한 분산 시스템 만들기 (0) | 2011.02.08 |
---|---|
MapReduce 논문 번역 (0) | 2011.02.07 |
HDFS Scalability 향상을 위한 시도들 (0) | 2011.01.19 |
HADOOP 의 설계시 가정한 사항 (0) | 2011.01.14 |
온라인 문서 번역작업 (0) | 2011.01.04 |