02 하둡 개발준비

<< 이 장에서 다루는 내용! >>

실행모드 결정   
리눅스 서버 준비 
하둡 다운로드 
하둡 실행 계정 생성
호스트 파일 수정    
인코딩 방식 설정       
자바 설치     
SSH 설정
하둡 압축 파일 풀기 
하둡 환경설정 파일 수정 
하둡 실행     
예제 실행

1. 실행모드 결정

하둡을 설치하려는 용도에 맞게 실행모드를 선택한다.

  • Standalone 모드(독립실행모드)

    • 하둡의 기본 실행모드 (하둡 환경설정에 아무런 설정 X)
    • 로컬장비에서만 실행되기 때문에 로컬 모드라고도 함
    • 분산 환경을 고려한 테스트는 불가능
    • 맵리듀스 프로그램을 개발하고, 해당 맵리듀스를 디버깅하는 용도로만 적함하다
  • Pseudo-distribued 모드(가상분산모드)

    • 하나의 장비에 모든 하둡 환경설정을 하고, 하둡 서비스도 하나의 장비에서만 제공
    • HDFS와 맵리듀스와 관련된 데몬을 하나의 장비에서만 실행
    • (주로 하둡을 처음 공부하는 사람들이 구성하는 테스트 방식)
  • Fully Distributed(완전분산모드)

    • 여러대의 장비에 하둡 설치
    • 하둡으로 라이브 서비스를 할 경우 이와 같이 구성

2. 리눅스 서버 준비

서비스용 서버 구축 시 고려 요소

  1. I/O가 얼마나 빈번하게 발생하는지
  2. MapReduce를 이용한 분석 작업이 CPU에 얼마나 부하를 주는지
  3. 데이터 보관 위주로 하둡을 운영하는지
  4. 등등

+) NN, SNN, DN 설치는 어느 서버에?

  • SecondaryNameNode는 NameNode와 다른 서버에 설치해야 한다
  • S_NN은 NN의 장애발생 대비용이기 때문이다.
  • 또한 S_NN은 NN과 동일한 용량의 메모리를 필요로 한다.

3. 하둡 다운로드

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

4. 하둡 실행 계정 생성

서버가 준비되면 하둡을 설치하고 실행할 계정을 생성해야 한다.
(root로도 관리할 수 있지만 root는 좋은 방법이 아님.. 잘못하면 컴퓨터를 못쓰게 만들어 버릴수도!! )

 $ adduser {계정명}
// 편의상 hadoop 이라는 계정명을 사용한다

하둡 실행 계정은 hadoop cluster를 구성하는 모든 서버에 동일해야 한다.

5. 호스트 파일 수정

하둡은 서버간 SSH 프로토콜로 통신한다. SSH로 다른 서버에 접근할 때는 IP 또는 Host 명을 이용한다.

  • SSH(Secure Shell)란?
    • SSH란 아래와 같은 동작을 가능하게 하는 응용 프로그램 또는 응용 프로토콜이다
      • 네트워크 상의 다른 컴퓨터에 로그인
      • 원격 시스템에서 명령을 실행
      • 다른 시스템으로 파일을 복사
    • 암호화 기법을 사용하여 통신이 노출되어도 암호화된 문자로 보여 이해할 수 없다
    • 기본적으로 22번 포트를 사용한다.

IP 대신 호스트명 사용하기

[root@cookie01 ~]$ vi /etc/hosts
192.168.56.120 wikibooks01
192.168.56.120 wikibooks02
192.168.56.120 wikibooks02

6. 인코딩 방식 설정

