티스토리 뷰

의외로 맥북에서 하둡을 설치하는 방법을 한글로 정리한 문서는 없더군요.

오늘은 맥북에서 하둡을 설치하는 방법에 대해서 포스팅하겠습니다.


VM을 이용하지 않고, OSX에 가상 분산 모드 방식으로 하둡을 설치합니다.

참고로 가상 분산 모드란 1대의 서버에 모든 하둡 데몬를 실행하는 방식을 말하며,

HDFS의 데이터 복제본은 1개만 저장되도록 설정합니다.


1. 하둡 설치 파일 다운로드 및 압축 해제

http://www.apache.org/dyn/closer.cgi/hadoop/common/

위 사이트에서 하둡 설치 파일 (버전 1.0.4)를 다운로드 받습니다.

1.0.4는 지난 10월에 릴리즈된 버전으로, 1.0.3의 일부 버그가 픽스된 것으로 이해하시면 됩니다.


다운로드받은 압축파일을 사용자 계정의 홈 디렉터리에 압축을 해제합니다.

(맥에서는 파인더에서 더블클릭하면 바로 압축이 풀리네요 ㅎㅎ)


터미널창에서 압축을 해제할 경우에는 다음과 같이 압축을 해제합니다.

tar xvfz hadoop-1.0.4.tar


2. 심볼릭 링크 생성하기

나중에 하둡 홈 디렉터리에 쉽게 접근하도록 심볼릭 링크를 생성합니다.

ln -s hadoop-1.0.4 hadoop


3. JDK 설치 및 경로 설정

터미널 창에서 java 를 입력하면, JRE를 설치하라는 알림창이 노출됩니다.

이때 "예"를 해서, JDK를 설치합니다. 참고로 이때 설치되는 버전은 1.6.x 입니다.


JDK 설치가 끝나면, 하둡 홈 디렉터리의 하위 디렉터리인 conf 디렉터리에 있는 hadoop-env.sh에 JDK 경로를 수정합니다.

export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home/


경로가 너무 길어서 귀찮다면 다음과 같이 OSX에서 링크로 설정된 디렉터리를 설정해도 됩니다.

export JAVA_HOME=/Library/Java/Home


4. SSH 설정하기

하둡의 네임노드는 SSH 로 로컬 혹은 원격의 서버에 접속하여, 주요 데몬을 실행합니다.

이때 각각의 데몬이 정상적으로 실행되려면, 서버간에 SSH 접근이 가능해야 하고, 

또한 암호를 묻는 절차가 생략되도록 공개키가 설정되어 있어야 합니다.


우선 맥의 SSH 포트를 다음과 같이 열어 줘야 합니다.

시스템 환경설정 -> 공유 -> 원격 로그인: 체크


그리고 터미널창에서 다음과 같이 공개키를 생성합니다. 

ssh-keygen -t rsa


코맨드를 입력하면, 중간에 값을 입력하도록 되어 있는데 모두 엔터키를 입력합니다.


blrunnerui-MacBook-Pro:~ blrunner$ ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/Users/blrunner/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /Users/blrunner/.ssh/id_rsa.

Your public key has been saved in /Users/blrunner/.ssh/id_rsa.pub.

The key fingerprint is:

95:18:ec:3a:9c:57:d0:fd:a7:78:c4:02:e2:8f:0a:69 blrunner@blrunnerui-MacBook-Pro.local

The key's randomart image is:

+--[ RSA 2048]----+

|       ... .     |

|        +oo..    |

|       o.oo. o   |

|        o.. . + .|

|     o oS+   + o |

|    E = o . . o  |

|   . . +     .   |

|      .          |

|                 |

+-----------------+

blrunnerui-MacBook-Pro:~ blrunner$  


제 책이나 기존의 위키문서를 보면 id_rsa.pub를 autorized_keys 라는 파일로 복사하는 등 조금(?) 복잡했는데요.

아래와 같은 명령어를 입력하면, 이러한 번거로운 작업들이 한번에 진행됩니다.

또한 암호 파일에 대한 권한까지 함께 자동으로 조정이 됩니다.

ssh-copy-id -i ~/.ssh/id_rsa.pub 계정@localhost

