본문 바로가기

IT for developer/Hadoop+Nosql

하둡 설치 1



뭐니 뭐니해도 프로그래밍을 하기위해서는 환경 구축을 하는 것이 최우선 과제!

일단 Hadoop을 설치해보자. 내가 설치한 버전은 현재 가장많은 문서들이 돌아다니는  Hadoop 0.20.2 + Hbase 0.20.6 이다.

개발 초기에 별도의 리눅스 서버가 없이 시작을 하게 되서 우선 찾아본 것이 Windows에 하둡을 설치해 보는 것이었다.

윈도우에서는 cygwin을 설치한 후 하둡을 설치하는 방법을 사용한다.

이를 설명해 주는 아주 좋은 사이트(무려 화면 캡쳐 이미지까지 제공한다.)가 있으며 번역한 사이트도 있어서 이를 참조하였다.

http://v-lad.org/Tutorials/Hadoop/00%20-%20Intro.html

친절하게 번역해준 사이트는

http://jmhadoop.springnote.com/pages/3420947

cygwin으로 할때 좀 불편했 던 점은 로그 또는 임시 디렉토리등의 생성이 cygwin 기준으로 생성되는 것도 있고 윈도우즈 기준으로 생성되는것도 있어서 헛갈렸다.

  <property>
    <name>mapred.child.tmp</name>
    <value>/home/inking/mapred/mapred.child.tmp</value>
  </property>

위와 같이 설정하면  c:/cygwin/home/inking/mapred/mapred.chil.tmp 에 생성될 것처럼 보이지만 실제 폴더가 생기는 경로는 c:/home/inking/mapred/mapred.child.tmp 에 생성된다.

위에 속성을 예를 든 이유는 cygwin에서  아래와 유사한 오류 메세지가 발생하는데 이럴 경우 mapred-site.xml 파일에 설정해 주어야 해결된다. (구글의 힘)
> java.io.FileNotFoundException: File
>
> 
c:/tmp/hadoop-SYSTEM/mapred/local/taskTracker/jobcache/job_201005020105_0001/attempt_201005020105_0001_m_000002_0/work/tmp
> does not exist.
하둡은 세가지 실행 모드를 가지고 있다.

Local(standalone) 모드, Pseudo-distributed 모드, Fully Distributed 모드

Local 모드는 HDFS를 사용하지도 않고 Hadoop 데몬들을 별도로 실행하지도 않아서 개발용/디버그용으로 사용될 수 있다.

나는 우선 분산환경을 구축하고 싶었기에 이 모드는 패스 사실 아무 설정도 하지 않으면 Local 모드가 디폴트이다.

분산환경을 구축해야 하지만 아직 1대의 PC밖에 확보를 못했으므로 Pseudo-distributed 모드로 설치하였다.

다음 3가지 파일을 수정하여야 한다. ($HADOOP_HOME/conf )

core-site.xml, mapred-site.xml, hdfs-site.xml

모드를 바꿔서 할때 마다 설정 파일을 수정하는 것이 곤란하므로 각 모드에 대해 별도로  conf 폴더에 복사하자.

$cp -rf conf conf.single
$cp -rf conf conf.pseudo
$cp -rf conf conf.cluster

conf 폴더를 삭제한 후 심볼릭 링크 파일로 생성한다. 

rm -rf conf
ln -s conf.pseudo conf

이제 conf는 conf.pseudo의 심폴릭 링크로 생성되어 하둡구동시 pseudo-distributed 모드로 실행되게 된다.
pseudo 모드를 위해 

core-site.xml
네임노드 호스트/포트 설정

<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
<description>The name of the default file system. A URI whose
scheme and authority determine the FileSystem implementation.
</description>
</property>
</configuration>



mapred-sit.xml 
JobTracker 호스트/포트 설정

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

<property>

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

<value>localhost:9001</value>

<description>The host and port that the MapReduce job tracker runs

at.</description>

</property>

</configuration>


hdfs-site.xml
파일생성시 복제될 파일 갯수지정

<configuration>

<property>

<name>dfs.replication</name>

<value>1</value>

<description>The actual number of replications can be specified when the

file is created.</description>

</property>

</configuration>




그 밖에 수정해야할 파일들

masters - 사실 이파일에 마스터의 주소를 넣는다고 생각했지만 그게 아니라 Secondary Name 노드를 지정한다. (네임노드에 문제가 생긴 경우 이 기능을 대신하는 서버노드이다.
localhost   

라고 적어준다.

slaves - 슬레이브 노드를 지정한다.
localhost

conf/hadoop-env.sh - 클래스 패스등을 설정해야한다. 

export JAVA_HOME=/cygdrive/c/java/jdk1.6.0_24

pseudo 모드 인경우에도 마스터와 슬레이브간 통신은 SSH를 통해 수행한다.

 ssh 설정하기

cygwin 명령 프롬프트에서 다음을 실행시킨다.
ssh-host-config

몇가지 작업을 묻는다. 원문에 있는 이미지 처럼 선택해주자.

Should privilege separation be used? (yes/no) no
Do you want to install sshd as service? yes
Default is "ntsec". CYGWIN=ntsec


ssh 데몬을 윈도우 서비스에서 시작하자


추후 연결에 사용될 인증키를 설정한다. 

cygwin 명령 프롬프트에서 다음을 실행시킨다.

ssh-keygen

그러면 ~/.ssh 디렉토리에  id_rsa.pub 라는 키가 생성되어 있는 것을 확인할 수 있다.
이 키를 ssh에 등록해주자.

cd ~/.ssh; cat id_rsa.pub >> authorized_keys
 

제대로 연결이 되는지 확인해보자.

ssh localhost 

비번을 물어보지 않고 바로 연결되어야 한다. 



 hdfs를 포멧하자.

bin/hadoop namenode -format

hadoop 실행하기

bin/start-all.sh


각각 실행시킬수도 있다. (단 순서대로 실행시켜야한다.)

bin/hadoop namenode

bin/hadoop secondarynamenode

bin/hadoop datanode

bin/hadoop jobtracker

bin/hadoop tasktracker

제대로 실행됐는지 확인하기 위해 jps를 실행해보고, Web관리자 UI를 접속해 보자.
$jps

26893 Jps
26832 TaskTracker
26620 SecondaryNameNode
26333 NameNode
26484 DataNode
26703 JobTracker

HDFS 확인
http://localhost:50070/dfshealth.jsp

MapReduce 확인
http://localhost:50030/jobtracker.jsp


제대로 동작하는지 예제를 통해 확인해보자.

$HADOOP_HOME 디렉토리에 README.txt 파일의  낱말 갯수를 구하는 예제를 수행해보자.

$mkdir input
$cp README.txt input
$bin/hadoop jar hadoop-*-examples.jar wordcount input output

실행이 완료된 후 WebUI를 통해 HDFS의 output 폴더에 저장된 내용을 확인해보자.