하둡은 UTF-8 인코딩 방식을 사용한다. 따라서 준비된 서버의 인코딩이 UTF-8이 아니라면 문자열을 처리할 때 문제가 발생한다.
(특히 한글이라면 #^!@#%와 같은 깨짐을 발견할 것이다..!)

(1) 서버의 인코딩을 확인한다

# echo $LANG

(2) 위와 같이 UTF-8이 아니라면 변경한다 (UTF-8이면 PASS!)

# vi /etc/sysconfig/i18n  
//...? 나는 이런 파일이 없다고 한다 무슨일일까 하하.

LANG="ko_KR.UTF-8"

... 
// 다 바꿔!

# source /etc/sysconfig/i18n  
//변경된 설정 적용하기

# locale 
// 언어 관련 정보 확인 명렁어

7. 자바 설치

자바 설치는 인터넷에 자료가 많으니 PASS !

8. SSH 설정

공개키는 사용자 계정의 home 디렉토리에 있는 .ssh 폴더에 생성된다.
생성된 공개키를 다른 서버에 복사한다 (ssh-copy-id 명렁어)
ssh-copy-id 명령어는 대상 서버의 .ssh 안에 있는 authorized_keys 파일에 공개키를 입력한다.

$ ssh-copy-id {복사할 공개키 경로}{대상서버계정}@[대상서버]

여기서는 NameNode의 SSH 공개키를 DataNode로 전송한다.

$ ssh-copy-id /home/hadoop/.ssh/id_rsa.pub hadoop@wikibooks02

그리고 DataNode로 접속을 시도했을 때 암호를 묻지 않고 바로 접속하면 성공이다

$ssh wikibooks02

9. 하둡 압축 파일 풀기

NameNode 뿐만 아니라 DataNode로 사용할 서버들에도 모두압축파일해제심볼릭 링크 설정을 진행한다.

$ tar xvfz hadoop-5.3.0.tar.gz//압축풀기
$ ln -s hadoop-5.3.0 hadoop 
// 디렉토리에 대한 심볼릭 링크 설정

10. 하둡 환경설정 파일 수정

환경설정들은 하둡 홈 디렉토리의 하위 디렉토리 conf에 저장되어 있다

> hadoop/conf

파일명 용도
hadoop-env.sh 하둡의 환경설정 파일로 JDK 경로, class path, 데몬 실행 옵션 등 다양한 환경 변수를 설정할 수 있다.
하둡을 실행하는 shell script 파일에서 필요한 환경변수를 설정한다.
하둡 홈 디렉토리 아래 bin 디렉토리에 있는 shell script 파일이 hadoop-env.sh를 사용한다.
masters Secondary NameNode를 실행할 서버를 설정한다.
slaves DataNode를 실행할 서버를 설정한다.
core-site.xml HDFS와 맵리듀스에서 공통적으로 사용할 환경 정보를 설정한다.
hadoop-core.jar의 core-default.xml을 override 하여, 설정값이 없으면 default 값을 사용
core-site.xml에 설정값이 없을 경우 core-default.xml의 기본값을 사용한다
hdfs-site.xml HDFS에서 사용할 환경정보를 설정한다
hadoop-core.jar의 hdfs-default.xml을 override 하여, 설정값이 없으면 default 값을 사용용
mapred-site.xml 맵리듀스에서 사용할 환경정보를 설정한다
hadoop-core.jar의 mapred-default.xml을 override 하여, 설정값이 없으면 default 값을 사용

10.1. hadoop-env.sh 파일 수정

# Set Hadoop-specific environment variables here.

# The only required environment variable is JAVA_HOME.  All others are
# optional.  When running a distributed configuration it is best to
# set JAVA_HOME in this file, so that it is correctly defined on
# remote nodes.

# The java implementation to use.  Required.
# export JAVA_HOME=/usr/lib/j2sdk1.6-sun

# Extra Java CLASSPATH elements.  Optional.
# export HADOOP_CLASSPATH="<extra_entries>:$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.
# if [ "$HADOOP_OPTS" == "" ]; then export HADOOP_OPTS=-server; else HADOOP_OPTS+=" -server"; fi

# Command specific options appended to HADOOP_OPTS when specified
export HADOOP_NAMENODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_NAMENODE_OPTS"
export HADOOP_SECONDARYNAMENODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_SECONDARYNAMENODE_OPTS"
export HADOOP_DATANODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_DATANODE_OPTS"
export HADOOP_BALANCER_OPTS="-Dcom.sun.management.jmxremote $HADOOP_BALANCER_OPTS"
export HADOOP_JOBTRACKER_OPTS="-Dcom.sun.management.jmxremote $HADOOP_JOBTRACKER_OPTS"
# export HADOOP_TASKTRACKER_OPTS=
# The following applies to multiple commands (fs, dfs, fsck, distcp etc)
# export HADOOP_CLIENT_OPTS

# Extra ssh options.  Empty by default.
# export HADOOP_SSH_OPTS="-o ConnectTimeout=1 -o SendEnv=HADOOP_CONF_DIR"

# Where log files are stored.  $HADOOP_HOME/logs by default.
# export HADOOP_LOG_DIR=${HADOOP_HOME}/logs

# File naming remote slave hosts.  $HADOOP_HOME/conf/slaves by default.
# export HADOOP_SLAVES=${HADOOP_HOME}/conf/slaves

# host:path where hadoop code should be rsync'd from.  Unset by default.
# export HADOOP_MASTER=master:/home/$USER/src/hadoop

# Seconds to sleep between slave commands.  Unset by default.  This
# can be useful in large clusters, where, e.g., slave rsyncs can
# otherwise arrive faster than the master can service them.
# export HADOOP_SLAVE_SLEEP=0.1

# The directory where pid files are stored. /tmp by default.
# export HADOOP_PID_DIR=/var/hadoop/pids

# A string representing this instance of hadoop. $USER by default.
# export HADOOP_IDENT_STRING=$USER

# The scheduling priority for daemon processes.  See 'man nice'.
# export HADOOP_NICENESS=10

(1)우선 hadoop-env.sh 파일에 JAVA_HOME 파라미터를 실제 JDK 경로로 수정하고 시작한다!

 export JAVA_HOME=/usr/local/java

(2) hadoop-env.sh 파일은 다양한 옵션을 사용하여 하둡 데몬을 실행할 수 있도록 해준다.\

[ 하둡 데몬 실행 옵션 ]

NameNode HADOOP_NAMENODE_OPTS
DataNode HADOOP_DATANODE_OPTS
SecondaryNameNode HADOOP_SECONDARYNAMENODE_OPTS
JobTracker HADOOP_JOBTRACKER_OPTS
TaskTracker HADOOP_TASKTRACKER_OPTS

(2-1) 기타 옵션

뭐.. NameNode 데몬 때문에 paralllelGC 옵션을 설정하고 싶다면 아래와 같이 진행하면 된다.
다양한 GC를 선택할 수 있는데 병렬로 수행하는 Parallel Collector를 사용하려면 ParallelGC 옵션을 지정하면 된다

export HADOOP_NAMENODE_OPTS="-XX:+UseParellelGC ${HADOOP_NAMENODE_OPTS}"

만약 NameNode의 최대 힙 크기를 변경한다면 다음과 같이 SecondaryNameNode의 MAX Heap 크리도 변경해야 한 (SNN가 요구하는 메모리 크기는 NN가 요구하는 메모리 크기와 동일하기 때문!)

export HADOOP_NAMENODE_OPTS="-Xmx2048m ${HADOOP_NAMENODE_OPTS}"

export HADOOP_SECONDARYNAMENODE_OPTS="-Xmx2048m ${HADOOP_NAMENODE_OPTS}"

(3) hadoop-env.sh는 하둡 데몬 실행 옵션 외에도 다른 유용한 정보를 설정할 수 있다.

[ hadoop-env.sh에 설정 가능한 옵션 ]

HADOOP_CLASSPATH 맵리듀스 프로그램을 실행할 때 외부 라이브러리를 참조하고 싶을 경우 해당 라이브러리의 경로를 설정한다
HADOOP_HEAPSIZE 하둡 데몬에서 사용해야 할 메모리 크기이다. 기본 메모리 크기는 1GB이다
HADOOP_SSH_OPTS 하둡 클러스터 간 SSH 연결을 할 때 추가로 사용할 옵션을 설정할 수 있다
HADOOP_LOG_DIR 하둡 데몬에서 생성되는 로그를 저장할 디렉토리 설정이다
별도의 설정값이 없으면 하둡 home 디렉토리의 logs 디렉토리를 사용한다
HADOOP_SLAVES 데이터노드가 등록된 파일경로를 설정한다.
기본값은 $HADOOP_HOME}\conf\slaves이다
HADOOP_MASTER 보조네임노드가 등록된 파일경로를 설정한다.
기본값은 $HADOOP_HOME}\conf\marsters이다