(맥에서 ssh-copy-id 사용하기: http://pupri.mycloudnas.com/2012/09/29/get-ssh-copy-id-in-mac-os-x-lion/)



이제 ssh localhost를 하면, 암호를 묻지 않고 바로 접속을 하는 것을 확인하실 수 있습니다.

처음 접속을 할 때 캐시 정보를 남길 지 묻는 데 이때 한번만 yes를 하면 더 이상 이 메세지는 노출되지 않습니다.


5. 환경 설정 파일 수정하기

하둡을 구동하기 위해서는 HDFS와 맵리듀스 프레임워크에서 사용할 주요 환경 설정 파일도 수정해야 합니다.

다음과 같이 각 각의 파일을 수정하시기 바랍니다.


- 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://localhost:9000</value>

    </property>

    <property> 

        <name>hadoop.tmp.dir</name>

        <value>/Users/계정명/hadoop-data/</value>

    </property> 

</configuration>


- hdfs-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>dfs.replication</name> 

         <value>1</value>

     </property>

     <property>

        <name>dfs.http.address</name>

        <value>localhost:50070</value>

     </property>

     <property>

         <name>dfs.secondary.http.address</name>

         <value>localhost:50090</value>

     </property>

</configuration>


- mapred-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>mapred.job.tracker</name>

        <value>localhost:9001</value>

    </property>

</configuration>


- masters

localhost


- slaves

localhost


6. 맥용 환경 설정 추가하기

맥에서 하둡을 구동할 떄 보안 이슈가 있어서, hadoop-env.sh 파일에 다음과 같은 옵션을 추가해야 합니다.

export HADOOP_OPTS="-Djava.security.krb5.realm=OX.AC.UK -Djava.security.krb5.kdc=kdc0.ox.ac.uk:kdc1.ox.ac.uk"


* 참고 JIRA: https://issues.apache.org/jira/browse/HADOOP-7489


7. 네임노드 포맷하기

하둡의 홈 디렉터리에서 다음과 같은 코맨드를 실행합니다.

./bin/hadoop namenode -format


8. 하둡 실행하기

하둡의 홈 디렉터리에서 다음과 같은 코맨드를 실행하면, 하둡의 전체 데몬이 실행됩니다.

./bin/start-all.sh


9. 예제 실행하기

정상적으로 구동됐는지 확인하기 위해 하둡에서 제공하는 맵리듀스 예제를 실행해봅니다.


우선 hadoop-env.sh 파일을 HDFS에 업로드합니다.

./bin/hadoop fs -put conf/hadoop-env.sh conf/hadoop-env.sh


파일이 업로드됐으면 다음과 같이 맵리듀스를 실행합니다.

./bin/hadoop jar hadoop-examples-*.jar wordcount conf/hadoop-env.sh wordcount_output


하둡이 정상적으로 설치됐다면, 다음과 같은 로그가 출력됩니다.

12/11/02 17:36:30 INFO input.FileInputFormat: Total input paths to process : 1

12/11/02 17:36:30 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

12/11/02 17:36:30 WARN snappy.LoadSnappy: Snappy native library not loaded

12/11/02 17:36:30 INFO mapred.JobClient: Running job: job_201211021734_0001

12/11/02 17:36:31 INFO mapred.JobClient:  map 0% reduce 0%

12/11/02 17:36:45 INFO mapred.JobClient:  map 100% reduce 0%

12/11/02 17:36:57 INFO mapred.JobClient:  map 100% reduce 100%

12/11/02 17:37:02 INFO mapred.JobClient: Job complete: job_201211021734_0001

12/11/02 17:37:02 INFO mapred.JobClient: Counters: 26

12/11/02 17:37:02 INFO mapred.JobClient:   Job Counters

12/11/02 17:37:02 INFO mapred.JobClient:     Launched reduce tasks=1

12/11/02 17:37:02 INFO mapred.JobClient:     SLOTS_MILLIS_MAPS=11980

12/11/02 17:37:02 INFO mapred.JobClient:     Total time spent by all reduces waiting after reserving slots (ms)=0

12/11/02 17:37:02 INFO mapred.JobClient:     Total time spent by all maps waiting after reserving slots (ms)=0

12/11/02 17:37:02 INFO mapred.JobClient:     Launched map tasks=1

12/11/02 17:37:02 INFO mapred.JobClient:     Data-local map tasks=1

12/11/02 17:37:02 INFO mapred.JobClient:     SLOTS_MILLIS_REDUCES=9981

12/11/02 17:37:02 INFO mapred.JobClient:   File Output Format Counters

12/11/02 17:37:02 INFO mapred.JobClient:     Bytes Written=2222

12/11/02 17:37:02 INFO mapred.JobClient:   FileSystemCounters

12/11/02 17:37:02 INFO mapred.JobClient:     FILE_BYTES_READ=2874

12/11/02 17:37:02 INFO mapred.JobClient:     HDFS_BYTES_READ=2502

12/11/02 17:37:02 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=49163

12/11/02 17:37:02 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=2222

12/11/02 17:37:02 INFO mapred.JobClient:   File Input Format Counters

12/11/02 17:37:02 INFO mapred.JobClient:     Bytes Read=2383

12/11/02 17:37:02 INFO mapred.JobClient:   Map-Reduce Framework

12/11/02 17:37:02 INFO mapred.JobClient:     Map output materialized bytes=2874

12/11/02 17:37:02 INFO mapred.JobClient:     Map input records=56

12/11/02 17:37:02 INFO mapred.JobClient:     Reduce shuffle bytes=0

12/11/02 17:37:02 INFO mapred.JobClient:     Spilled Records=324

12/11/02 17:37:02 INFO mapred.JobClient:     Map output bytes=3421

12/11/02 17:37:02 INFO mapred.JobClient:     Total committed heap usage (bytes)=269619200

12/11/02 17:37:02 INFO mapred.JobClient:     Combine input records=266

12/11/02 17:37:02 INFO mapred.JobClient:     SPLIT_RAW_BYTES=119

12/11/02 17:37:02 INFO mapred.JobClient:     Reduce input records=162

12/11/02 17:37:02 INFO mapred.JobClient:     Reduce input groups=162

12/11/02 17:37:02 INFO mapred.JobClient:     Combine output records=162

12/11/02 17:37:02 INFO mapred.JobClient:     Reduce output records=162

12/11/02 17:37:02 INFO mapred.JobClient:     Map output records=266 


맵리듀스에서 출력된 결과도 다음과 같이 정상적으로 저장되어 있습니다.

./bin/hadoop fs -cat wordcount_output/part-r-00000

#     35

$HADOOP_BALANCER_OPTS"     1

$HADOOP_DATANODE_OPTS"     1

$HADOOP_HOME/conf/slaves     1

$HADOOP_HOME/logs     1

$HADOOP_JOBTRACKER_OPTS"     1

$HADOOP_NAMENODE_OPTS"     1

$HADOOP_SECONDARYNAMENODE_OPTS"     1 



저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
댓글
댓글쓰기 폼