===(4) HADOOP_PID_DIR을 설정한다. ===
이 파라미터는 하둡 데몬의 PID 정보를 저장하는 디렉토리를 의미한다. /tmp로 지정되어 있기 때문에 반드시 별도로 지정해야 한다.

export HADOOP_PID_DIR=/home/hadoop/pids

10.2. masters, slaves 수정

masters 파일에는 SecondaryNameNode를 실행할 서버를 설정한다.(2개 이상 가능)(IP 또는 호스트명)

masters.txt

wikibooks02

slaves 파일에는 데이터노드를 실행할 서버를 설정한다(2개 이상 가능)(IP 또는 호스트 명)

masters.txt

wikibooks02
wikibooks03
wikibooks04

10.3. core-site.xml 수정

<core-site.xml 코드>

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

<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://lcapdev</value>
  </property>

  <property>
    <name>fs.trash.interval</name>
    <value>1440</value>
  </property>

  <property>
    <name>fs.trash.checkpoint.interval</name>
    <value>0</value>
  </property>

  <property>
     <name>ha.zookeeper.quorum</name>
     <value>lcapdev1:2181,lcapdev2:2181,lcapdev3:2181</value>
  </property>

  <property>
    <name>hadoop.proxyuser.mapred.groups</name>
    <value>*</value>
  </property>

  <property>
    <name>hadoop.proxyuser.mapred.hosts</name>
    <value>*</value>
  </property>

 </configuration>

fs.default.name과 hadoop.tmp.dir 속성을 추가하고, 다른 property는 core-default.xml에 있는 값을 사용한다.(더 추가해도 됨)

core-site.xml

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

<configuration>
<property>
<name>
fs.default.name<ame>
<value>hdfs://wikibooks01:9000
</value>
</property>
<property>
<name>hadoop.tmp.dir<name>
<value> /home/hadoop/hadoop-data</value>
</property>
</configuration>
  • fs.default.name

    • HDFS의 기본 이름. URI 형태로 사용된다.
    • 기본 값은 file://로 되어있지만 실제로는 'hdfs://localhost:9000' 과 같은 형식으로 사용된다
    • DataNode는 작업을 진행하기 위해 반드시 NameNode를 알고 있어야 한다
  • hadoop.tmp.dir

    • 하둡에서 발생하는 임시 데이터를 저장하는 공간이다
    • 기본으로 /root/tmp에 데이터를 생성한다.
    • (root에 할당되어 있는 local file의 크기가 작을 수도 있기 때문에 변경 추천)

10.4. hdfs-site.xml 수정

<hdfs-site.xml 코드>

hdfs-site.xml

<
?xml
version
=
"1.0"
?
>
<
?xml-stylesheet
type
=
"text/xsl"
href
=
"configuration.xsl"
?
>
<
configuration
>
<
property
>
<
name
>
dfs.replication
<

ame
>
<
value
>
3
<
/value
>
<
/property
>
<
property
>
<
name
>
dfs.http.address
<

ame
>
<
value
>
wikibooks01:50070
<
/value
>
<
/property
>
<
property
>
<
name
>
dfs.secondary.http.address
<

ame
>
<
value
>
wikibooks02:50090
<
/value
>
<
/property
>
<
/configuration
>
  • dfs.replication
    • HDFS에 저장될 데이터의 복제본 개수이다.
    • (이 값이 1이면 가상분산모드, 3이상이면 완전분산모드)
    • 3으로 설정 → HDFS에 데이터 저장하면 3개의 복제본이 생김
  • dfs.http.address
    • NameNode용 웹서버의 주소(기본값은 0.0.0.0:50070)
    • 완전분산모드로 설치할 경우 반드시 이 속성을 지정해야한다
    • 이 속성이 없으면, SecondaryNameNode가 NameNode에 접속할 수 없다
  • dfs.secondary.http.address
    • SecondaryNamenode용 웹서버의 주소값(기본값은 0.0.0.0:50090)

10.5. mapred-site.xml 수정

<mapred-site.xml 코드>

mapred-site.xml에는 mapred.job.tracker 속성(JobTracker 데몬의 주소) 속성을 추가한다.
DataNode에서는 이 주소로 MapReduce 작업을 요청한다

mapred.site.xml

<
?xml
version
=
"1.0"
?
>
<
?xml-stylesheet
type
=
"text/xsl"
href
=
"configuration.xsl"
?
>
<
configuration
>
<
property
>
<
name
>
mapreduce.job.traker
<

ame
>
<
value
>
wikibooks01:9001
<
/value
>
<
/property
>
<
/configuration
>

NameNode에서 모든 수정 작업이 완료되면 scp 명령어를 이용하여 NameNode의 하둡 환경설정 파일을 DataNode로 전송한다.

$ scp hadoop.
tar
.
gz
 hadoop@wikibooks02
:/
home
/
hadoop
/

$ scp hadoop.
tar
.
gz
 hadoop@wikibooks03
:/
home
/
hadoop
/

$ scp hadoop.
tar
.
gz
 hadoop@wikibooks04
:/
home
/
hadoop
/

파일 전송이 완료되면 SSH 명령어를 이용하여 전체 서버에 하둡을 설치한다

$ ssh hadoop@wikibooks02 
"cd /home/hadoop; tar xfz hadoop.tar.gz; rm hadoop.tar.gz"

$ ssh hadoop@wikibooks03 
"cd /home/hadoop; tar xfz hadoop.tar.gz; rm hadoop.tar.gz"

$ ssh hadoop@wikibooks04 
"cd /home/hadoop; tar xfz hadoop.tar.gz; rm hadoop.tar.gz"

편집

11. 하둡 실행

(1) NameNode 초기화

$ .
/
bin
/
hadoop namenode 
-
format

(2) 하둡관련 모든 데몬 실행

slaves 파일과 ssh 공개키 설정이 제대로 됐다면 DataNode 용 서버에서 DataNode와 taskTracker 데몬을 각각 실행한다

$ .
/
bin
/
start
-
all.
sh

(3) 하둡데몬 실행여부 확인(jps)

  • NameNode용 서버에서 jps를 실행해서 NameNode와 JobTracker가 뜨는지 확인한다.
  • DataNode용 서버에서 jps를 실행하여 TaskTracker, DataNode 가 출력되는지 확인한다.

  • jps (JVM Process Status Tool)

    • 시스템에서 실행 중인 자바 프로세스 출력
$ jps

(3-1) 하둡데몬 실행여부 확인(Web Interface)

http://{NameNode서버IP}:50070

제공정보

  • HDFS 용량. 데이터노드 개수 등 기본적인 HDFS 상태 정보
  • NameNode에 적재된 하둡 로그
  • HDFS에 저장된 파일

편집

12. 하둡 예제 실행

results matching ""

    No results matching ""